|
|
|
สอบถาม การ echo ข้อมูลใน loop for กับ while ค่ะ อยากให้ echo ในแต่ละรอบของ loop ค่ะ |
|
|
|
|
|
|
|
น่าจะอยูุ่ที่การกำหนดเงื่อนไขครับ แต่ยังไม่ค่อยเข้าใจว่าจะใช้ทำอะไร ลองอธิบายอีกหน่อยครับ
|
|
|
|
|
Date :
2017-02-26 16:23:26 |
By :
thesin18598 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 1 เขียนโดย : thesin18598 เมื่อวันที่ 2017-02-26 16:23:26
รายละเอียดของการตอบ ::
ใช้ Curl ในการ login web ค่ะ เช่นมี 3 เว็บ สมมติว่า สามารถ login ผ่านทุกเว็บ อยากให้ผลลัพธ์เป็น
loop 1 =============//http://www.test1.com
ให้ echo ค่าออกมา
web=http://www.test1.com
Login Success
พอถึง loop 2 =============//http://www.test2.com
ให้ echo ค่าออกมา
web=http://www.test2.com
Login Success
พอถึง loop 3 =============//http://www.test3.com
ให้ echo ค่าออกมา
web=http://www.test3.com
Login Success
คือ ถ้าครบ 1 loop ก็อยากให้ echo ค่าออกมาอะค่ะ แต่ตอนนี้ที่ทำ มันต้องรอให้ครบทั้ง 3 loop แล้ว ถึงจะ echo ค่าออกมาทีเดียว
Code (PHP)
$arr = array("http://www.test1.com", "http://www.test2.com", "http://www.test3.com");
foreach ($arr as $domain) {
echo "web=$domain<br>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "user=test&passwrd=001");
curl_setopt($ch, CURLOPT_URL, "$domain?action=login");
curl_exec($ch);
$checklogin = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
if($checklogin){
echo "Can't Login<br>";
}else{
echo "Login Success <br>";
}
curl_close($ch);
}
|
|
|
|
|
Date :
2017-02-26 19:36:37 |
By :
sammam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แบบนี้ใช่ไหมครับ ส่ง array เข้าไปทีละตัว
Code (PHP)
function testFunction($frm)
{
echo "web=$frm<br>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "user=test&passwrd=001");
curl_setopt($ch, CURLOPT_URL, "$frm?action=login");
curl_exec($ch);
$checklogin = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
if($checklogin)
{
echo "Can't Login<br>";
}else{
echo "Login Success <br>";
}
curl_close($ch);
}
$arr = array("http://www.test1.com", "http://www.test2.com", "http://www.test3.com");
array_walk($arr,"testFunction");
|
ประวัติการแก้ไข 2017-02-26 20:15:41
|
|
|
|
Date :
2017-02-26 20:15:23 |
By :
thesin18598 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้เช็คจาก URL ก่อน คือ ถ้า URL มีตรงกับใน array แล้วค่อยส่งไปเช็คใน function อีกที
Code (PHP)
function testFunction($frm)
{
echo "web=$frm<br>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "user=test&passwrd=001");
curl_setopt($ch, CURLOPT_URL, "$frm?action=login");
curl_exec($ch);
$checklogin = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
if($checklogin)
{
echo "Can't Login<br>";
}else{
echo "Login Success <br>";
}
curl_close($ch);
}
$arr = array(
"http://www.test1.com",
"http://www.test2.com",
"http://www.test3.com"
);
/*array_walk($arr,"testFunction");*/
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$countArr = count($arr);
for($i=0; $i<$countArr; $i++)
{
switch ($arr[$i]) {
case $actual_link:
testFunction($actual_link);
break;
}
}
|
|
|
|
|
Date :
2017-02-26 21:20:02 |
By :
thesin18598 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
php อย่างเดียวน่าจะทำไม่ได้ครับถ้าต้องการแบบนั้น
คงต้องใช้พวก interval ajax หรือ jquery เข้ามาช่วยครับ
index.php
<html>
<head>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(function(){
var domains = ['http://www.domain1.com','http://www.domain2.com','http://www.domain3.com']; //ใส่โดเมนเนมตรงนี้...
var checkLogin = function(dm){
$.get('login.php',{domain: dm},function(data){
$('#myDiv').append('Web: '+dm+' ==> ');
if(data == 1){
$('#myDiv').append('<span class="LoginPass">Login Success!</span><br>');
result = 'ok';
} else {
$('#myDiv').append('<span class="LoginFail">Can\'t Login!</span><br>');
result = 'ok';
}
});
};
result = 'ok';
var keepLogin = setInterval(function () {
if(result=='ok'){
result = '';
if(domains.length > 0){
checkLogin(domains[0]);
var index = domains.indexOf(domains[0]);
domains.splice(index, 1);
} else {
clearInterval(keepLogin);
}
}
},3000);
});
</script>
<style>
.LoginPass{
color: green;
}
.LoginFail{
color: red;
}
</style>
<body>
<div id="myDiv"></div>
</body>
</html>
login.php
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "user=test&passwrd=001");
curl_setopt($ch, CURLOPT_URL, $_GET['domain']."?action=login");
curl_exec($ch);
$checklogin = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
if($checklogin){
echo 1;
} else {
echo 0;
}
curl_close($ch);
?>
|
ประวัติการแก้ไข 2017-02-27 00:17:11 2017-02-27 00:43:50 2017-02-27 00:52:11
|
|
|
|
Date :
2017-02-27 00:13:31 |
By :
tomrambo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
การ echo ออกแบบให้ดีๆนะครับ ผมว่าพยายามจัดลำดับการทำงานให้มันประมวลผลให้เสร็จไปเลยก่อนจะดีกว่า เรื่อง echo ไว้ทีหลังสุด
เพราะบางกรณี server ถ้าไม่ได้เปิด output buffer แล้วโค้ดเราถ้ามีการเรียกใช้ header เช่น session, cookie มันจะมี error header already sent ออกมา
ถ้าประมวลผลเสร็จหมดแล้วเอาส่วนแสดงผลหรือ echo ไว้ท้ายสุด ปัญหานี้จะไม่มีเลย และไม่ต้องมาแก้ใน .htaccess, ไม่ต้องเพิ่มโค้ด ob_start() ด้วย.
นี่พูดถึงไว้เผื่อมีกรณีที่มันต้องทำงานกับ header.
|
|
|
|
|
Date :
2017-02-27 06:24:45 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณทุกคนมากคร้า
|
|
|
|
|
Date :
2017-02-27 14:54:08 |
By :
sammam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|