[PHP-users 27342] Re: safe_modeにおけるimagejpeg関数
Shu Sawada
luna @ lunanet.gr.jp
2005年 11月 2日 (水) 20:13:47 JST
さわだと申します。
てきとーに眺めてただけなので、全然外してるかもしれませんが。
> 先日発表されたPHP4.4.1にバージョンアップしたところ、safe_mode=Onの場合、
> imagejpeg関数で画像をファイルに保存すると下のエラーが発生するように
> なってしまいました。
>
> 「エラーメッセージ」
> PHP Warning: imagejpeg(): Unable to access photopath/a.jpg in cgipath/xxx.cgi on line nnn
> PHP Warning: imagejpeg(): Invalid filename 'photopath/a.jpg' in cgipath/xxx.cgi on line nnn
とりあえず4.3.11と4.4.1のソースでdiffを取ってみると、
diff ext/gd/gd.c /usr/local/src/php-4.3.11/ext/gd/gd.c
1647c1647
< if (!fn || fn == empty_string ||
php_check_open_basedir(fn TSRMLS_CC) || (PG(safe_mode) &&
!php_checkuid(fn, "rb+", CHECKUID_CHECK_FILE_AND_DIR))) {
---
> if (!fn || fn == empty_string ||
php_check_open_basedir(fn TSRMLS_CC)) {
あたりがそれっぽい感じですね。
cvs見ると、
MFH: Added missing safe_mode checks.
って書いてある気がします。
んで、PHP5用のgd.cのcvs版を見ると、なにやらここら辺が修正されてる
みたいです。2005/11/01 17:05:09
http://cvs.php.net/diff.php/php-src/ext/gd/gd.c?r1=1.312.2.3&r2=1.312.2.4&ty=h
MFH: - Added missing safe-mode checks
# Added by replacing the existing open_basedir checks with a macro
# Also, the filename passed might be null, etc. so it's not very good
# idea to pass to php_error_docref() (catch by Ilia)
1.312.2.1(PHP5.1)と1.221.2.56.2.1(PHP4.4)の修正は、ぱっと見同じ内容に
見えるので、頑張ってPHP4用のパッチを作れば改善するかもしれませんが。
cvs版のphp5で同じ事象が出ないなら、改善されてる気がします
でも、そこまでやるなら、とりあえずtouch()で逃げた方がラクですね(苦笑
とりとめなくて申し訳ないんですが、とりあえず4.4.1でgd関数にsafe_mode判定
が追加されたのではないでしょうか。
現状の動作がphpとして予定通りのものなのかどうかは、僕には判りません。
#このメールの内容はイマイチ自信ないので、眉唾で読んでください
--
Shu Sawada
http://luna.lunanet.gr.jp/
PHP-users メーリングリストの案内