В тот же каталог входит сбой на сервере Fedora с PHP - PullRequest
0 голосов
/ 12 июня 2010

У меня есть несколько файлов, которые выглядят так:

index.php:

<?php  
include('includes/header.php');

...

включает / header.php:

<?php
include('config.php');

...

Ошибка Iget is

Предупреждение: требуется (config.php) [function.require]: не удалось открыть поток: нет такого файла или каталога в [dir] /include/header.php в строке 2
Неустранимая ошибка: require () [function.require]: Не удалось открыть обязательный файл 'config.php' (include_path = '.: / Usr / share / pear: / usr / share / php') в [dir] / includes / header.php в строке 2

Я сделал дальнейшую отладку: когда я добавляю вызов

system('pwd');

в include / header.php, он показывает [dir], где он долженскажем [dir] / включает в себя.Добавление 'include /' к пути включения работает, но нежелательно, потому что это не получится на рабочем сервере.

Приведенный выше код работает на рабочем сервере и отлично работает на моем сервере разработки Fedora,пока я не попытался изменить свою среду разработки, чтобы корневой каталог документов сервера Fedora представлял собой смонтированный общий ресурс CIFS.

Есть идеи?Спасибо.

Ответы [ 3 ]

0 голосов
/ 12 июня 2010

Мне неприятно это говорить, но поведение с pwd, которое вы описываете, является 100% ожидаемым поведением (и так было по крайней мере с PHP4 ... возможно, раньше).

PHP автоматически устанавливаеттекущий рабочий каталог (используется pwd) ОДИН РАЗ.PHP не меняет это.Таким образом,будет ссылаться на исходный текущий рабочий каталог, если вы не измените его вручную с помощью chdir ().

Существуют различные решения этой проблемы;большинство из которых вы можете увидеть в Нужна стратегия включения файлов PHP .

Если раньше это работало, вероятно, где-то было какое-то обновление include_path, код, который изменил рабочий каталог, больше не меняетсяон или версия php, которую вы использовали, которая реализовала это странное (но более ожидаемое) поведение, больше не делает этого.

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

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

0 голосов
/ 11 июня 2014

Монтирование общего ресурса CIFS с опцией 'noserverino' должно решить проблему, например:

mount -t cifs -o noserverino //host/share /mnt

Полное объяснение того, почему это работает, можно найти здесь: http://www.php.net//manual/en/function.is-dir.php#98338

0 голосов
/ 12 июня 2010

работал нормально ... пока я не попытался изменить свою среду разработки, чтобы корневой каталог документов сервера Fedora представлял собой смонтированный общий ресурс CIFS.

Включен ли SELinux?

Чек /var/log/audit/audit.log

Я готов поспорить, что SELinux включен и находится в принудительном режиме и мешает работе.

...