2010-02-25 6 views
2

В моем сценарии я устанавливаю путь include (так что другая часть приложения может также включать файлы), проверьте, существует ли файл и включайте его.PHP: Может содержать файл, который file_exists() говорит, что не существует

Однако после того, как я установил путь включения, file_exists() сообщает, что файл не существует, но я все же могу включить тот же файл.

<?php 
    $include_path = realpath('path/to/some/directory'); 
    if(!is_string($include_path) || !is_dir($include_path)) 
    { 
    return false; 
    } 
    set_include_path(
    implode(PATH_SEPARATOR, array(
     $include_path, 
     get_include_path() 
    )) 
); 
    // Bootstrap file is located at: "path/to/some/directory/bootstrap.php". 
    $bootstrap = 'bootstrap.php'; 

    // Returns "bool(true)". 
    var_dump(file_exists($include_path . '/' . $bootstrap)); 
    // Returns "bool(false)". 
    var_dump(file_exists($bootstrap)); 

    // This led me to believe that the include path was not being set properly. 
    // But it is. The next thing is what puzzles me. 

    require_once $bootstrap; 
    // Not only are there no errors, but the file is included successfully! 

я могу редактировать включать путь и включают в себя файлы без обеспечения абсолютного FilePath, но я не могу проверить, существуют ли они или нет. Это действительно раздражает, так как каждый раз, когда вызывается файл, который не существует, мое приложение приводит к фатальной ошибке или, в лучшем случае, предупреждению (с использованием include_once()).

Ошибки поворота и предупреждения выключены, к сожалению, не является вариантом.

Может ли кто-нибудь объяснить, что вызывает подобное поведение?

ответ

3

file_exists ничего не говорит о том, существует ли файл (и скрипту разрешено его знать), разрешая путь относительно cwd. Он не заботится об включенном пути.

+0

Спасибо за это, я думал, что это скорее всего так, но не смог найти ни одного упоминания о нем в руководстве PHP. Спасибо за разъяснения :) – zanbaldwin

0

Да Вот это самый простой способ реализовать этот

$file_name = //Pass File name 
if (file_exists($file_name)) 
      { 
       echo "Exist"; 
      } 
     else 
      { 
       echo "Not Exist"; 
      }