2009-12-08 1 views
2

Вот точная проблема. У меня есть функция автозагрузки набора с куском кода, который выглядит следующим образом:Почему PHP не включает мой файл, когда он явно существует?

if(file_exists($class_file)) 
{ 
    include($class_file); 
    return true; 
} 

Однако, когда $class_file устанавливается в определенное значение, я получаю включаемую ошибку:

Error String: include(includes/php/utilities/calendar_event_html.utility.php) 
[function.include]: failed to open stream: No such file or directory 

Он работает отлично подходит для других файлов, и когда я просматриваю этот код с помощью отладчика, ясно, что PHP считает, что файл существует, но похоже, что include этого не делает. Кто-нибудь имеет представление о том, что происходит?

+3

Возможно, у PHP нет разрешений для доступа к этому файлу? – RaYell

+0

@ ApoY2k Ну, как вы можете видеть в ошибке, содержимое содержит 'includes/php/utilities/calendar_event_html.utility.php', но оно отлично работает с чем-то вроде' includes/php/utilities/calendar_header_html.utility.php '- оба из них должны существовать, так как я делаю' file_exists' заранее. –

+0

Является ли приведенный выше код _really_ таким же, как тот, который вы используете в своем приложении? Если нет, включится ли это в другом файле, кроме файла_exists? – halfdan

ответ

9

Из инструкции:

Note: The check is done using the real UID/GID instead of the effective one. 

Это означает, что файл может существовать, но вполне возможно, что он не доступен по UID/GID ваш экземпляр PHP запущен с. Я предлагаю вам проверить разрешения для этого файла.

С наилучшими пожеланиями,
Fabian

+0

Я нахожусь в Windows, поэтому я не думал, что разрешения будут проблемой (они никогда не были раньше), но я скопировал этот конкретный файл с помощью Cygwin - интересно, изменило ли он права на файл, когда я это сделал. . –

+0

Можете ли вы воспроизвести это поведение на другой машине? – halfdan

+0

Я не пробовал, но у меня были некоторые подобные проблемы с некоторыми файлами javascript, которые я копировал с помощью Cygwin. –

0

Попробуйте добавить этот бит отладки кода:

echo "<pre>"; 
echo get_include_path(); 
echo "</pre>"; 

function.get-include-path

Это вернет обновляйте включают путь, и вы можете сравнить его с $ class_file.