10

PDFのダウンロードを強制するボタンをWebサイトに追加しようとしています。

ボタンのhtmlは次のとおりです。

    <a href=scripts/download.php>
    <input type="image" src="images/download.gif" alt="Submit button"/>
    </a>

そしてこれまでのphpスクリプト:

    <?php
    header('Content-Type: application/pdf');
    header('Content-disposition: attachment;filename=documents/ECM_IT_ResumeDownload.pdf');
    readfile('documents/ECM_IT_ResumeDownload.pdf');
    ?>

これはファイルを正常にダウンロードしているようですが、ファイルを開こうとすると次のエラーが発生します。

「Adobe Reader は 'documents_ECM_IT_ResumeDownload.pdf' を開くことができませんでした。これは、サポートされているファイル タイプではないか、ファイルが破損している (たとえば、電子メールの添付ファイルとして送信され、正しくデコードされなかった) ためです。」

どんな助けでも大歓迎です。

EDIT PDFをテキストエディタで開いたところ、次のメッセージが表示されました。

"
警告: readfile(documents/ECM_IT_ResumeDownload.pdf) [function.readfile]: ストリームを開くことができませんでした:行4のhtml/scripts/download.phpにそのようなファイルまたはディレクトリはありません "

しかし、ドキュメントは間違いなくそこにあります。html/documents/ECM_IT_ResumeDownload.pdf 内

4

5 に答える 5

25
$file_url = www.example.com/pdffolder/$pdfname;
header('Content-Type: application/pdf');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=".$pdfname);
readfile($file_url);
于 2013-02-28T11:01:32.243 に答える
5

ファイルへのパスを削除して、ファイル名だけをコンテンツに残してみてください。

header('Content-Type: application/pdf');
header('Content-disposition: attachment; filename=ECM_IT_ResumeDownload.pdf');
于 2012-05-14T02:19:53.307 に答える
2

最後に PHP の終了タグ (?>) を削除しようとしましたか? ページを純粋な PHP ページとして扱い、誤って出力の末尾に追加された可能性のある新しい行を削除します。これは、ダウンロード用の Excel ファイルを動的に作成していて、破損したものとしてダウンロードしていたときに役立ちました。詳細については、このページをご覧ください。

http://www.php.net/manual/en/language.basic-syntax.phptags.php

編集した質問から、PHP がファイルを見つけられないようです。「c:\blah\de\blah\bloo.pdf」または「c:/blah/de/blah/bloo.pdf」のように、ファイルへの絶対パスを使用してみてください。これらのパスのいずれかが機能し、正しくダウンロードされる場合、相対パスが何らかの形で間違っています。

于 2012-05-14T02:35:26.957 に答える
0

私は常に Gowon Patterson のダウンロード スクリプトを使用しています。これにはホットリンク保護もあります: http://by.gowondesigns.com/getfile/

于 2012-05-14T02:42:36.640 に答える
0

ところで、少し遅れましたが、ここで問題を適切に特定するには:

ダウンロード スクリプトは にscripts/download.phpあり、ダウンロードするファイルは にありますdocuments/[...].pdf

したがって、readfile()関数は親ディレクトリ (の外部scripts/) にトラバースする必要がありますreadfile('../documents/[...].pdf');

于 2013-07-09T20:23:42.467 に答える