Intereting Posts
Лучший способ показать сообщение администратора определенным пользователям? MySQL JOIN с тем, где предложение и группа по счету Невозможно ли доступ к элементам в ассоциативных массивах PHP численно (то есть по индексу)? Переключить сервер сайта WordPress PHP foreach печатает массив с предыдущим и следующим элементом Установка WAMP Curl Динамические страницы идентификатора пользователя .htaccess настройка laravel на IIS7 Объединить значения ячейки с PHPExcel – PHP PHP Сохранить выбранные параметры из нескольких выпадающих списков в массив Просто обновите мой сайт до версии 1.9.3.0 и получите ошибку SQLSTATE : Столбец не найден: 1054 Неизвестный столбец 'catalog_product_entity_group_price.is_percent' fsock: невозможно найти перенос сокетов «http» Должен ли я использовать постоянное соединение mysql? Проверьте, является ли запрос GET или POST Как я могу усечь строку до первых 20 слов в PHP?

Как получить домашний каталог из скрипта PHP CLI?

Из командной строки я могу получить домашний каталог следующим образом:

~/ 

Как я могу получить домашний каталог внутри моего скрипта PHP CLI?

 #!/usr/bin/php <?php echo realpath(~/); ?> 

Используйте $_SERVER['HOME']


Редактировать:

Чтобы сделать это, см., Что дал мне print_r($_SERVER) , выполненный из командной строки:

 Array ( [TERM_PROGRAM] => Apple_Terminal [TERM] => xterm-color [SHELL] => /bin/bash [TMPDIR] => /var/folders/Lb/LbowO2ALEX4JTK2MXxLGd++++TI/-Tmp-/ [TERM_PROGRAM_VERSION] => 272 [USER] => felix [COMMAND_MODE] => unix2003 [__CF_USER_TEXT_ENCODING] => 0x1F5:0:0 [PATH] =>/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin [PWD] => /Users/felix/Desktop [LANG] => de_DE.UTF-8 [SHLVL] => 1 [HOME] => /Users/felix [LOGNAME] => felix [DISPLAY] => /tmp/launch-XIM6c8/:0 [_] => ./test_php2 [OLDPWD] => /Users/felix [PHP_SELF] => ./test_php2 [SCRIPT_NAME] => ./test_php2 [SCRIPT_FILENAME] => ./test_php2 [PATH_TRANSLATED] => ./test_php2 [DOCUMENT_ROOT] => [REQUEST_TIME] => 1260658268 [argv] => Array ( [0] => ./test_php2 ) [argc] => 1 ) 

Надеюсь, я не буду раскрывать соответствующую информацию о безопасности;)

Совместимость с Windows

Обратите внимание, что $_SERVER['HOME'] недоступен в Windows. Вместо этого переменная делится на $_SERVER['HOMEDRIVE'] и $_SERVER['HOMEPATH'] .

Вы можете получить значение $ HOME из среды:

 <?php $home = getenv("HOME"); ?> 

Эта функция взята из проекта Drush .

 /** * Return the user's home directory. */ function drush_server_home() { // Cannot use $_SERVER superglobal since that's empty during UnitUnishTestCase // getenv('HOME') isn't set on Windows and generates a Notice. $home = getenv('HOME'); if (!empty($home)) { // home should never end with a trailing slash. $home = rtrim($home, '/'); } elseif (!empty($_SERVER['HOMEDRIVE']) && !empty($_SERVER['HOMEPATH'])) { // home on windows $home = $_SERVER['HOMEDRIVE'] . $_SERVER['HOMEPATH']; // If HOMEPATH is a root directory the path can end with a slash. Make sure // that doesn't happen. $home = rtrim($home, '\\/'); } return empty($home) ? NULL : $home; } 

PHP позволяет вам получить домашний каталог любого из пользователей ОС. Есть два способа.

Способ №1:

Прежде всего, вы должны определить идентификатор пользователя ОС и сохранить его где-нибудь (например, базу данных или файл конфигурации).

 // Obviously this gotta be ran by the user which the home dir // folder is needed. $uid = posix_getuid(); 

Этот бит кода может запускаться любым пользователем ОС, даже обычным пользователем веб-сервера www-data, если вы передаете правильный целевой идентификатор пользователя, который был ранее собран.

 $shell_user = posix_getpwuid($uid); print_r($shell_user); 

Документация

Способ № 2:

Та же логика из posix_getpwuid (). Здесь вы должны передать целевое имя пользователя ОС вместо своего uid.

 $shell_user = posix_getpwnam('johndoe'); print_r($shell_user); 

Документация

Зависит от того, где вы находитесь и что вы пытаетесь сделать.

$_SERVER полностью ненадежен для $_ENV['HOME'] скрипта, но $_ENV['HOME'] может быть лучше для стандартного сценария оболочки. Вы всегда можете print_r( $GLOBALS ) и посмотреть, с чем ваша среда дает вам возможность играть. phpinfo() также выплескивает plaintxt при вызове из скрипта CLI, и только хороший ole php -i выполненный из оболочки, сделает то же самое.

$ _SERVER ['HOME'] и getenv ('home') не работали для меня.

Однако на PHP 5.5+ это сработало, чтобы предоставить домашнему каталогу, в котором находится файл:

 explode( '/', __FILE__ )[2] 

Попробуйте $_SERVER['DOCUMENT_ROOT'] качестве домашнего каталога.

 dirname(__DIR__);