Загрузить изображение с 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 перед загрузкой файлов, а для получения дополнительных типов содержимого вы можете найти здесь.