Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cURL文件下载适用于PHP5.3,而不是5.5_Php_Apache_Curl_Download_Php 5.5 - Fatal编程技术网

cURL文件下载适用于PHP5.3,而不是5.5

cURL文件下载适用于PHP5.3,而不是5.5,php,apache,curl,download,php-5.5,Php,Apache,Curl,Download,Php 5.5,我有两台服务器在不同的软件版本中运行类似的web应用程序 两台服务器都运行CentOS 6.5 一个是Apache2.2PHP5.3 另一个运行Apache2.4PHP5.5 此应用程序的关键功能之一是定期从远程URL下载CSV文件 这是使用cURL和以下代码完成的: $filename = 'export.csv'; $url = 'http://www.someaddress.com/export/' . $filename; $curl = curl_init(); $fd = fopen

我有两台服务器在不同的软件版本中运行类似的web应用程序

两台服务器都运行CentOS 6.5

一个是Apache2.2PHP5.3

另一个运行Apache2.4PHP5.5

此应用程序的关键功能之一是定期从远程URL下载CSV文件

这是使用cURL和以下代码完成的:

$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);
正如您所看到的,一段非常简单的代码在PHP5.3中非常有效

这是curl_getinfo()的结果

这些都是在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_内容,但仍然没有,只是超时

两台服务器位于同一个位置,URL完全打开,因此我真的怀疑问题是否在文件位置内,因为我在5.3服务器上运行代码时仍能正常工作。

来自手册

现在,仅当CURLOPT_SAFE_UPLOAD选项设置为FALSE时,才支持使用@file语法的上载。应该改用CURLFile

多部分POST请求中存在“@”问题


结果是我试图访问的URL被服务器的IP阻止了

我可以联系网站管理员并列出我的IP地址,现在代码可以正常工作,不需要任何更改


还有一点需要记住,是什么使调试变得困难,它只是超时,没有错误消息或任何类型的错误。

我知道这一点,正如我在评论中所说,我知道CURLFile类,但这个文件对象仅用于从您已有的本地文件上载到服务器。但是,即使我使用curl_setopt($curl,CURLOPT_FILE,$fd);从代码中取出并尝试获取内容,我仍然在资源上获得了一段时间…还有一个参考链接,我尝试使用CURLOPT_SAFE_UPLOAD,但没有成功,但我想我最终发现了问题,显然我尝试获取请求的服务器拒绝了我服务器IP的所有内容,这就解释了为什么相同的代码可以在不同的服务器上工作,并且可以从任何其他网站下载。谢谢你的回答,仍然要确认这一点,只要网站管理员白名单我的IP的
[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
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true); 
    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.