Как я могу использовать php для загрузки изображения из URL-адреса (например: http://img.ruphp.com/url/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-файла и доступен для записи.
Вы не можете сохранить изображение с помощью существующего кода, потому что вы не указываете имя файла. Вам нужно сделать что-то вроде:
$filenameIn = $_POST['text']; $filenameOut = __DIR__ . '/images/' . basename($_POST['text']); $contentOrFalseOnFailure = file_get_contents($filenameIn); $byteCountOrFalseOnFailure = file_put_contents($filenameOut, $contentOrFalseOnFailure);
Если у вас 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);
Какая у вас ошибка? Но у вас есть правильный способ делать то, что вы хотите.
Просто позаботьтесь о своем коде, я вижу file_put_contents($img_path,
но $img_path
– это путь к папке. Вам нужно написать что-то вроде:
пример
$img_path="home/downloads/my_images"; file_put_contents($img_path."/flower.jpg");
file_put_contents($img_path, $content);
К чему вы вкладываете? Я думаю, что вы сделали ошибку, get
и put
. или пропущен, чтобы указать полный путь, включая имя файла и расширение
file_put_contents()
требует, чтобы первый параметр был именем файла, а не file_put_contents()
.
Я добавил одно условие к принятому ответу, чтобы проверить тип изображения следующим образом:
if (exif_imagetype($_POST['text']) == IMAGETYPE_PNG) { $filename = './images/'.basename($_POST['text']); file_put_contents($filename, $content); }
из приведенного выше примера я покажу, как проверить png-изображения перед загрузкой файлов и для большего количества типов содержимого, которые вы можете найти здесь .