2012-12-20 53 views
1

關於此主題有許多問題,但我無法找到我的方案的答案。遠程圖像的PHP複製失敗,超時

我正在處理的客戶端項目託管在運行PHP 4.3.9的服務器上,我試圖將遠程映像複製到服務器。這總是失敗時出現超時:

var_dump(
    copy('http://domain.com/path/to/image.jpg', 
     '/opt/www/myfolder/myimage.jpg') 
); 

這個正在錯誤消息:Warning: copy(http://domain.com/path/to/image.jpg): failed to open stream: Connection timed out in /opt/www/myfolder/my-script.php on line xx bool(false)

我做的幾個INI​​設置,這將似乎罰款我得無影無蹤。

var_dump(
    ini_get('upload_max_filesize'), 
    ini_get('post_max_size'), 
    ini_get('max_execution_time'), 
    ini_get('max_input_time'), 
    ini_get('allow_url_fopen')); 

跟蹤顯示:

string(2) "8M" string(2) "8M" string(2) "30" string(2) "60" string(1) "1" 

所以allow_url_fopen似乎被啓用,而其他設置似乎也沒關係。我嘗試了不同的圖像,所有圖像都可以通過瀏覽器訪問,所有圖像尺寸都很小,不同的遠程主機。我的服務器的目標目錄是可寫的,例如從我自己的服務器的URI複製文件就可以很好地複製文件。

我也試過this answercurl變種,結果相同。

當我嘗試使用較新的PHP版本的不同服務器上的相同腳本時,它工作正常。

項目服務器上的哪些設置可能會導致失敗?有沒有關於PHP 4.3.9我錯過了,導致此失敗?

請,請注意,我不能改變的PHP版本,我已經沒有必要回答通知我升級或說服我的客戶升級

編輯:改變upload_max_filesize爲40MB,並max_execution_time 600沒有不同的結果。

+0

嘗試SSH到PHP4服務器並使用wget或其他方式下載文件。看看你是否得到類似的錯誤。 –

+0

@SalmanA我得到一個與'copy'相同的超時時間 - 這是否意味着服務器上的用戶帳戶不允許該類型的遠程調用?如果是這樣,那麼這些問題會給我帶來什麼影響? – kontur

+2

與您的虛擬主機提供商交談。超時意味着遠程計算機沒有響應*或*您和他們之間的防火牆正在靜默地斷開連接(不拒絕連接)。只有您的主機才能夠調查此問題。 – Charles

回答

0

正如指出的@Charles和@SalmanA我在評論中,服務器上似乎存在阻止複製呼叫的連接問題。

基於@ SalmanA的評論,嘗試從ssh shell使用wget顯示類似的超時結果,表明阻塞的連接。

聯繫服務器主機並進一步詢問是解決方案。

-1

您應該更改默認的max_execution_time在php.ini中的max_execution_time = 600 - 必須

請更改的默認值上傳最大尺寸您需要在php.ini文件或thourgh使用代碼的ini_set() ..這是有益的,當ü嘗試只上傳...

的upload_max_filesize = 40M

+0

感謝您的回答。根據您的輸入編輯ini值,但結果相同。超時失敗。 – kontur

+1

爲什麼「必須」?詳細解釋爲什麼最大執行時間*必須是600秒以及爲什麼必須更改* upload *文件大小?這裏沒有文件上傳。上傳設置用於從用戶上傳的文件,而不是通過流。 – Charles

+0

@Charles:你好我已經提到,如果文件上傳在那裏,那麼它是需要好的...你沒有看到??????? –