我正在执行以下命令:
<?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之前有空格)。
非常感谢任何帮助!
答案 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()并在操作上做一个副本 系统级别。然后,它是特定于操作系统的。