Сбой команды PHP Copy при пробелах? - PullRequest
7 голосов
/ 13 октября 2010

Я выполняю следующие команды:

<?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 ]

8 голосов
/ 13 октября 2010
http://localhost/.../HERMAN 085.jpg

Должно быть

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

Копировать, а обертки http менее просты, чем браузеры / пользовательские агенты, когда дело доходит до недействительных URL.Пробел в URL недействителен, поэтому он должен быть urlencode 'd.

2 голосов
/ 16 марта 2014
//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}
1 голос
/ 17 ноября 2016

Самая странная вещь: путь% 20, кажется, не работает, но после некоторой тщетной попытки (сначала с% 20, затем цитированием имени файла, затем двойными кавычками, затем защитными пробелами, скажите мне, если я пропустилчто-то), теперь оригинальная версия работает без нареканий.Это Windows 10, PHP 5.5.12, и мы находимся в 2016 году. Удачи со всеми этими детерминированными системами с конечным состоянием:)

Возможное решение Кстати, использовать exec() и сделайте копию на уровне операционной системы.Опять же, это зависит от ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...