0

PHP を介してファイルのダウンロードを開始しようとしています。ダウンロードはできますが、ファイルを開くことができません。HTML のイメージ タグを使用してイメージをプレビューしてテストしたため、パスは正しいです。

    $findPage = mysql_query("SELECT * FROM pages WHERE page_id = '$pageId' LIMIT 1");
    $pg = mysql_fetch_array($findPage);

    $fullPath = $pg['page_link'];
    $explode = explode(".", $fullPath);

    $ext = $explode[count($explode)-1];

    header('Content-disposition: attachment; filename="Name.'.$ext.'"');
    header('Content-type: image/'.$ext);
    readfile($fullPath);
4

1 に答える 1

2

次のことを試してみると何が得られますか。

$fullPath = 'https://www.google.co.uk/images/srpr/logo3w.png';

list($w,$h,$t) = getimagesize($fullPath);  
$mimetype = image_type_to_mime_type($t);
$extension = end(explode('.', $fullPath));

header('Content-disposition: attachment; filename="Name.'.$extension.'"');
header('Content-type: '.$mimetype);
readfile($fullPath);

Googleのロゴをダウンロードする必要があります...私はローカルセットアップで行います。

*(このコードでは、サーバーでfopen_wrappersを有効にする必要があります)*

Googleのロゴが正しくダウンロードされた場合は、データベースから提供されているデータに問題があるか、readfileがファイルにアクセスして読み取ろうとしたときの権限の問題である可能性があります。

file_exists( $fullPath ) /// will tell you if the file exists or not

is_readable( $fullPath ) /// could be useful to detect a read error

Googleのロゴが表示されない場合は、サーバーでfopen_wrappersが無効になっているか、コードの他の場所で何か奇妙なことが起こっています。

追記

どこ$pageIdに設定されていますか?URLを介してのように、外部からスクリプトに渡される場合は、データベースクエリを構築する別の方法を使用することをお勧めします。少なくとも、$pageId値をクエリに挿入する前に、値に対して何らかのエスケープ関数を実行する必要があります。そうでなければ、それはかなりのセキュリティ問題です。これは、あなたのURLにアクセスできる人なら誰でも明らかにそれを変更でき、そうすることであなたのクエリを直接変更できるからです。単純なIDを処理するときにデータベースを保護する最も簡単な方法は、値が数値であることを確認することです。

$pageId = (int) $pageId;
于 2012-09-29T23:32:05.300 に答える