0
我試圖在某些單元測試開始時啓動PHP的內置web服務器。目標是讓相同的腳本啓動Web服務器,然後連接到它來驗證我們的捲曲包裝庫的行爲是否適當。通過exec()啓動PHP網絡服務器時,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
注:
- 的Web服務器不啓動,如果刪除
kill
在腳本的結尾我可以看到在進程列表中運行的webserver - 如果我開始了PHP的命令行上的Web服務器我的PHP腳本可以連接到它
- 如果我從啓動PHP的Web服務器的另一個 PHP腳本上面的腳本可以連接到它
curl
命令行可以連接到PHP的網絡服務器開始
我只能猜測,當一個進程嘗試連接到它的進程啓動PHP的Web服務器時,有東西被阻止或發生?
PHP 5.4.15
CentOS版本5.6(最終)
哇,簡直不敢相信它是那麼簡單!謝謝! –
該死的異步! :D:D:D –