PHP脚本在通过命令行而不是浏览器运行时提供输出
当我通过命令行运行我的程序时,我的PHP脚本工作正常并正确地给出输出 但当我在浏览器中运行它时,它处理得很好,但我打印的输出没有显示出来 (注意:我的脚本正在while循环中运行,它将永远运行) 代码-我正在编写我的类文件的某些部分PHP脚本在通过命令行而不是浏览器运行时提供输出,php,shell,ubuntu,command-line,Php,Shell,Ubuntu,Command Line,当我通过命令行运行我的程序时,我的PHP脚本工作正常并正确地给出输出 但当我在浏览器中运行它时,它处理得很好,但我打印的输出没有显示出来 (注意:我的脚本正在while循环中运行,它将永远运行) 代码-我正在编写我的类文件的某些部分 public function call($n) { global $argv; $this->response = null; $this->corr_id = uniqid(); $msgBody = 'test
public function call($n) {
global $argv;
$this->response = null;
$this->corr_id = uniqid();
$msgBody = 'test msg';
//Create queue
$this->createQueue($queueName);
$msg = new AMQPMessage(
(string) $msg_body,
array('correlation_id' => $this->corr_id,
'reply_to' => $this->callback_queue,
'priority' => 2)
);
$this->channel->basic_publish($msg, '', $queueName);
while(!$this->response) {
$this->channel->wait();
}
return $this->response;
}
$response = call();
createQueue()函数位于另一个类中
function createQueue($queueName='')
{
$exchange = 'router';
$queue = 'msgs';
$consumer_tag = 'consumer';
$connection = new AMQPConnection(HOST, PORT, USER, PASS, VHOST);
$channel = $connection->channel();
$channel->queue_declare($queueName, false, false, false, false);
echo " [x] Awaiting for message\n";
$callback = function($req) {
$n = $req->body;
echo "$n\n";
$msg = new AMQPMessage(
'msg',
array('correlation_id' => $req->get('correlation_id'))
);
$req->delivery_info['channel']->basic_publish(
$msg, '', $req->get('reply_to'));
$req->delivery_info['channel']->basic_ack(
$req->delivery_info['delivery_tag']);
};
$channel->basic_qos(null, 1, null);
$channel->basic_consume($queueName, '', false, false, false, false, $callback);
while(count($channel->callbacks)) {
$channel->wait();
}
}
当脚本在while循环中运行并永远运行时,这种情况必然会发生 在浏览器中运行脚本将超时,并且不会输出内容,因为脚本尚未完成
当您在命令行上运行脚本时,脚本将逐行执行,并显示输出,当脚本在while循环中运行并永远运行时,必然会出现这种情况 在浏览器中运行脚本将超时,并且不会输出内容,因为脚本尚未完成
在命令行上运行脚本时,脚本将逐行执行,并显示输出为什么循环需要永远运行?如果它从未完成,它将永远不会向客户端返回响应 当php运行时,它会在缓冲区中构建一个HTML文档,然后一次发送页面 如果循环在每次迭代时都为页面生成内容,那么您可能希望在循环一定次数后停止它,这样您就不会向用户发送无限的数据流
如果您正在执行计算之类的操作,那么您应该考虑使用JavaScript,并对php脚本进行AJAX调用。为什么循环需要永远运行?如果它从未完成,它将永远不会向客户端返回响应 当php运行时,它会在缓冲区中构建一个HTML文档,然后一次发送页面 如果循环在每次迭代时都为页面生成内容,那么您可能希望在循环一定次数后停止它,这样您就不会向用户发送无限的数据流 如果您正在执行计算之类的操作,那么应该考虑使用JavaScript,并对php脚本进行AJAX调用。是的,我们可以:) 请看一看-当您需要在响应完成之前输出时,这是永久运行脚本的方法 还可以看一看那里的第一条用户评论——它是关于使用
str_pad()
发送4KB的数据块,因为浏览器往往在达到特定数据量之前不会显示任何内容。是的,我们可以:)
请看一看-当您需要在响应完成之前输出时,这是永久运行脚本的方法
还可以看一看那里的第一条用户评论——它是关于使用
str_pad()
发送4KB的数据块,因为浏览器往往在达到特定数据量之前不会显示任何内容。和。。。你希望我们以此为基础解决你的问题。。。。?请发布代码…@MattClark-添加代码hey@conceptdeluxe-您能在答案部分给出您的答案吗?这样我就可以接受你的回答:)……这很好用。而且。。。你希望我们以此为基础解决你的问题。。。。?请发布代码…@MattClark-添加代码hey@conceptdeluxe-您能在答案部分给出您的答案吗?这样我就可以接受你的答案:)…这很好用。那么解决办法是什么呢?:)若要在浏览器中测试它,请不要永远在循环时运行。php中的默认超时设置为30秒。您可能想要更改它,或者您可以在30秒内完成较小的循环。实际上,我将使用curl运行它,并且我希望它永远运行,因为脚本将获得参数并相应地提供输出,就像ping机制一样。如果您在windows上,最好的方法是设置批处理脚本;如果您在linux和linux上,最好的方法是设置curl安排作业,而不仅仅是让它永远运行Curl脚本也不起作用-因为它就像一个浏览器,当然,那么解决方案是什么呢?:)若要在浏览器中测试它,请不要永远在循环时运行。php中的默认超时设置为30秒。您可能想要更改它,或者您可以在30秒内完成较小的循环。实际上,我将使用curl运行它,并且我希望它永远运行,因为脚本将获得参数并相应地提供输出,就像ping机制一样。如果您在windows上,最好的方法是设置批处理脚本;如果您在linux和linux上,最好的方法是设置curl安排作业,不仅仅是让它永远运行curl脚本也不起作用-因为它就像一个浏览器一样,当然我只想要像批处理脚本这样的东西,即使它在while循环中也能给出响应。如果我通过curl运行它,它就不工作了。我只需要像批处理脚本这样的东西,即使它在while循环中也能给出响应。如果我通过curl运行它-它不工作。很好-如果有意愿,就有解决方案:)很好-如果有意愿,就有解决方案:)