[英]Connection refused for PHP curl() when starting PHP webserver via exec()
我正在嘗試在某些單元測試開始時啟動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
,我可以看到該Web服務器在進程列表中運行 curl
可以連接到PHP Web服務器啟動 我只能猜測,當PHP的網絡服務器由某個進程啟動然后嘗試連接到該進程時,會阻止或發生某些事情嗎?
PHP 5.4.15
CentOS版本5.6(最終版)
我認為你着急! 您可以使用“&”在后台啟動Web服務器。
然后,您嘗試連接,但是在那一刻,您的Web服務器尚未完全啟動,因此它沒有監聽!
<?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]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.