2009-02-19 3 views
0

У меня возникла эта ошибка, когда я пытаюсь запустить простой php-скрипт через php.exe. Имя сценария Гулливер (без расширения), и я печатаю это в моей командной строке:

php %Dir%\gulliver 

Вот содержание в файле Гулливер:

<?php 
//***************** Operating Systems parameters ************************** 
    if (PHP_OS == 'WINNT') 
    define('PATH_SEP', '\\'); 
    else 
    define('PATH_SEP', '/'); 

//***************** Defining the Home Directory ********************************* 
    $docuroot = explode (PATH_SEP , $_SERVER['PWD']); 

произошла ошибка была PHP уведомление : Неопределенный индекс: PWD в% Directory% gulliver.

Любая идея, как решить эту проблему?

+1

Если это помогает кому-либо при запуске скрипта через sudo (например, sudo my_script.php), тогда я не вижу $ _SERVER ['pwd'], когда я это делаю иначе. – Alistair

+0

@Alistair: Спасибо за подсказку. Причина в том, что [что переменные среды PWD (Posix Ohter Environment)] (http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html#tag_08_03) - это переменная окружения, и не все они сохраняются 'sudo' по умолчанию. См. [Как сохранить переменные среды при использовании SUDO] (http://stackoverflow.com/q/8633461/367456). – hakre

ответ

2

Я не смог найти PWD в manual page for $_SERVER. Чтобы определить, какие индексы определены, используйте var_dump ($ _SERVER);

Если вам нужен «текущий рабочий каталог», используйте функцию getcwd().

PS: Вместо определения собственного PATH_SEP вы можете использовать предопределенную константу DIRECTORY_SEPERATOR.

+0

$ _SERVER ['PWD'] не является строго эквивалентом getcwd(), потому что getcwd разрешает символические ссылки, что может вызвать проблемы в некоторых ситуациях (произошло с модулем drush) – FGM

1

Итак, вы выполняете скрипт через версию интерпретатора CLI и ожидаете увидеть массив $ _SERVER? Что заполняется, когда скрипт выполняется через веб-сервер?

+1

Версия cli также включает в себя (заполненный) массив $ _SERVER. Он включает в себя все переменные среды среди других. Я согласен, что имя $ _SERVER странно. Но это просто показывает, что PHP предназначен для Интернета. –