2014-01-17 107 views
2

我試圖訪問我的PHP腳本中的一些遠程網站,但腳本保持超時。wget適用於命令行,但不適用於PHP

它只在測試Web服務器上運行時失敗,但不在生產Web服務器上運行。

該腳本在訪問大多數其他URL時工作得很好,例如, stackoverflow.com或www.google.com。

我試過用PHP命令file_get_contents($url)以及exec("wget $url")和exec("curl $url"),所有這些都失敗了。再說一次,大多數網站運行良好,而不是我真正想要的。

我可以通過wget和curl訪問命令行上的遠程站點。即使是PHP腳本也可以在命令行中運行!所以我知道這個劇本有效。

該腳本在我們的生產Web服務器上運行時工作。但它在測試Web服務器上運行時不起作用。

似乎只有來自Apache的GET請求從測試服務器到遠程站點有一些特殊之處,而不是命令行。

如何診斷此問題?

+0

測試Web服務器是否產生任何錯誤?你有PHP錯誤顯示啓用?你有權訪問Apache/IIS或PHP日誌嗎?如果它已經不是,你能打開日誌嗎? – MonkeyZeus

+0

你可以用'sudo su '(其中可能是'apache'或'www-data')切換用戶來測試是否是因爲apache-user的權限。你也可以嘗試使用PHP的curl函數,而不是去通過'exec'。 – towr

+0

Apache用戶在SUSE Linux機器上是wwwrun。我可以成功地從命令行爲此用戶運行wget和curl。但是PHP腳本失敗,出現「連接超時錯誤」。 – berbo

回答

0

下面是要考慮幾件事情:

  • 不同的系統用戶的命令行和Web服務器。
  • 代理服務器配置(有時通過環境變量完成)。
  • 測試和生產服務器的不同網絡(DNS,路由,防火牆等)配置。
+0

我試圖解決這些問題。 – berbo

+0

1.我在上面建立了這一點。當我作爲Web服務器用戶從命令行運行時,出現錯誤。因此它必須是一些與網絡用戶相關的因素。這可能是什麼因素? 2.我們沒有使用代理服務器。 3.我不確定它是一個網絡問題,因爲我可以像命令一樣從命令行運行它。我只是無法運行它作爲Web服務器用戶。 – berbo

相關問題