PHP

【PHP】WEBサーバー上で大量ファイルが存在するディレクトリを一気に圧縮(zip)しダウンロードする方法

WEBサーバー上の大量ファイルが存在するディレクトリをローカルにバックアップする必要があり、ダウンロードに時間が掛かったり、稀に数ファイルだけダウンロードに失敗することがあります。
そんな時はPHPを使ってWEBサーバー上で大量ファイルが存在するディレクトリをzipファイルに圧縮して、そのzipファイルをローカルにダウンロードすると短時間で確実にローカルにダウンロードできるのでその方法をご紹介します。

同じファイル名前のzipファイル名が圧縮するWEBサーバー上のディレクトリに無いか確認

まず、事前に圧縮予定の同じ名前のzipファイル名とPHPスクリプトファイル名が、圧縮するWEBサーバーのディレクトリ上に無いことを確認して下さい。

圧縮用PHPスクリプトファイル(zip.php)をWEBサーバーにアップロード

圧縮用PHPスクリプトファイル(zip.php)を圧縮するディレクトリがあるWEBサーバーにアップロードします。

zip.phpの中身

<?php
/*
ディレクトリをWEBサーバー上に圧縮するPHPスクリプトです。
まず、事前に同じ名前のzipファイル名、PHPスクリプトファイル名が、圧縮するWEBサーバーのディレクトリ上に無いことを確認して下さい。
このPHPファイルをWEBサーバーの圧縮するディレクトリがある場所にアップロードし、ブラウザで
https://WEBサーバーURL/zip.php
にアクセスすると指定した圧縮するディレクトリが指定したzipファイル名で圧縮されます。
*/

$zipdr = "testdr";  //圧縮するディレクトリ名
$zipdrpass = getcwd().'/'.$zipdr; //このPHPスクリプト場所+ディレクトリ名
$zipfilename = 'testdr.zip';  //圧縮後のzipファイ名
$zipfilepass = getcwd().'/'.$zipfilename; //このPHPスクリプト場所+圧縮後のzipファイル名

if(!is_dir($zipdrpass)){
  exit("圧縮するディレクトリ「".$zipdrpass."」がありません。");
}

function zip($zipdrpass, $zipfilepass){
  chdir($zipdrpass);
  return shell_exec("zip -r {$zipfilepass} .");
}

if($zip = zip($zipdrpass, $zipfilepass)){
  echo '<html lang="ja"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>ディレクトリが圧縮されました。</title></head><body>';
  echo "ディレクトリが圧縮されました。<br />\n";
  echo "圧縮ディレクトリ:$zipdrpass<br />\n";
  echo '<div style="overflow:auto; height:300px; border: #ccc 1px solid; margin:20px;">';
  echo "$zip</div>\n";
  echo "$zipfilepass: は正常に圧縮されました。<br />\n";
  echo '</body></html>';
}else{
  echo("抽出に失敗しました: $zipdrpass\n");
}

?>

 
※「$zipdr」は圧縮するディレクトリ名が入りますので、WEBサーバー上に存在するディレクトリ名に変更して下さい。
※「$zipfilename」は圧縮後のファイル名が入りますので、任意のファイル名に変更して下さい。

圧縮用PHPスクリプトファイル(zip.php)GitHubからダウンロード

※リンク先の「Code」をクリックし「Download ZIP」より一式ダウンロードできます。

「yo1tec/zip」からダウンロード >>

WEBサーバーの圧縮用PHPスクリプトファイル(zip.php)にアクセス

ブラウザで

https://WEBサーバーURL/zip.php

にアクセスすると指定したディレクトリがWEBサーバー上に指定したzipファイル名で圧縮されます。

圧縮後のzipファイルをダウンロード

圧縮されたzipファイルをローカルPCにダウンロードします。
FTPでダウンロードもしくは、ブラウザで指定したzipファイル名で

https://WEBサーバーURL/testdr.zip

にアクセスするとダウンロードできます。

 
※流用される場合は自己責任でお願いします。