PHPで遊ぼう!

とあるサーバー屋さんからメールが来た。

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ファイル削除スクリプトの間違いに容易に気づくことができた。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください