require_once и include_once не разрешают файлы правильно

У меня возникают проблемы с требованием PHP require_once, require, include_once и включают функции, которые не правильно разрешают файл. Я запускаю PHP 5.3.1 в Windows Vista с Apache 2.2.11.

Это проблемы, которые я получаю:

file_exists('C:/wamp/www/park_factor_network/system/application/shared/config/language.php') 

возвращает TRUE

 is_readable('system/application/shared/config/language.php') 

возвращает TRUE

 $fp = fopen('C:/wamp/www/park_factor_network/system/application/shared/config/language.php','r'); $contents = fread($fp, filesize('C:/wamp/www/park_factor_network/system/application/shared/config/language.php')); 

возвращает действительный файловый ресурс и сохраняет его в $ contents

Однако:

 require_once('system/application/shared/config/database.php') or die("Cannot Include Language Config"); require_once('C:/wamp/www/park_factor_network/system/application/shared/config/language.php') or die("Cannot Include Language Config"); 

вернуть:

 Fatal error: require_once() [function.require]: Failed opening required '1' (include_path='.;C:\php5\pear') in C:\wamp\www\park_factor_network\system\application\shared\hooks\select_language.php on line 25 

C: \ wamp \ www \ park_factor_network \ system \ application \ news_site \ hooks – это соединение Directory для C: \ wamp \ www \ park_factor_network \ system \ application \ shared \ hooks

Я испытываю эту проблему только при доступе к этому файлу из определенного места в рамках, однако, поскольку это прямое включение или требование, это не должно затрагиваться этим и только PHP? Если я попытаюсь включить файл в другое место в моей настройке, он загрузится нормально.

require_once – это языковая конструкция. Он не является функцией и не имеет возвращаемого значения.

Скобки вокруг параметра имени файла являются необязательными. Это означает, что в этой строке:

 require_once('system/application/shared/config/database.php') or die("Cannot Include Language Config"); 

все выражение

 ('system/application/shared/config/database.php') or die("Cannot Include Language Config"); 

(возвращает 1 ) и используется как аргумент имени файла. 1 , очевидно, не существует.

То, что вы делаете, не имеет никакого реального смысла, потому что include не вернет false при загрузке файла. require_once() в любом случае прекратит выполнение скрипта. Если вы позаботились о переключении отчетов об ошибках в своей производственной среде, вы можете легко жить с ошибкой PHP Fatal, сообщающей, что файл не существует (вместо вашего пользовательского die() ).

Если вам нужно изящно выйти из сценария, я бы сделал вызов file_exists перед оператором и die() когда это не file_exists :

 $file = 'system/application/shared/config/database.php'; if ((!is_file($file)) or(!is_readable($file))) die("Cannot Include Language Config"); require_once('system/application/shared/config/database.php');