我想使用fsockopen()來檢查Selenium服務器是否正在運行。當服務器運行時,應該設置常量。當它不是常數沒有設置。這是通過使用以下代碼完成的:PHP - fsockopen()超時而不是返回false?
if(!defined('TEST_SELENIUM')){
$fp = @fsockopen('localhost', 4444);
if ($fp !== false) {
define('TEST_SELENIUM', true);
fclose($fp);
}
}
當服務器未運行(在Windows 7上)時出現問題。而不是fsockopen()從找到一個封閉的端口返回false,它試圖與端口進行通信。當服務器運行時,它使用netstat快速顯示。當服務器關閉時,netstat不會從端口4444返回任何東西。從我對fsockopen()的理解,這應該立即返回false。但是,它再次試圖與港口溝通。我不想在這裏添加一個超時,因爲這不是應用程序中應該有任何排序的一個點。另外,我應該注意到,這看起來像我期望的那樣在Linux上工作。但是,它在Windows 7上失敗了。誰能告訴我我做錯了什麼?非常感謝!
謝謝你的非常詳細的答案。該程序將主要在Linux上運行,所以我可能會嘗試您提到的註冊表設置更改可能會發生。這真的是我正在尋找的解決方案。但如果需要,我會確保使用適當的超時。 – golmschenk 2012-08-23 16:01:26