(Извините, если это названо плохо. Я на самом деле пытаюсь выполнить две вещи - узнают, как текущий каталог может быть изменен в PHP, и исправлять ошибку в Simpletest, работающем на WAMP.)
Я выполняю SimpleTest (simpletest.org) в моем Windows 7 локальная машина на EasyPHP (изменение WAMP).
Когда я запускаю тесты, каталог изменяется от локального dir сценария назад к: C:\Program Files (x86)\EasyPHP\apache согласно getcwd ().
Я создал пару коротких сценариев для исследования getcwd () вывод. Они возвращают текущий путь сценария как ожидалось: C:\Users\Burton\Desktop\Sites\dbmover. Сценарии:
serverpath/getcwd.php: echo getcwd(); require_once('tests/getcwd.php) ?>
serverpath/tests/getcwd.php: echo getcwd(); ?>
Оба возвращают текущий путь: C:\Users\Burton\Desktop\Sites\dbmover
Я сделал поиск через источник Simpletest для проверки на использование chdir () и chroot () - единственные пути. Simpletest не использует chdir ();
Что еще могло изменять путь??
Эта проблема относительного пути по-видимому очень характерна для Simpletest, используемого в Windows. Этот плакат на stackoverflow имеет его, как делает этот плакат в другом месте.
Некоторые люди рассматривайте проблему как нормальную, но я думаю, что это - ошибка.
Я обходил его сам при помощи dirname (__FILE__
) но я зафиксировал бы его для работы правильно.
Я никогда не использовал simpletest, и, не зная его внутренностей, трудно сказать. Однако: вызываемые команды (exec / system / etc.) могут влиять на рабочий каталог. Следует отметить, что cgi версия php (не sapi cli) меняет свой рабочий каталог на каталог скрипта, и может быть использована для php -l
проверки синтаксиса и других приложений. Если проблема в этом, обязательно передайте ему параметр -C
.
Оказывается, проблема пути вызвана тем, как выполняется Simpletest. У него есть классная функция, называемая «автозапуск», которая, по сути, представляет собой включаемый файл в верхней части тестов, вызывающих первый файл.
Он использует register_shutdown_function (), который запускается непосредственно перед выходом из скрипта. Однако путь выполнения этой функции неверен во многих версиях WAMP .
Я отправил исправление этой проблемы .
Кстати, функции, которые могут изменять каталог в PHP: система() exec () chdir () chroot ()
Это больше похоже на проблему с include_path. Что покажет echo get_include_path();
?