この前サーバのバックアップを考えた話の続き。
サーバ上でディレクトリを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だが前述の参考サイトから引用。
<?php require_once("Archive/Zip.php"); $zip_file = "example.zip"; $zip = new Archive_Zip($zip_file); $file_name = "pearsmall.gif"; $zip->create($file_name); ?>
せっかくなのでテストに使う対象のファイルは
PEARのロゴである下記の画像(pearsmall.gif)にした。
で上記のコードを適当なファイル名で保存、
今回はziptest.phpとしてサーバにアップした。
│ pearsmall.gif
│ ziptest.php
│
└─Archive
Zip.php
そのziptest.phpをブラウザから叩けばexample.zipが出現する。
zipファイルの中身はもちろんpearsmall.gifだ。
本題のディレクトリの圧縮については
上記コードの$file_nameをディレクトリ名にすれば良い。
仮に「zip_test」というディレクトリ名とした場合は単純に下記のとおり。
<?php require_once("Archive/Zip.php"); $zip_file = "example.zip"; $zip = new Archive_Zip($zip_file); $file_name = "zip_test"; $zip->create($file_name); ?>
試しに実行してみましたが、
無事にディレクトリごとzipになっていた。
しかし一部のコマンドが実行できないのは
さくらの共用サーバの仕様なのか良く分からないなと思いつつ
色々と調べてみると、TeraTermでSSH接続が出来る事が分かった。
GMOの共用サーバはSSH接続ができなかったので
さくらもダメかと思い込んでいたけど、さくら最高だな。
で、TeraTermでサーバにログインしてzipコマンドを実行すると
問題なく処理ができた。前回ダメだったrsyncコマンドも処理できた。
となるとシェルの記述の仕方がよくなかったっぽいが、
cpやrmなどのコマンドはシェルで実行できたので良く分からないな。
また時間があるときに色々と調査してみよう。