PHP复制远程映像失败,超时

6pp0gazn  于 2023-04-28  发布在  PHP
关注(0)|答案(3)|浏览(107)

关于这个主题有很多问题,但我找不到我的方案的答案。
我正在处理的客户端项目托管在运行PHP4的服务器上。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,结果无差异。
jxct1oxe

jxct1oxe1#

正如@Charles和@SalmanA在评论中指出的那样,服务器上似乎存在连接问题,阻止了复制调用。
根据@SalmanA的评论,尝试从ssh shell中使用wget显示了类似的超时结果,表明连接被阻止。
联系服务器主机并进一步查询是这里的解决方案。

htzpubme

htzpubme2#

您可能应该增加该特定请求的超时时间。因此,为copy命令创建一个上下文,增加超时时间:

$arrRequestHeaders = array(
        'http' => array(
            'method' => 'GET',
            'timeout' => 600
        )
    );
copy('http://example.com/path/to/image.jpg', '/opt/www/myfolder/myimage.jpg',stream_context_create($arrRequestHeaders));

您可以在这里获得更多信息https://www.php.net/manual/en/function.copy.php

nr9pn0ug

nr9pn0ug3#

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

请在php中更改上传的最大大小从默认值到您的需要。ini文件或通过使用**ini_set()**的代码。.当你只尝试上传时,这很有帮助。..

upload_max_filesize = 40M

相关问题