Подтвердить что ты не робот

PHP Fatal Ошибка Не удалось открыть файл

Я получаю следующую ошибку от Apache

[Сб Мар 19, 23:10:50 2011] [warn] mod_fcgid: stderr: PHP Неустранимая ошибка: require_once() [function.require]: Не удалось выполнить открытие '/common/configs/config_templates.inc. php '(include_path ='.:/usr/share/pear:/usr/share/php ') в /home/viapics 1/public_html/common/configs/config.inc.php в строке 158

Я определенно не эксперт Apache, но файлы config.inc.php и config_templates.inc.php есть. Я также попытался перейти на страницу test.html, которую я разместил в общем /configs/, поэтому я предполагаю, что никаких проблем с правами не происходит. Я также установил права на config_templates.inc.php, чтобы дать всем права на чтение, запись и выполнение. Не уверен, что делать в этот момент, я проверил, есть ли каталог /usr/share/php, и я обнаружил, что не было, но когда я сделал yum install php, он сказал, что он был последним. Идеи?

4b9b3361

Ответ 1

Это не вопрос, связанный с Apache. Ни один, связанный с PHP. Чтобы понять эту ошибку, вы должны отличить путь на виртуальном сервере от пути в файловой системе.

require оператор работает с файлами. Но нет

                          /common/configs/config_templates.inc.php

файл на сервере, а точнее

/home/viapics1/public_html/common/configs/config_templates.inc.php

/home/viapics1/public_html

часть называется корнем документа и связывает виртуальный мир с реальным. К счастью, веб-серверы обычно имеют корень документа в переменной конфигурации, которую они разделяют с PHP. Так что если вы измените свой код на что-то вроде

require_once $_SERVER['DOCUMENT_ROOT'].'/common/configs/config_templates.inc.php';

он будет работать с любым файлом, помещенным в любой каталог.

Обновление: в конце концов я написал статью, в которой объясняется разница между относительными и абсолютными путями в файловой системе и на веб-сервере, где подробно объясняется этот вопрос и содержатся некоторые практические решения.

К сожалению, такой удобной переменной не существует, когда вы запускаете скрипт из командной строки. В этом случае техника, называемая "единой точкой входа", должна выручить. Вы можете обратиться к статье выше для деталей.

Ответ 2

Если у вас есть запуск SELinux, вам может потребоваться разрешение httpd для чтения из /home dir с помощью:

 sudo setsebool httpd_read_user_content=1

Ответ 3

Запустите php -f /common/configs/config_templates.inc.php, чтобы проверить правильность синтаксиса PHP в файле.

Ответ 4

На всякий случай это помогает кому-то еще, я наткнулся на неясное дело об этой ошибке, вызванной прошлой ночью. В частности, я использовал метод require_once и указывал только имя файла и никакого пути, так как требуемый файл присутствовал в том же каталоге.

Я начал получать ошибку "Ошибка открытия файла" в одной точке. Некоторое время, разрывая мои волосы, я, наконец, заметил сообщение о предупреждении PHP сразу над фатальной ошибкой, указав "не удалось открыть поток: Permission denied", но что более важно, сообщив мне о пути к файлу, который он пытался открытый. Затем я сфокусировался на том, что создал копию файла (с собственностью, недоступной Apache) в другом месте, которое также оказалось в пути поиска "include" PHP, и впереди папки, в которой я хотел, чтобы ее подхватили, D'о!

Ответ 5

Эй, у меня была эта проблема, и я обнаружил, что не смотрю на папку достаточно близко:

У меня был

require_once /vagrant/public/liberate/**APP**/vendor/autoload.php

Что получилось:

require_once /vagrant/public/liberate/vendor/autoload.php

Было очень легко (как новичок) упустить эту очень незаметную проблему. Да, я понимаю, что проблема, связанная с проблемой, связана непосредственно с проблемой, но если вы новичок, как и я, эти вещи можно легко упустить.

ИСПРАВЛЕНИЕ:

Хорошо посмотрите на отладку (__ Dir __ '/etc/etc/etc/file.php), затем откроете свою файловую систему в другом окне и сопоставьте два файла напрямую. Если есть даже малейшая разница, это требование не будет работать, и вышеупомянутая ошибка будет выплюнуть.

Ответ 6

Вы можете исправить это с помощью константы PHP __DIR__

require_once __DIR__ . '/common/configs/config_templates.inc.php';

Это каталог файла. Если используется внутри включения, возвращается каталог включенного файла. Это эквивалентно dirname __FILE__. Это имя каталога не имеет косой черты, если только оно не является корневым каталогом. 1

Ответ 7

У меня была одна и та же проблема, я трижды проверял пути включения, я также проверял, что груша установлена, и все выглядело нормально, и я все еще получал ошибки, после нескольких часов безумного взгляда на это я понял, что в моем script было следующее:

include_once "../Mail.php";

вместо:

include_once ("../Mail.php");

Yup, тупая скобка отсутствовала, но в этой строке моего script не было сгенерированной ошибки, которая была нечетной для меня