通过exec()启动PHP webserver时,PHP curl()拒绝连接

时间:2013-08-02 16:27:47

标签: php curl

我正在尝试在一些单元测试开始时启动PHP的内置Web服务器。目标是使用相同的脚本启动Web服务器,然后连接到它以验证我们的curl包装器库是否正常运行。

脚本:

<?php
    echo "Starting server...\n";
    exec("php -S localhost:8000 -t /path/to/files > /dev/null & echo $!", $output);


    $ch = curl_init("http://localhost/");
    curl_setopt($ch, CURLOPT_PORT, 8000);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);

    if(curl_errno($ch))
    {
            echo 'Curl error: ' . curl_error($ch);
    }

    // Close handle
    curl_close($ch);

    echo "PID: ".$output[0]."\n";
    exec('kill '.$output[0]);
?>

当我运行上面的脚本时,我收到了这个错误:

Curl error: Failed connect to localhost:8000; Connection refused

注意:

  • 网络服务器确实启动,如果我删除脚本末尾的kill,我可以看到在流程列表中运行的网络服务器
  • 如果我在命令行启动PHP的web服务器,我的PHP脚本可以连接到它
  • 如果我从另一个 PHP脚本启动PHP的网络服务器,上面的脚本可以连接到它
  • curl从命令行可以连接到PHP webserver started

我只能猜测,当PHP的网络服务器由一个然后尝试连接到它的进程启动时,有什么东西被阻止或发生了?

PHP 5.4.15

CentOS 5.6版(最终版)

1 个答案:

答案 0 :(得分:2)

我觉得你急! 您可以使用“&amp;”

在后台启动网络服务器

然后你尝试连接,但在那一刻,你的网络服务器没有完全启动,所以它不是在听!

<?php
    echo "Starting server...\n";
    exec("php -S localhost:8000 -t /path/to/files > /dev/null & echo $!", $output);


// sleep 1-5 seconds
sleep (5);

$ch = curl_init("http://localhost/");
curl_setopt($ch, CURLOPT_PORT, 8000);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);

if(curl_errno($ch))
{
        echo 'Curl error: ' . curl_error($ch);
}

// Close handle
curl_close($ch);

echo "PID: ".$output[0]."\n";
exec('kill '.$output[0]);