web-dev-qa-db-ja.com

PHPコードを使用してURLから画像をダウンロードしますか?

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ファイルと同じディレクトリにあり、書き込み可能です。

15
Sarah

ファイル名を指定しないため、既存のコードで画像を保存することはできません。次のようなことをする必要があります。

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

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

あなたのエラーは何ですか?しかし、あなたはやりたいことをする正しい方法を持っています。

コードに注意してください、file_put_contents($img_path, だが $img_pathはフォルダーへのパスです。次のようなものを書く必要があります。

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

受け入れられた回答に1つの条件を追加して、画像タイプを次のように確認しました。

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

上記の例から、ファイルをダウンロードする前にpng画像を確認する方法と、より多くのコンテンツタイプについて here を見つけることができます。

0

file_put_contents()では、最初のパラメーターがパスではなくファイル名である必要があります。

0
heyanshukla
file_put_contents($img_path, $content); 

何に入れますか? getputを間違えたと思います。または、ファイル名と拡張子を含む完全なパスを指定しなかった

0