ZAPAnet総合情報局 > ZAPAブログ2.0 > PHP5のtempnam関数について

PHP5のtempnam関数について

2007年10月15日 プログラミングTIPS
PHP5.2.4にアップデートしてから、超かんたん3D円グラフ作成!超かんたんPDF作成!はてブコメント最新情報のページで画像ファイルやPDFファイルが表示されなくなっていました。

原因を調べてみると、ファイル自体は生成されているものの、表示するURLがおかしくなっていました。
公式のPHP: PHP 5 ChangeLogを読んでも、それらしい修正や変更点は書かれていませんでした。

プログラムをチェックしてみたところ、tempnam関数の挙動が怪しく、
生成したファイル名のみを返していた

uri全てを返す
動作になっていました。

tempnam関数の返り値は、
返り値
新しいテンポラリファイル名を返し、失敗した場合には FALSE を返します。
と書かれているので、uriを返すのではなく、ファイル名だけを返す方が正しいような気がします。
仕様が変わったのかバグなのかわかりませんでしたが、一応この仕様に合わせて、上記サイトのプログラムも変更しておきました。
現在は正常に使えるようになっているはずです。


また、tempnam関数のページを詳しく読んでみると、このようなコメントが寄せられていました。
04-Oct-2007 07:17

It seems that in between 5.2.2 and 5.2.4 tempnam() changed how it handles a relative path:

In 5.2.2:
$file=tempnam('tmpdownload', 'Ergebnis_'.date(Y.m.d).'_').'.pdf';
echo $file;
tmpdownload/Ergebnis_20071004_xTfKzz.pdf

In 5.2.4:
$file=tempnam('tmpdownload', 'Ergebnis_'.date(Y.m.d).'_').'.pdf';
echo $file;
/var/www/html/tmpdownload/Ergebnis_20071004_Xbn6PY.pdf

This broke quite a lot of our webpages as we try to display those pdfs (and other files) via the webbrowser and the resulting URI is of course invalid and gets the user a 404 page.
非常にたくさんの我々のウェブページを壊しました」と書かれていました。
その割には、この件について日本語のページで検索しても全然引っかからなかったので、ここに書いておくことにしました。
バグが多く何かと問題が起きやすいtempnam関数を使っている人は、一度チェックしてみてください。

関連リンク

PHP5.2.0とeAcceleratorのインストールメモ
XCacheのインストールとphp用アクセラレータ比較
実際に買って読んだPHPの参考書レビュー
PHPで動いている高度なオープンソースWebアプリレビュー
プログラマを目指す人が読んで参考になる(?)ページ
複数ファイル内文字列を一括置換する方法