PHPでディレクトリごとzip

この前サーバのバックアップを考えた話の続き。

サーバ上でディレクトリをzipで固める必要があり、
その方法について調べながら試してみた。

 

まずzipコマンドを実行するシェルスクリプトを試したが
なぜかうまくいかない。

前回rsyncコマンドができなかったのと同じく、
共用サーバの何かしら制限があるのか良く分からないが、
仕方がないのでPHPで実行する事を考えた。

 

調べてみるとPEARのArchive_Zipを使うのが良さそうだった。

主に参考にしたのはこちらのサイト。

 

まずはArchive_Zipのダウンロードページの右側、
0.1.2のリンクからArchive_Zip-0.1.2.tgzをダウンロードする。

そのtgzを解凍するのだが、なぜか私の環境(Win7/64bit)では、
Lhaplusでの解凍にエラーが発生するので、
Lhacaというソフトで解凍をした。

└─Archive_Zip-0.1.2
  │ package.xml
  │
  └─Archive_Zip-0.1.2
    └─Archive
        Zip.php

解凍した中のArchiveディレクトリをサーバにアップする。

次に肝心のPHPだが前述の参考サイトから引用。

せっかくなのでテストに使う対象のファイルは
PEARのロゴである下記の画像(pearsmall.gif)にした。

PEARのロゴ

で上記のコードを適当なファイル名で保存、
今回はziptest.phpとしてサーバにアップした。

│ pearsmall.gif
│ ziptest.php

└─Archive
    Zip.php

そのziptest.phpをブラウザから叩けばexample.zipが出現する。
zipファイルの中身はもちろんpearsmall.gifだ。

本題のディレクトリの圧縮については
上記コードの$file_nameをディレクトリ名にすれば良い。

仮に「zip_test」というディレクトリ名とした場合は単純に下記のとおり。

試しに実行してみましたが、
無事にディレクトリごとzipになっていた。

 

しかし一部のコマンドが実行できないのは
さくらの共用サーバの仕様なのか良く分からないなと思いつつ
色々と調べてみると、TeraTermでSSH接続が出来る事が分かった。

GMOの共用サーバはSSH接続ができなかったので
さくらもダメかと思い込んでいたけど、さくら最高だな。

で、TeraTermでサーバにログインしてzipコマンドを実行すると
問題なく処理ができた。前回ダメだったrsyncコマンドも処理できた。

となるとシェルの記述の仕方がよくなかったっぽいが、
cpやrmなどのコマンドはシェルで実行できたので良く分からないな。

また時間があるときに色々と調査してみよう。