PHP脚本在通过命令行而不是浏览器运行时提供输出

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

当我通过命令行运行我的程序时,我的PHP脚本工作正常并正确地给出输出

但当我在浏览器中运行它时,它处理得很好,但我打印的输出没有显示出来

(注意:我的脚本正在while循环中运行,它将永远运行)

代码-我正在编写我的类文件的某些部分

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运行它-它不工作。很好-如果有意愿,就有解决方案:)很好-如果有意愿,就有解决方案:)