Установить переменную $_SERVER при вызове PHP из командной строки?

Можно ли передать переменную $_SERVER в скрипт PHP через командную строку?

В частности, я пытаюсь установить $_SERVER['recipient'] вручную, чтобы проверить передачу электронной почты без настройки почтового сервера.


person Ian McIntyre Silber    schedule 24.05.2012    source источник
comment
не очень четкий вопрос, но, возможно, вы хотите: php script.php command_line_arguments_go_here   -  person    schedule 24.05.2012


Ответы (5)


На *никсе:

$ recipient="[email protected]" php script.php

<?php

print_r($_SERVER);

Тест:

$ recipient="[email protected]" php script.php | grep recipient

[recipient] => [email protected]

Или вы можете экспортировать его или setenv (в зависимости от вашей ОС), например

$ export recipient="[email protected]"
$ setenv recipient="[email protected]"
person sberry    schedule 24.05.2012
comment
Обратите внимание, что это также полезно для установки встроенных переменных, таких как $_SERVER['HOST_NAME']. Работает как шарм! - person Alex Weinstein; 26.06.2014
comment
Есть ли причина, по которой это не работает для DOCUMENT_ROOT? Есть ли способ обойти это? - person eisaacson; 22.10.2014
comment
Есть ли здесь альтернатива Windows? - person EyasSH; 13.01.2015
comment
Кажется, это не работает с PHP 5.6? О, это работает, если вы запускаете php script.php, но не работаете, если вы делаете php -S. - person John Wiseman; 09.05.2015
comment
@JohnWiseman Я разочарован так же, как и ты! :( см. bugs.php.net/bug.php?id=67808 - person caesarsol; 11.11.2015

Ответ @sberry правильный.

... но поскольку я пришел на эту страницу в поисках установки значений по умолчанию для массива $_SERVER при запуске PHP из командной строки, вот мой собственный ответ. Надеюсь, это может помочь кому-то.

empty( $_SERVER['HTTP_HOST'] ) && $_SERVER['HTTP_HOST'] = 'localhost';
empty( $_SERVER['REQUEST_URI'] ) && $_SERVER['REQUEST_URI'] = '/';
empty( $_SERVER['DOCUMENT_ROOT'] ) && $_SERVER['DOCUMENT_ROOT'] = __DIR__;
print_r( $_SERVER );
person tivnet    schedule 29.07.2014

Лично я использую следующее.

Пример: установите $_SERVER['recipient] в моей командной строке PHP.

С OS X

  • Следуйте инструкциям на странице https://github.com/ersiner/osx-env-sync.
  • Добавьте следующую строку в файл '~/.bash_profile' (создайте его, если он не существует)

    export recipient="[email protected]"

С Ubuntu GNU/Linux

person cgaldiolo    schedule 06.01.2016

Вы также можете передать две и более переменных. Например:

$ SERVER_NAME="example.com" REQUEST_URI="?foo=bar" php script.php

<?php

print_r($_SERVER);
person frops    schedule 21.04.2020

Как насчет создания фиктивной страницы с именем dummy.php со следующим содержимым:

<?php
    $_SERVER['recipient'] = '[email protected]';
?>
person Orbiting Eden    schedule 24.05.2012