Blog
Home > MAX > Blog > CakePHP Book > 1.2betaでrealpath()のエラー1.2betaでrealpath()のエラー
1.2betaにしたところ以下のエラーが表示された。
""
warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 10xxx is not allowed to access /usr/local/lib/php owned by uid 0 in /virtual/username_xxx/cake_1.2/cake/libs/configure.php on line 458
""
PHPがセーフモードで動いているサーバー(Xreaとか)ではrealpathという関数を使えないのかと疑った。realpath関数自体はセーフモードでも使えるが、自分の管轄外のディレクトリに対して使用すると、使えないようです。
どうやら1.2betaではPHPのinclude_pathで設定してあるディレクトリにもCakePHP関連ファイルを読み込めるようにパスを管理しています。そのスクリプトはconfigure.phpです。include_pathには、「/usr/local/lib/php」が含まれていて、セーフモードではその「/usr/local/lib/php」に対してrealpathが使えないというエラーが上記のエラーです。
対策としては、configure.phpのパス管理の部分で「/usr/local/lib/php」に対してrealpathを使わないようにスクリプト変更する。
変更前
""
if ( $path == '.' || in_array(realpath($path), $used)) {
""
変更後
""
if ( in_array($path,array('.','/usr/local/lib/php')) || in_array(realpath($path), $used)) {
""
あるいは変更前の行の直前に以下を加えるとか。
""
if ( $path=='/usr/local/lib/php') continue;
""

Pharmacier