php fopen относительный путь сломан - тайна - PullRequest
2 голосов
/ 20 августа 2009

Я знаю, "что-то должно быть изменено", но мой код, кажется, сломался за ночь без причины.

Моя структура каталогов сервера выглядит примерно так:

/
/ скрипты
/ аудит
/ other_things

У меня есть скрипт (скажем, он называется «/scripts/MyScript.php») в папке «scripts», который собирает данные с веб-страницы с помощью curl и сохраняет датированную копию веб-страницы, которую он читает в «ревизии». "папка.

Для записи в папку аудита я использовал

$ fh = fopen ("./ audit / 2008-09-09-183000.backup.log", "w");

Однако, что перестало работать, бросая

[function.fopen]: не удалось открыть поток: нет такого файла или каталога в /home/web/website.co.uk/audit/2008-09-09-183000.backup.log в строке 353

Однако я исправил это, изменив путь на

"../ аудит / 2008 и т. Д." из "./audit/2008" (это две полных остановки / периода вместо одной)

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

Я даже прошел через SVN для MyScript.php, и все предыдущие версии использовали сингл. в пути.

Ответы [ 2 ]

7 голосов
/ 20 августа 2009

Используйте dirname(__FILE__), чтобы получить путь к файловой системе для текущего файла. Затем используйте относительные пути, чтобы найти каталог audit.

Например, в пределах scripts/MyScript.php, dirname(__FILE__) вернет /home/web/website.co.uk/scripts. Вы можете надежно добавить /../audit к этому.

(Обратите внимание, что это работает даже в файле include d или require d - в этом случае он вернет каталог, в котором находится включающий файл ).

0 голосов
/ 20 августа 2009

Ваш CWD (текущий рабочий каталог) изменил это был корень документа и теперь это корень документа / скрипты.

Это могло произойти из-за пути, используемого для доступа к сценарию, например, если вы делали это раньше http://website.co.uk/MyScript.php из-за некоторого переписывания URL или чего-то еще, и вы сейчас получаете доступ к http://website.co.uk/scripts/MyScript.php.

Кажется, я помню, что есть и другие возможные виновники, но сейчас я не могу их вспомнить. Вы искали с некоторыми правилами переписывания или URL? (т.е. начал использовать PATH_INFO?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...