远程映像的PHP复制失败并超时

时间:2012-12-20 08:01:17

标签: php curl copy fopen php4

关于这个主题有很多问题,但我找不到我的方案的答案。

我正在处理的客户端项目托管在运行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,但没有不同的结果。

2 个答案:

答案 0 :(得分:0)

正如@Charles和@SalmanA在评论中指出的那样,服务器上似乎存在连接问题,阻止了复制调用。

根据@ SalmanA的评论,尝试使用ssh shell中的wget显示了类似的超时结果,表明连接被阻止。

联系服务器主机并进一步询问是这里的解决方案。

答案 1 :(得分:-2)

你应该在php.ini中将默认的max_execution_time更改为max_execution_time = 600 - 必须

请将上传最大尺寸从默认值更改为您在php.ini文件中的需要,或使用 ini_set()将代码更改为..当您尝试仅上传时,此功能非常有用...

upload_max_filesize = 40M