Загрузить изображение с URL-адреса с помощью php-кода?

Как я могу использовать php для загрузки изображения из URL (например: https://www.google.com/images/srpr/logo3w.png), а затем сохранить его? Это то, к чему я пришел до сих пор, это дает мне ошибку в функции "file_put_contents".

<form method="post" action="">
<textarea name="text" cols="60" rows="10">
</textarea><br/>
<input type="submit" class="button" value="submit" />
</form>

<?php
    $img = "no image";
    if (isset($_POST['text']))
    {
    $content = file_get_contents($_POST['text']);
    $img_path = '/images/';
    file_put_contents($img_path, $content);    
    $img = "<img src=\"".$img_path."\"/>";
    }
    echo $img;
?>

Это дает мне ошибку:

[function.file-put-contents]: failed to open stream: No such file or directory in C:\wamp\www\img.php

Каталог /images/ находится в том же каталоге php файла и доступен для записи.

Ответы

Ответ 1

Вы не можете сохранить изображение с существующим кодом, потому что вы не предоставляете имя файла. Вам нужно сделать что-то вроде:

$filenameIn  = $_POST['text'];
$filenameOut = __DIR__ . '/images/' . basename($_POST['text']);

$contentOrFalseOnFailure   = file_get_contents($filenameIn);
$byteCountOrFalseOnFailure = file_put_contents($filenameOut, $contentOrFalseOnFailure);

Ответ 2

Если у вас allow_url_fopen установлено значение true:

     $url = 'http://example.com/image.php';
     $img = '/my/folder/flower.gif';
     file_put_contents($img, file_get_contents($url));

Повторное использование cURL:

     $ch = curl_init('http://example.com/image.php');
     $fp = fopen('/my/folder/flower.gif', 'wb');
     curl_setopt($ch, CURLOPT_FILE, $fp);
     curl_setopt($ch, CURLOPT_HEADER, 0);
     curl_exec($ch);
     curl_close($ch);
     fclose($fp);

Ответ 3

Какова ваша ошибка? Но у вас есть правильный способ делать то, что вы хотите сделать.

Просто позаботьтесь о своем коде, я вижу file_put_contents($img_path,, но $img_path - это путь к папке. Вам нужно написать что-то вроде:

Пример

$img_path="home/downloads/my_images";
file_put_contents($img_path."/flower.jpg");

Ответ 4

file_put_contents() требуется, чтобы первый параметр был именем файла, а не контуром.

Ответ 5

file_put_contents($img_path, $content); 

К чему вы относитесь? Я думаю, что вы допустили ошибку с get и put. или пропущен, чтобы указать полный путь, включая имя файла и расширение

Ответ 6

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

 if (exif_imagetype($_POST['text']) == IMAGETYPE_PNG) {
     $filename = './images/'.basename($_POST['text']);
     file_put_contents($filename, $content);
 }

Из приведенного выше примера я покажу, как проверить изображения png перед загрузкой файлов, а для получения дополнительных типов содержимого вы можете найти здесь.