プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になります。
表題のとおり、
PHPでサーバー上の画像や動画のファイルをダウンロードしローカルに保存したいのですが、
ダウンロードはできるのですがファイルの中身が空になってしまいます。

特に動画の場合は
「ファイルを再生できません。プレーヤーがそのファイルの種類をサポートしていないか、そのファイルの圧縮に使用したコーデックをサポートしていない可能性があります。」
というメッセージが出ます。

ファイル形式は画像はjpg、動画はwmvで試しました。OSはwindows7です。
ブラウザはクローム、サファリ、IEで試しましたが結果は一緒でした。
プレーヤーは入っていて、ffftpでサーバーのファイルをクリックすると正しく開きます。

以下がソースになります。

<?php

// ダウンロードさせる元ファイル
$fullpath = 'http://www.ドメイン/パス/logo.jpg';

// 保存時のファイル名(デフォルト)
$filename = 'logo.jpg';

// HTTPヘッダ送信
header("Content-type: image/jpeg");
header("Content-Disposition: attachment; filename=$filename");

//ファイルサイズ進捗表示
header('Content-Length: '.filesize('$filename'));

// ファイルを読み込んで出力
readfile($fullpath);
?>

以上です。
ダウンロードされるファイル名は正しい(この場合logo.jpg)ものがダウンロードされます。

間違っている箇所、追加or削除したほうがよいコードなどございますでしょうか。
よろしくお願いいたします。

A 回答 (2件)

$fullpath がダメです。


httpで始まっているのは使えません。
    • good
    • 0
この回答へのお礼

そうだったのですね、知りませんでした。
ご指摘有難うございます!

お礼日時:2011/03/25 00:02

まず、fopen_wrappersという設定値はONになっていますか?



<?php

// ダウンロードさせる元ファイル
$fullpath = 'http://www.ドメイン/パス/logo.jpg';

// 保存時のファイル名(デフォルト)
$filename = 'logo.jpg';

// HTTPヘッダ送信
header("Content-type: image/jpeg");
header("Content-Disposition: attachment; filename=$filename");

//ファイルサイズ進捗表示
header('Content-Length: '.filesize($fullpath));

// ファイルを読み込んで出力
readfile($fullpath);
?>

filesize('$fullpath') となっていたので、直しました。

http://www.phppro.jp/phpmanual/php/function.read …


PHPにはあまり詳しくないですが;;
    • good
    • 0
この回答へのお礼

ありがとうございます。

教えてくださったページから色々わかりました。
無事解決です。

ご指摘いただいた点も直しました。
お恥ずかしい・・

ありがとうございました!

お礼日時:2011/03/25 00:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!