- Back to Home »
- PHPで圧縮ファイル展開方法
Posted by : Izumikawa Fukumi
2013年10月10日木曜日
今回サーバー側でSSHを使わずにPHPのみで圧縮ファイルの展開する方法をお教えします。
普通はSSHでコマンドを入力して展開するのが早いのですが、
普通は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のアップロードの時にこの手法で展開しました。