Xpoint
   [напомнить пароль]

Мистическая ошибка, пропадает после f5

Метки: [без меток]
2010-11-24 14:18:09 [обр] Павел Карасёв(0/14)[досье]

Имею: Fedora 8 / Apache (+mod_vhost_alias) / PHP5

Ситуация:

  1. есть скрипт "симлинк", который делает симлинк (/home/html, /home/domains/l/level3)
  2. в папке /home/html есть такие файлы:

/class/db.cls
/module/setVarConnect.mdl
index.php

программа построена так:

#в index.php
require_once   'module/setVarConnect.mdl';

#далее
#в module/module.mdl
require_once   'class/db.cls';

Ошибка появляется после создания нового субдомена. Выглядит буквально вот так:

[Tue Nov 23 17:06:51 2010] [error] [client 78.110.52.231]
PHP Warning:  require_once(class/db.cls) [<a href='function.require-once'>function.require-once</a>]: 
failed to open stream: No such file or directory in /home/html/module/setVarConnect.mdl on line 22, 
referer: http://example.com/?example=53

После того как я это увидел эту ошибку, я делаю "обновить страницу" и ошибка пропадает!

Сначала я думал что скрипты кешируются, но это не подтвердилось. Далее я попробовал удалить только что созданный симлинк, создал его скриптом снова. Зашёл на созданный субдомен - ошибки нет! Как только я создаю совершенно новый субдомен (скриптом или руками!) - ошибка снова появляется, причём только один раз, т.е. до момента F5...

Я просто не знаю в какую сторону думать-то... ???

спустя 19 часов [обр] Павел Карасёв(0/14)[досье]

Вычислил я ошибку и исправил так: в файл .htaccess добавил настройку include_path /home/html

Но недоумение осталось! На сколько я сообразил дело происходит так:

  1. грузиться /index.php
  2. там стоит инструкция require_once /module/setVarConnect.mdl
  3. она выполняется т.к. текущая папка . (т.е. /home/html)
  4. но после подключения файла /module/setVarConnect.mdl текущая папка меняется на /module
  5. файл /module/setVarConnect.mdl содержит инструкцию require_once class/db.cls
  6. т.о. программа пытается подключить файл по адресу /module/class/db.cls и не находит его...

Но во-первых, почему меняется текущая папка?
А во-вторых, почему после f5 все срабатывает как надо??? более того ошибка появляется только на новых хостах! если стереть уже созданный, и снова его создать, то ошибки не будет..!

спустя 4 часа 52 минуты [обр] Алексей Севрюков(162/1280)[досье]
Да не нужно тут думать. Не используйте в скриптах относительные пути. Или если сильно хочется делайте chdir на рабочую директорию в самом начале скрипта (если сможете гарантировать что Ваш скрипт потом ее снова не изменит).
Скрипт можно вызывать самыми разными способами, не обязательно из текущей директории (по крону, например), поэтому никто не гарантирует Вам что при старте скрипта текущей директорией будет та, где этот скрипт находится.
Powered by POEM™ Engine Copyright © 2002-2005