2012-02-05 3 views
3

Я пытаюсь скопировать изображение с удаленного сервера с помощью следующего кода:Копирование изображения с одного сервера на другой с помощью PHP

$src = "http://www.imagelocation.com/image.jpg"; 
$dest = "/server/location/upload/"; 
file_put_contents($dest, file_get_contents($src)); 

К сожалению, я получаю следующее сообщение об ошибке:

Warning: file_put_contents(/server/location/upload/) [function.file-put-contents]: failed to open stream: Is a directory in /server/location/myscript.php on line 220

У вас есть идеи, как обойти это?

ответ

9
$src = "http://www.imagelocation.com/image.jpg"; 
$dest = "/server/location/upload/" . basename($src); 
file_put_contents($dest, file_get_contents($src)); 

Необходимо указать имя файла. Я добавил basename($src), который будет писать то же имя файла, что и оригинал. Будьте осторожны, если вы копируете из других каталогов, basename() возвращает только имя файла, поэтому, если вы скопируете /image.jpg и /a/image.jpg, вы напишете оригинал.

+0

Отлично, пример действительно помогает. Спасибо! На другой ноте, как бы я работал, если копия была успешной или нет? – David

+2

use $ check = file_put_contents ($ dest, file_get_contents ($ src)); и посмотрите значение $ check. http://php.net/manual/en/function.file-put-contents.php говорит: Функция возвращает количество байтов, которые были записаны в файл, или FALSE при сбое. – Daan

2

Это потому, что $ dest - это каталог, а не файл. Вы можете либо вручную указать имя файла, либо использовать basename()

+0

Благодарим вас за разъяснение, где я ошибся. Это было очень полезно! – David

Смежные вопросы