リンクにアクセスしたときに自動的にブラウザがローカルマシンにファイルをダウンロードさせるために、PHPに追加するコードは何ですか?PHPで自動的にダウンロードを開始するには?
私は、ソフトウェアの名前をクリックすると、ファイルをディスクに保存するようにユーザーに促すダウンロードサイトの機能に似た機能を特に考えていますか?
リンクにアクセスしたときに自動的にブラウザがローカルマシンにファイルをダウンロードさせるために、PHPに追加するコードは何ですか?PHPで自動的にダウンロードを開始するには?
私は、ソフトウェアの名前をクリックすると、ファイルをディスクに保存するようにユーザーに促すダウンロードサイトの機能に似た機能を特に考えていますか?
ファイル出力する前に、以下のヘッダを送信:
header("Content-Disposition: attachment; filename=\"" . basename($File) . "\"");
header("Content-Type: application/force-download");
header("Content-Length: " . filesize($File));
header("Connection: close");
@grom: 'アプリケーション/ octet-streamの' MIMEタイプについての興味深いが。私はそれを知りませんでした。常にアプリケーション/強制ダウンロードを使用しています:)
以下は、pdfを送り返す例です。
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Transfer-Encoding: binary');
readfile($filename);
@Swish私は(IEとFirefoxでテストした)別の何かをするためのアプリケーション/フォース・ダウンロードコンテンツの種類を見つけることができませんでした。実際のMIMEタイプを返信しない理由はありますか? PHPマニュアルHayley Watson掲載中。また
:
あなたが代わりにレンダリングされるので、ダウンロードして保存するファイルを強制したい場合は、「アプリケーション/力 - というようなMIMEタイプが存在しないことを覚えておいてくださいダウンロード"。この状況で使用する正しいタイプは "application/octet-stream"であり、何も使用しないのは、クライアントが認識できないMIMEタイプを無視し、代わりに "application/octet-stream"を使用することになっているということだけです。 RFC 2046の4.1.4および4.5.1を参照)。
また、IANAによれば、登録されたアプリケーション/強制ダウンロードタイプはありません。
Android搭載端末のダウンロードページにアクセスすると、「ダウンロードできません」コンテンツがサポートされていません。どうして? – Emerald214
@ Emerald214 PDFリーダーなし。または、PDFコンテンツタイプの関連付けがありません – grom
特に、対象となるファイルタイプが.zipで、PHPでファイルをダウンロードしている場合は、 '' 'ob_clean();'上記の答えで提供されるコードの前に '' ''と '' 'ob_flush();' 'を置きます。 Windowsで.zipをネイティブに開くときに、7zipやその他の専用の圧縮アーカイブ形式処理ツールで問題なく処理できたとしても、この方法で取得した.zipアーカイブは無効であると報告されていました。 。 – SeldomNeedy
きれいな例です。
<?php
header('Content-Type: application/download');
header('Content-Disposition: attachment; filename="example.txt"');
header("Content-Length: " . filesize("example.txt"));
$fp = fopen("example.txt", "r");
fpassthru($fp);
fclose($fp);
?>
それはうまくいくかもしれませんが、私はそれを「きれい」と呼ぶほど遠くには行きません。 1つは、ファイル名を3回入力することです。代わりに、ファイル名を変数に設定すると、コードが冗長でなくなり、エラーの可能性が減ります。 – Mike
私のコードは、TXT、DOC、DOCX、PDF、PPT、PPTX、JPG、PNG、ジッパーの拡張のために働くと私はその優れた明示的に実際のMIMEタイプを使用すると思います。
$file_name = "a.txt";
// extracting the extension:
$ext = substr($file_name, strpos($file_name,'.')+1);
header('Content-disposition: attachment; filename='.$file_name);
if(strtolower($ext) == "txt")
{
header('Content-type: text/plain'); // works for txt only
}
else
{
header('Content-type: application/'.$ext); // works for all extensions except txt
}
readfile($decrypted_file_path);
これは私には新しかったのですが、理由は分かりませんが、このスクリプトはコンテンツ長の行があれば正しく機能しました。 – sehummel