Posted by : Izumikawa Fukumi 2013年10月10日木曜日

今回サーバー側でSSHを使わずにPHPのみで圧縮ファイルの展開する方法をお教えします。

普通はSSHでコマンドを入力して展開するのが早いのですが、

  • SSHが使えない
  • 汎用的にPHPで展開したい
など、様々な分野で展開する処理を使うと思います。
WordPressのテンプレートのインストールだってzipファイルを展開する作業をします。



■PHP                                                                                                    
<?php
// インストールに先立ってZIPファイルをサーバー上で展開するスクリプト。
// ZIPファイルとこのファイルを同じディレクトリにアップ。
// アップ先ディレクトリにそのまま展開されます。
// 展開される際にこのファイルと同じ名前のファイルが有る場合は予めこのファイル名を変えておく。
$zipfilename = 'txt.zip'; // 展開するzipファイルを指定。
$zip_file = getcwd().'/'.$zipfilename;
 
if(!is_file($zip_file)) exit("No zipped file: $zip_file on your server!");
 
function unzip($zip_file){
 return shell_exec("unzip $zip_file");
}
 
if($zip = unzip($zip_file)){
 echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>ZIP解凍</title></head><body>';
 echo "Zip解凍<br />\n";
 echo "対象ファイル:$zipfilename<br />\n";
 echo '<div style="overflow:auto; height:400px; border: #999 1px solid; margin:15px;">';
 echo "<pre>$zip</pre></div>\n";
 echo "$zipfilename: は正常に解凍されました。<br />\n";
 echo '</body></html>';
} else{
 //shell_execが使えなかった時の処理
 $zip = new ZipArchive();
if ($zip->open($zipfilename) === true) {
  if ($zip->extractTo('./') === true) {
    $zip->close();
  } else {
    exit('抽出エラー');
  }
} else {
  exit('オープンエラー');
}
 
echo '展開完了';
}
?>


ソースは特にいじっていません。
ただ合体させました。

このソースを実行すればどんなサーバーでも展開が可能だと思います。
私のサーバーでは片方のソースが実行出来ませんでした。ですが、また片方ではちゃんと展開してくれたので大体のサーバーは実行可能かと思います。(保証はしません)

ちなにみ私はOpenPNEのアップロードの時にこの手法で展開しました。

- Copyright © I aim to creator. - Hatsune Miku - Powered by Blogger - Designed by Johanes Djogan -