2015-01-02 86 views
1

我有兩臺服務器在不同的軟件版本中運行類似的網絡應用程序。cURL文件下載適用於PHP 5.3而不是5.5

兩個服務器運行的CentOS 6.5

一個具有Apache 2.2的PHP 5.3

而另一種是運行Apache 2.4 PHP 5.5

之一這個應用程序的鍵功能被週期性地下載一個從遠程URL

這是使用捲曲完成CSV文件,下面的代碼:

$filename = 'export.csv'; 
$url = 'http://www.someaddress.com/export/' . $filename; 
$curl = curl_init(); 
$fd = fopen(DIR_FS_ADMIN . 'temp/' . $filename , "w"); 
curl_setopt ($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_FILE, $fd); 
curl_exec ($curl); 
curl_close ($curl); 

正如你所看到的代碼,一個很簡單的一點是,在PHP的偉大工程5.3

這是curl_getinfo()

[content_type] => text/csv 
[http_code] => 200 
[header_size] => 209 
[request_size] => 95 
[filetime] => -1 
[ssl_verify_result] => 0 
[redirect_count] => 0 
[total_time] => 1.98925 
[namelookup_time] => 0.816404 
[connect_time] => 0.817009 
[pretransfer_time] => 0.831392 
[size_upload] => 0 
[size_download] => 13564110 
[speed_download] => 6818705 
[speed_upload] => 0 
[download_content_length] => 13564110 
[upload_content_length] => -1 
[starttransfer_time] => 0.834829 
[redirect_time] => 0 
[certinfo] => Array 
    (
    ) 

[redirect_url] => 
) 
Error Code: 0 

的結果,這些是相同的代碼上工作5.5的結果

[content_type] => 
[http_code] => 0 
[header_size] => 0 
[request_size] => 0 
[filetime] => -1 
[ssl_verify_result] => 0 
[redirect_count] => 0 
[total_time] => 126.332476 
[namelookup_time] => 0.000369 
[connect_time] => 0 
[pretransfer_time] => 0 
[size_upload] => 0 
[size_download] => 0 
[speed_download] => 0 
[speed_upload] => 0 
[download_content_length] => -1 
[upload_content_length] => -1 
[starttransfer_time] => 0 
[redirect_time] => 0 
[redirect_url] => 
[primary_ip] => 
[certinfo] => Array 
    (
    ) 

[primary_port] => 0 
[local_ip] => 
[local_port] => 0 
) 
7 Failed to connect to www.someaddress.com/export/: Connection timed out 

當然,我已經研究和嘗試了很多的方案張貼在這裏,增加超時時間,嘗試了資源的SSL版本,並打了很多不同curl_setopt但之前,我總是失敗從5.5應用程序連接。

我知道一些關於5.5上cURL擴展的改變,但我可以通過谷歌搜索找到指向上傳的問題,我也嘗試了完全不同的選項,比如使用file_get_contents並且什麼都沒有,只是超時。

兩臺服務器位於同一地點,URL完全打開,所以我真的懷疑問題出在文件位置,因爲當我在5.3服務器上運行代碼時,仍然可以正常工作。

回答

1

原來的URL我試圖達到了我的服務器的IP封鎖!

我能夠聯繫網站管理員和白名單我的IP地址,現在代碼工作正常,因爲它是無需任何更改。

還有一件事要記住,是什麼讓它很難調試它,它只是超時,沒有錯誤信息或任何種類。

0

php手動

使用@file語法

上傳,如果CURLOPT_SAFE_UPLOAD選項設置爲FALSE,現在只支持。應該使用CURLFile來代替。

curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true); 

有上多POST請求 「@」 的問題。

Solution for PHP 5.5 or later: 
    - Enable CURLOPT_SAFE_UPLOAD. 
    - Use CURLFile instead of "@". 

    Solution for PHP 5.4 or earlier: 
    - Build up multipart content body by youself. 
    - Change "Content-Type" header by yourself. 

The CURLFile class

+0

我知道這一點,正如我在評論中所說的,我知道CURLFile類,但是這個文件對象僅用於從已有的本地文件上傳到服務器。 但是,即使我採取了 curl_setopt($ curl,CURLOPT_FILE,$ fd); 出了代碼,並嘗試只是抓住內容,我仍然得到了資源的時間... – Sandman21dan

+0

@ Sandman21dan已啓用CURLOPT_SAFE_UPLOAD? – fortune

+0

也是一個參考鏈接http://stackoverflow.com/questions/25180366/writing-the-following-curl-in-php – fortune