PHP で WordPress データベースのバックアップファイルを保存する時などに、ディスクスペースの確保とセキュリティ保護のため パスワード付きで zip 圧縮する方法をご紹介します。
目次
exec コマンドで zip 圧縮する
Linux サーバーには “zip” コマンドが用意されており、PHP から zip コマンドを実行することでサーバー内の1ファイルを圧縮することができます。
※エックスサーバー
など WordPress を運用できるようなレンタルサーバーの OS は Linux サーバーであることが多いです。
基本書式
exec(“zip ‘$strTargetFileName’ ‘$strSourceFileName’;”); |
ファイル “sample.sql” を圧縮して “sample.zip” ファイルを生成するサンプルプログラムは以下の通りになります。
<?php
echo exec("zip 'sample.zip' 'sample.sql';");
?>
パスワードを付けて圧縮する場合
exec(“zip -P ‘$strPassword’ ‘$strTargetFileName’ ‘$strSourceFileName’;”); |
“sample.sql” ファイルに パスワード “hogehogefugafuga” を付けて圧縮し “sample.zip” ファイルを生成するサンプルプログラムは以下の通りになります。
<?php
echo exec("zip -P 'hogehogefugafuga' 'sample.zip' 'sample.sql';");
?>
別ディレクトリの場合
圧縮するファイルが “bak/” など、別ディレクトリにある場合には 行頭に “cd” コマンドを付けてディレクトリを移動しておきます。
<?php
echo exec("cd 'bak/'; zip -P 'hogehogefugafuga' 'sample.zip' 'sample.sql';");
?>
ディレクトリ構造を無視して圧縮したい場合
上記を圧縮すると、解凍した際に “bak/” というディレクトリ構造が付加されて圧縮されることになります。
そのディレクトリ構造を無視して、単純にファイルだけを圧縮したい場合には “-j” オプションを付けます。
<?php
echo exec("cd 'bak/'; zip -j -P 'hogehogefugafuga' 'sample.zip' 'sample.sql';");
?>
[…] […]