空格时PHP复制命令失败?

时间:2010-10-13 16:16:18

标签: php copy

我正在执行以下命令:

<?php
copy ("http://localhost/.../DSCF8253.JPG" , "sites/default/files/DSCF8253.JPG"); // Success!
copy ("http://localhost/.../DSCF8260.JPG" , "sites/default/files/DSCF8260.JPG"); // Success!
copy ("http://localhost/.../HERMAN 085.jpg" , "sites/default/files/HERMAN 085.jpg" ); // Fail!
?>

前两个副本很好,但不是最后一个。为什么呢?

它必须与文件名有关(最后一个在085之前有空格)。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:8)

http://localhost/.../HERMAN 085.jpg

应该是

http://localhost/.../HERMAN%20085.jpg

复制&amp;当涉及到无效的URL时,http包装器对浏览器/用户代理的宽容度要低一些。网址中的空格无效,因此应为urlencode'd。

答案 1 :(得分:2)

//i used this code once i tried to copy images to a wordpress site and set post featured image
//i only mentioned the part you want and did not mention other parts
$image_url = 'http://example.com/images/my image with spaces.jpg';
try {
    //throw exception if can't move the file

    if (!copy(str_replace(" ","%20",$image_url),$file)) {
        $errors = error_get_last();
        throw new Exception('Could not copy file');
    }   

} catch (Exception $e) {
    echo $e->getMessage();
}
 //using urlencode will corrupt the url if used with the full url
 //it will generate something like http%dsf%swdfablablabla
 //if you need to encode you will encode anything after http://yoursite.com/{encode only works here}

答案 2 :(得分:1)

最奇怪的事情:%20的方式似乎没有办法,但经过一番尝试 徒劳(首先是%20,然后引用文件名,然后双引号,然后 保护空间,告诉我,如果我错过了什么),现在原始版本完美无瑕。这是Windows 10,PHP 5.5.12,我们在2016年。 祝所有这些确定性的有限状态系统好运:))

一个可能的解决方案 btw,就是使用exec()并在操作上做一个副本 系统级别。然后,它是特定于操作系统的。