こんばんは。どうも昨日辺りから自宅のネット接続がとろいです。ppBlogは、ファイル数は390個(決して多くはないと思いますけど)近くあるのですが、それが昨日は全部アップロード出来ずじまい。愛用しているFFFTPGの転送画面が何度も途中でフリーズしたようになってました。昔、28.8kbps?ぐらいのモデムでピーガラガラとかやってたのを思い出しはしませんでしたが。
というわけで、ブログシステムというものは、多機能になればなるほど、当然のようにそのサイズが肥大化していきます。なので、サーバー上に、圧縮されたZIPファイルをさくっとアップロードして、そこで展開するのが楽だよなぁ、と思ったので、PHPの充実したオンラインマニュアルを片手に、そういうスクリプトを書いてみました。最初に書いたのが以下です。ローカルのテスト環境でわけなく作動したので、こりゃいけるとサーバー上で試したら、zip_open関数がないと怒られました
function my_unzip($zipFile=''){ $zip_dir = getcwd().'/'; // カレントディレクトリの取得 if(is_dir(str_replace('.zip', '', $zipFile))){ // 既に展開されたディレクトリがあるならば exit("Already exists!"); } $i = 0; // どれくらいファイルがあるのか知りたい if($zip = zip_open($zip_dir.$zipFile)){ while($zip_entry = zip_read($zip)){ $file = zip_entry_name($zip_entry); $zdir = $zip_dir.dirname($file); if(!is_dir($zdir)){ @mkdir($zdir, 0777); // ディレクトリないなら作成 echo "Directory: ".dirname($file)."/ created.<br />¥n"; // メッセージ表示 } if(zip_entry_open($zip, $zip_entry, 'rb')){ // ファイルの書き出し if($fp = @fopen($file, 'wb+')){ fputs($fp, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry))); fclose($fp); echo " File ".++$i.": $file created.<br />¥n"; } } zip_entry_close($zip_entry); } #while } zip_close($zip); return TRUE; // 無事に終わったらTRUEを返す }
これを以下のようにしてローカルで走らせました。
if(my_unzip('ppBlog180b.zip')){ echo "Successfully extracted!¥n"; } else echo "Failure!¥n";
したら、ファイル数が390個近くあることが判明。で、実際にオンラインのサーバー上でもやってみたら駄目だったわけです。なので、シェルコマンドでトライしてみました。
$zip_file = getcwd().'/ppBlog180b.zip'; // 展開するファイルを指定 function unzip($zip_file){ return shell_exec("unzip $zip_file"); // UNIX系には、まず付いてるであろうunzipを使う } if($zip = unzip($zip_file)){ echo "<pre>$zip</pre>¥n"; // これでずらっと展開されたファイルが表示される echo "$zip_file: Successfully extracted!
"; echo '<a href="./ppBlog180b/install.php">installation</a>'; // 続けてppBlogのインストール画面へ誘導 } else{ echo("Failed to extract: $zip_file¥n"); }
そしたら、今度は上手く行きました。すべてのファイルがそっくりサーバー上で展開されていました。これは楽チンですねぇ。上のスクリプトは、単にZIP圧縮されたフォルダを展開するだけなので、サーバー上に作成されたディレクトリは、圧縮前のフォルダの名前と同じになります。多分、copyコマンドとかchdirで、展開先やら名前を指定できるでしょうね。
一応、この簡単なスクリプトを添付しておきます。お使いのサーバーで動くかどうかは保証しませんが。。と、その前にppBlog180b.zipがないことには・・・。
Comments