PHPでzipファイル等をダウンロード

自分用メモ
ココナラでサービス展開中

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

タイトルとURLをコピーしました