とあるサーバー屋さんからメールが来た。
PHPとMySQLとメールが使える。一部SSHも使える。
PHPはexec()やsystem()の使用は不可。
PerlやShellスクリプトのCGIは使えない。
メインのサーバーにするつもりはないけど、一度遊んでみることにした。
何をしようかなあ~とアイデアを募集したところ、iPhoneでJPEGやテキストをPDFにしたいことがあるというのが来た。
そういうソフトやサービスはあるそうなんだけど今ひとつらしい。
ということで、PHPのお勉強も兼ねて、作ってみた。
JPEGとかの画像ファイルをPDFに変換
http://conv.890m.com/
テキストあるいはテキストファイルをPDFに変換
http://conv.890m.com/text2pdf/
画像をPDF化するライブラリーはFPDFを使用。
テキストのPDF化にはFPDFに日本語化するパッチjapanese.zipを当てたものを使用。
こちらのホストではcrontabを使うことが可能。ただし、動かせるのはPHPのスクリプトのみ。
ということで、変換したPDFファイルを定期的(1時間毎)に掃除するPHPスクリプトを作った。
この場合、注意する点が一つあって、crontabで動いている時のカレントディレクトリーがよくわからない。
なので削除したいファイルの指定(glob('xxx/*.pdf')の指定に苦労した。
相対パスだとうまく動かなかった。
絶対パスだとサーバーを変えた時に面倒。
調べたところ__FILE__というのを使うのが常套手段のようだ。
結局、glob(dirname(__FILE__) . '/public_html/xxx/*.pdf') という感じで。
crontabのPHPスクリプトはpublic_htmlの下に置く必要はないので、ホームディレクトリー(public_htmlの一つ上)に置き、そこからの相対パスで指定してみた。
もう一つ気を使ったのは変換したPDFファイルを置くディレクトリーのパーミッション。これは0711(rwx--x--x)とした。
userは7なのでPHPスクリプト(suEXECタイプ)は読み書き自由。
gとoが1なのでファイル名を知っている人はアクセス可能。
同じサーバーを使っている他のユーザーが(PHPを使って)アクセスしようとしても、rがないのでディレクトリーのファイル一覧を見ることはできない。
変換したPDFファイル名を乱数(md5(uniqid(rand(),true)) . '.pdf')で設定しておけば大丈夫だろう。
あと、ここのサーバーで「よくできてるなあ」と思ったのはcrontabのエラーがログとして残されているところ。
おかげでPDFファイル削除スクリプトの間違いに容易に気づくことができた。