2

私はインターネットやSOからの多くの投稿を検索してきましたが、運がありませんでした. リモートサーバーからファイルを取得する次のコードがあります。

$url  = 'http://www.example.com/images/abc.png';
$path = '/home/axxxxxxx/public_html/images/abc.png';

$fp = fopen($path, 'w');

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);

$data = curl_exec($ch);

curl_close($ch);
fclose($fp);

$url1 つのサーバーからのファイルを$path表します。‰PNG IHDRàw=ø IDATxÚ•yLWÇ¿3³3³ì² (VP)àUÓzDc«コードを実行すると、html ページが...で始まる奇妙なコードを出力します。

テキスト エディターを使用して new.png を開くと、得られたコードは、上記の php cURL スクリプトが存在するページのコードと同じでした。(スクリプトによって正しいファイルが読み取られているようです)

また、次のようなエラー メッセージが表示されます。

  • Warning: fopen(../axxxxxxx/public_html/images/new.png) [function.fopen]: failed to open stream: No such file or directory in /home/ayyyyyyy/public_html/test.php on line 5
  • Warning: curl_setopt(): supplied argument is not a valid File-Handle resource in /home/ayyyyyyy/public_html/test.php on line 8

ここに表示される Unicode 文字セット ( PNG IHDRàw=ø IDATxÚ•yLWÇ¿3³3³ì² (VP)àUÓzDc«)

  • Warning: fclose(): supplied argument is not a valid stream resource in /home/ayyyyyyy/public_html/test.php on line 12

どちらのサイトも 000webhost.com でホストされています。

ファイルをユーザーのコンピューターにダウンロードするにはどうすればよいですか?

4

1 に答える 1

0

問題は (あるとすれば) ダウンロードしているPNGファイルがファイルであり、それをテキスト ファイルとして読み取ろうとしていることです。これは、表示されている「奇妙なコード」です。

ファイルをブラウザに出力する前にContent-Typeヘッダーを送信すると、実際の画像が表示されます。

header('Content-Type: image/png');
echo $data;

とは、ユーザーにファイルをdownload the file to the user's computerダウンロードするよう促したいという意味だと思います。これを行うには、Content-dispositionヘッダーを として設定しattachmentます。これを上記の content-type ヘッダーと組み合わせることもできます。

header("Content-Type: image/png");
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"some_image.png\""); 
于 2013-03-18T17:28:33.490 に答える