require_once и include_once неправильно разрешают файлы - PullRequest
1 голос
/ 04 июля 2010

У меня проблемы с PHP require_once, require, include_once и include-функциями, которые неправильно разрешают файл. Я использую 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 - это соединение каталога для C: \ wamp \ www \ park_factor_network \ system \ application \ shared \ hooks

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

1 Ответ

7 голосов
/ 04 июля 2010

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 Error, сообщающей, что файл не существует (вместо вашего пользовательского die()).

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

$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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...