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コマンドを終了しています。

