У меня возникают проблемы с требованием 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');