レンタルサーバー上でzipファイルを解凍するには

2010/07/16 (金)

大量のファイルをアップロードする際、zipしてサーバ上で展開できればどんなに楽か。

さくらサーバのように、シェルが使えるサーバなら何も問題ないが、多くの格安サーバではシェルは開放されていない。でも、単にunzipを走らせればいいだけなので、何とかやりようはありそうなもの。

と思って探すとやっぱりあった。

サーバ上でZIP展開
http://www.cubic4.net/blog/34-site/68-server-unzip.html

手法としては、PHPでunzipを起動するというもの。

ここからunzip.zipをダウンロードして、展開すると、unzip.phpというスクリプトが出てくる。

この中で、先頭の方にある、

<?php
// インストールに先立ってZIPファイルをサーバー上で展開するスクリプト。
// ZIPファイルとこのファイルを同じディレクトリにアップ。
// アップ先ディレクトリにそのまま展開されます。
// 展開される際にこのファイルと同じ名前のファイルが有る場合は予めこのファイル名を変えておく。
$zipfilename = 'filename.zip'; // 展開するzipファイルを指定。

の最後の部分で目的の展開すべきzipファイルを指定しておく。
例えばこんな感じで(wordpress-3.0-ja.zipの場合)。

$zipfilename = 'wordpress-3.0-ja.zip'; // 展開するzipファイルを指定。

この準備ができたら、このunzip.phpと目的のzipファイル(wordpress-3.0-ja.zip)をサーバにアップロードする。

あとは、Webブラウザでこのunzip.phpをアクセスすればOK。

http://www.example.com/unzip.php

てな感じ。実に簡単。

最後に、unzip.phpとzipファイルを削除。これをやっとかないと、間違えて再アクセスするとまた展開(上書き)してしまう。

なお、エックスサーバーの場合は、スクリプトの一部を書き換えないと上手く動かなかった。具体的には、内部で起動するunzipをフルパス(/usr/bin/unzip)にする。

これ

function unzip($zip_file){
return shell_exec("unzip $zip_file");
}

function unzip($zip_file){
return shell_exec("/usr/bin/unzip $zip_file");
}

こうする。

スクリプトを作ってくださった方に感謝。

参考: エックスサーバーのコマンドパス一覧
http://www.xserver.ne.jp/man_program_soft.php