我有一个while循环,从文本文件中获取ip和密码,并使用HTTP Auth登录到我租用的某些服务器。
<?php
$username = 'admin';
function login($server, $login){
global $username, $password, $server;
$options = array(
CURLOPT_URL => $server,
CURLOPT_HEADER => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_USERAGENT => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5",
CURLOPT_HTTPHEADER => array("
Host: {$server}
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Authorization: Basic {$login}
"));
$ch = curl_init();
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ( $http_status == 200 ) {
//do something
echo "Completed";
}
else { echo "Something went wrong";}
};
$file = fopen('myServers.txt', 'r');
while (! feof($file)) {
$m = explode(fgets($file), ':');
$password = $m[0];
$server = $m[1];
$login = base64_encode("{$username}:{$password}");
login($server, $login);
};
?>
脚本运行正常。但是,当我在本地主机上加载页面时,需要永远加载,然后在完成整个文件时立即打印出所有内容。
我想在每次执行文件时打印Something went wrong
或completed
,我不希望它等待整个文件完成循环。
答案 0 :(得分:2)
您可能想要查看PHP刷新,它会在继续创建更多页面内容之前将内容推送到浏览器。请注意,根据我对PHP的记忆,您需要同时使用ob_flush()和flush()才能正确地将内容刷新到浏览器。
[编辑]
示例:您可以尝试将echo语句更改为类似下面的内容:
echo "Completed";
ob_flush();
flush();
答案 1 :(得分:1)
是否可以执行您想要执行的操作取决于正在使用的Web服务器以及如何配置输出缓冲。
开始阅读的好地方是PHP flush
功能的文档。
对flush
的调用旨在将输出推送给最终用户 - 但有时Web服务器会实现它自己的输出缓冲,这会影响效果。
来自flush
文档:
多个服务器,尤其是Win32上的服务器,仍会缓冲脚本的输出,直到它终止,然后才将结果传输到浏览器。