2015-01-02 2 views
1

다른 소프트웨어 버전의 유사한 웹 응용 프로그램을 실행하는 두 대의 서버가 있습니다.cURL 파일 다운로드는 5.5가 아닌 PHP 5.3에서 작동합니다.

두 서버에 CentOS 6.5를 실행하는

하나는 아파치 2.2 PHP 5.3

을 가지고 있으며, 다른 하나는 다운로드 주기적으로이 응용 프로그램의 주요 기능의 5.5

한 PHP는 아파치 2.4입니다 실행하는 CSV의

이 컬을 사용하여 수행하는 원격 URL에서 파일과 다음 코드를

$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 작업 동일한 코드의 결과입니다 내가 연구하고, 여기에 게시 타임 아웃 시간을 증가, 자원의 SSL 버전을 시도, 아직 다른 curl_setopt에 많이 재생하기 전에 많은 옵션을 시도했습니다 물론

[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 

, 난 항상 실패 취득 5.5 응용 프로그램에서 연결하십시오.

5.5의 cURL 확장에 대한 변경 사항이 있지만 Google 검색에서 문제를 업로드 할 때 찾을 수 있음을 알고 있습니다. 또한 file_get_contents를 사용하는 것과 같은 완전히 다른 옵션을 사용해 보았습니다. .

두 서버가 같은 위치에 있으며 URL이 완전히 열려 있으므로 5.3 서버에서 코드를 실행할 때 완벽하게 작동하기 때문에 문제가 파일 위치 내에 있는지 의심 스럽습니다. CURLOPT_SAFE_UPLOAD 옵션이 FALSE로 설정되어있는 경우 @file 구문을 사용하여

답변

1

내가 내 서버의 IP 차단했다 도달하려고했던 URL을 밝혀!

웹 마스터와 화이트리스트에 내 IP 주소를 문의 할 수 있었으므로 코드는 변경하지 않아도 그대로 작동합니다.

무엇을 염두에 두어야할까요? 오류 메시지 나 그 밖의 어떤 종류도없이 단순히 시간 만 초과하면 디버깅하기가 어려워졌습니다.

0

php에서 수동

업로드는 이제 지원됩니다. 대신 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

관련 문제