Различные выходные данные $ _SERVER при запуске из командной строки или системы () - PullRequest
0 голосов
/ 01 октября 2018

Если есть эти очень простые сценарии:

foo.php:

<?php
system("php -c /etc/php7/cli/php.ini /some-path/exec.php");
?>

exec.php:

<?php
print_r($_SERVER);
?>

Запуск exec.php из командной строки Я получаю ожидаемый результат для $_SERVER:

...
[LESSKEY] => /etc/lesskey.bin
[NNTPSERVER] => news
[MANPATH] => /usr/share/man:/usr/local/man:/usr/local/share/man
[XDG_SESSION_ID] => 2
[HOSTNAME] => AAEB-DEV203LD
[XKEYSYMDB] => /usr/X11R6/lib/X11/XKeysymDB
[HOST] => AAEB-DEV203LD
[TERM] => linux
[SHELL] => /bin/bash
...

Когда exec.php выполняется командойФункция system в скрипте foo.php вызывается на вкладке браузера, тогда вывод для $_SERVER полностью отличается и выглядит более или менее точно так же, как раздел Environment из phpinfo():

...
    [APACHE_CONF_INCLUDE_FILES] => 
    [mpm_found] => true
    [APACHE_CONF_INCLUDE_DIRS] => 
    [SYSCONFIG_FILE] => /etc/sysconfig/apache2
    [APACHE_START_TIMEOUT] => 2
    [HTTPD_MODULE_IDS] =>  actions_module alias_module ...
    [APACHE_SERVERNAME] => 
...

В чем проблема:

В выводе $_SERVER - работает через функцию system() - отсутствует много необходимой нам информации.

Я не нашел в Интернете ничего, что могло бы подсказать мне, почему выходные данные так сильно отличаются.

ОС: SLES 12.3
PHP: 7.2.10
Apache:2.4 MPM

Мой вопрос:

Почему выходные данные сильно отличаются при работе в командной строке и system() в сеансе Apache, и могу ли я получить такой же выводзаsystem() функция при вызове exec.php из командной строки с php -c /etc/php7/cli/php.ini /some-path/exec.php?

1 Ответ

0 голосов
/ 02 октября 2018

Хорошо.Я мог бы разобраться, как это работает, мне было не ясно.

Запуск php из командной строки PHP устанавливает в $_SERVER все экспортируемые переменные окружения.Следовательно, $_SERVER имеет запись HOSTNAME.

Запуск exec() из сценария, который выполняется на вкладке браузера. PHP устанавливает $_SERVER с содержимым раздела Environment, как показано phpinfo().

Когда я хочу установить запись HOSTNAME в $_SERVER, мне нужно позвонить putenv("HOSTNAME=value"); до exec().

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