【问题标题】:php copy() not working with an specific url linkphp copy() 不适用于特定的 url 链接
【发布时间】:2017-09-14 10:45:27
【问题描述】:

我想从另一台服务器复制图像,但它不起作用,我不知道为什么。这是我的代码:

if(copy('http://demo.swyp.fr/mod_traffiq/thumb/LQ1009C/LQ143559C/LQ157553C-71x100.jpg', 'zzz.jpg')) {
    echo "Copy success!";
}else{
    echo "Copy failed.";
}

总是返回失败。

【问题讨论】:

    标签: php copy


    【解决方案1】:

    您正在使用copy 函数。尽管此方法适用于远程源和目标,但我们鼓励您使用file_put/get_contents-方法(请参阅下面的文档引用)。

    $image = file_get_contents('http://demo.swyp.fr/mod_traffiq/thumb/LQ1009C/LQ143559C/LQ157553C-71x100.jpg');
    file_put_contents('zzz.jpg', $image);
    

    来自file_get_contents 文档:

    file_get_contents() 是将文件内容读入字符串的首选方法。如果您的操作系统支持,它将使用内存映射技术来提高性能。

    另请注意:

    如果启用了 fopen 包装器,则 URL 可以用作此函数的文件名。

    但是,如果您的设置中没有打开fopen 远程 URL,您可以使用 cURL 进行测试:

    $ch = curl_init('http://demo.swyp.fr/mod_traffiq/thumb/LQ1009C/LQ143559C/LQ157553C-71x100.jpg');
    $fp = fopen('zzz.jpg', 'wb');
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
    fclose($fp); 
    

    可能有其他 PHP 设置(或服务器配置)会禁用所有这些代码 sn-ps 运行。如果这不起作用,则可能是配置问题。

    【讨论】:

    • 照你说的做,但是复制的图片是空的:(
    • @MInhNHat 你看到注释了吗?这需要您启用 fopen。如果您的服务器禁用了此功能,则无法像这样下载远程。检查phpinfo() 中的值。
    • 复制功能仅适用于本地文件 - 我不认为这是真的。它使用与file_get_contents 相同的包装器。
    • @iainn 您实际上是正确的。 copy 文档中没有任何关于支持远程$source 的内容,尽管它声明它可以与远程$dest 一起使用。我会更新答案。
    • 我已经检查了“allow_url_fopen”的值。它已启用(打开),但复制的图像是空的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多