1

サーバーにファイルが存在するかどうかを確認しようとしています。私が抱えている問題はfile_exists、サーバー上に存在することがわかっているファイルに対してfalseを返すことです。

私のサーバーはsafe_mode = onphp.iniで構成されています。このため、使用して確認したいファイルを含むディレクトリを追加しました

include_path=".:/path/to/dir"

パスを追加しました

safe_mode_include_dir = /path/to/dir

file_exists("/path/to/dir/file")それでもFALSEを返します。

前もって感謝します

4

2 に答える 2

2

そうすることができる場合は、を無効にしsafe_modeます。これはPHP開発チームによって非推奨になり、PHP 5.4.0で廃止されたため、遅かれ早かれそれに依存することをやめる必要があります。

を使用する必要がある場合は、ディレクトリをではなくsafe_mode、に追加します。open_basedirinclude_path

于 2012-07-03T22:46:44.160 に答える
1

申し訳ありませんが、セーフモードの制限を回避することはできません。これがセーフモードのポイントの一種です。safe_mode_include_dirファイルをインクルードする場合でも、ファイルにアクセスできるパスを設定していればインクルードできますが、stat()関連する関数をインクルードさせる方法はありません。

編集

恐ろしくて信じられないほど危険で信頼できない回避策はこれかもしれません:

function file_exists_safemode ($file) {

  $oldErrorLevel = error_reporting(E_ALL);
  $oldDisplayErrors = ini_get('display_errors');
  ini_set('display_errors', 1);

  ob_start();
  include $file;
  $result = ob_get_clean();

  ini_set('display_errors', $oldDisplayErrors);
  error_reporting($oldErrorLevel);

  return strpos($result, 'failed to open stream') === FALSE;

}

...しかし、それは非常に多くの点で非常に厄介であり、私はこれをアプローチとして絶対にお勧めしません。

于 2012-07-03T22:24:55.530 に答える