2014-01-21 196 views
0

我試圖通過Curl上傳文件到另一臺服務器。該腳本將文件上傳到我自己的服務器。我的服務器處理上傳和響應,我的腳本繼續進行,因爲它應該。 Hovever如果上傳的文件的大小(大約500MB)大小(看起來確實不同),即使在我的服務器響應後(AFAIK通過記錄服務器端腳本的輸出),腳本仍會繼續運行。客戶端是運行Xampp的Windows 7 x64機器(嘗試了不同的版本)。如果我通過html表單將相同的文件上傳到相同的serverside腳本,那麼一切正常,我得到我的迴應。可能是什麼問題呢?php curl_exec不響應服務器響應

$ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, array(
     "MAX_FILE_SIZE" => "2147483648", 
     "action" => "upload", 
     "userfile" => "@".$filepath)); 

    if($uploadresponse = curl_exec($ch)){ 
      echo"Upload done!"; 
     } else { 
     echo"Curl error no. ".curl_errno($ch)." (".curl_error($ch).")"; 
      } 
+0

我現在已經嘗試從另一臺機器,服務器與Windows Server 2012 x64(通過Xampp不IIS)。有效。原因可能是上傳速度比通過家庭連接快5倍。 – user2681321

+0

從Win 2012服務器安裝相同的Xampp,它不能在我的家用計算機上運行。我也嘗試過在沒有運氣的安全工作模式下。自第一次測試開始以來,Firewall Antivirus等已被禁用。我將在新的Windows 7安裝的另一臺機器上嘗試它。如果它不起作用,我會嘗試在家裏安裝Windows Server 2012,因爲問題可能是路由器什麼的。 – user2681321

+0

它也沒有在Windows服務器上工作。但是在我連接到我的鄰居WLAN後,它工作正常。我現在來看一下路由器的設置。 – user2681321

回答

0

curl有一個默認超時允許它執行,無論成功與否。

curl_setopt($ch, CURLOPT_TIMEOUT, 5 * 60); // 5 minutes 
+0

我剛剛嘗試過,但腳本在服務器響應後仍然保持運行。 – user2681321

0

有可能通過簡單的超時時間設置爲0沒有時間限制設置爲CURLOPT_TIMEOUT:您可以使用此捲曲選項​​(因爲我懷疑你得到超時而上傳大文件)延長該。

curl_setopt($ch, CURLOPT_TIMEOUT, 0);