1

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

我正在处理的客户端项目托管在运行 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 复制一个文件就可以很好地复制该文件。

我还尝试了这个答案curl的变体,结果相同。

当我在具有较新 PHP 版本的不同服务器上尝试相同的脚本时,它工作正常。

项目服务器上的哪些设置会导致此失败?我缺少关于 PHP 4.3.9 的某些内容会导致此操作失败吗?

请注意,我无法更改 PHP 版本,也不需要建议我升级或说服我的客户升级的答案

编辑:更改upload_max_filesize为 40MB 和max_execution_time600 没有不同的结果。

4

2 回答 2

0

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

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

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

于 2012-12-21T07:32:25.447 回答
-2

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

请在 php.ini 文件中将上传最大大小从其默认值更改为您的需要,或者使用ini_set()更改您的代码。当您尝试仅上传时,这很有帮助...

upload_max_filesize = 40M

于 2012-12-20T08:04:07.687 回答