PHPでファイルをダウンロードするまとめです。
特にzipをダウンロードするコードで、何時間もハマってしまいましたのでメモしておきます。
PHPでzipファイルをダウンロード
早速、何時間もハマってしまいましたzipファイルのダウンロードするコードをメモいたします。
<?php $file = explode(':' ,post_custom('zip')); // zipファイル名 $fileName = $file[1].'.zip'; // zipファイルパス $zipPath = WP_PLUGIN_DIR . '/' . $fileName; ?> <form method="post"> <input type="submit" name="f_update" value="<?php echo $file[0];?>"> </form> <?php if( !empty($_POST['f_update']) ) { /* * zipコマンド * * 1. ディレクトリ移動 * 2. ファイル圧縮 */ $command = 'cd ' . WP_PLUGIN_DIR . ';' . 'zip -r '. $fileName . ' ./'.$file[1].'/'; exec($command); // コマンド実行 // zip出力 header("Content-type: application/zip"); header( "Content-Disposition: attachment; filename=" . basename( $zipPath ) ); header( "Content-Length: " . filesize( $zipPath ) ); while (ob_get_level()) { ob_end_clean(); } readfile($zipPath); // Zipファイル削除 unlink( $zipPath ); exit; } ?>
上記は投稿ページで任意のプラグインフォルダをダウンロードするコードです。
2行目はカスタムフィールドで設定した「zip」の値を抽出して、phpのexpload関数で:(半角コロン)で分割して、変数「file」に格納しています。
4行目はファイル名、6行目はファイルパスを指定しています。
8行目から10行目はダウンロードするフォームのコードです。
19行目は変数$commandにLinuxやコマンドプロンプトのコマンドを代入して20行目で実行しています。これで該当するフォルダにzipファイルが生成されます。
22行目から26行目で生成されたzipファイルをダウンロードします。
【重要】25行目のコードがないとzipが壊れてしまい展開できませんでした。(令和6年5月1日現在。
28行目は生成されたzipファイルを削除しています。
29行目はLinuxコマンドを終了しています。