Установите переменную $ _GET[‘foo’] при вызове PHP-скрипта в CLI

#php #command-line-interface

#php #интерфейс командной строки

Вопрос:

При тестировании и разработке некоторых скриптов я хотел бы иметь возможность определять определенные переменные $ _GET.

Когда скрипт вызывается через mod_php / apache, эти переменные будут определены путем добавления ?foo=bar к URL.

Возможно ли это вообще?

Комментарии:

1. Спросите себя, почему вы пытаетесь использовать $ _GET в программе CLI. Рассмотрите возможность пересмотра вашего дизайна.

2. Вы совершенно правы. Просто запуск cli делает отладку и быстрые тесты во время разработки намного проще, чем нажатие alt-tabbing в firefox для каждого изменения. В рабочей среде будет использоваться GET; в моей среде разработки я хотел бы просто определить некоторые вещи там.

Ответ №1:

Нет, это невозможно через CLI. Однако вы можете вручную присвоить значение $_GET переменной.

ИЛИ вы можете использовать аргументы командной строки и присвоить их $_GET .

 $_GET['data'] = $argv; 
 

^^ Это немного управляемо..

Ответ №2:

Вы можете просто сделать $_GET['foo'] = 'bar'; , чтобы установить ее.

Ответ №3:

Предполагая, что у вас есть некоторый код, который использует $ _GET [‘foo’] для выполнения чего-либо, тогда лучшим способом справиться с этим было бы извлечь этот код в класс / метод / функцию, а затем использовать контекстно-зависимые строительные леса, которые собирают соответствующие данные из среды и передают их в код -блок, чтобы делать это.

Итак, допустим, у вас был встроенный PHP-скрипт, подобный этому:

 $foo = $_GET['foo'];
// do what I need to do with $foo
 

Затем вы могли бы обернуть это в функцию

 function doBar( $foo ) {
    // do what I need to do with $foo
}
 

Теперь ваш встроенный php-скрипт будет

 $foo = $_GET['foo'];
doBar( $foo );
 

И вы могли бы очень легко написать CLI-скрипт для проверки этого, либо установив $foo напрямую

 $foo = 'test value';
doBar( $foo );
 

Или путем синтаксического анализа входных данных CLI и получения foo оттуда.

По сути, ваш код, который выполняет что-то (модель в традиционном MVC), изолирован от своего окружения и может использоваться через HTTP-запрос, в скрипте CLI, в модульном тестировании и т. Д.

Одна вещь, от которой я бы воздержался, — это присвоение ваших собственных значений суперглобальным значениям $ _GET и $ _POST. Это вонючий и короткий путь к возникновению проблем в будущем.

Ответ №4:

Два варианта установки переменных $ _GET: просто есть что-то вроде:

  <a href='www.example.com/index.php?foo=bar'>blah</a>
 

Это установит для $ _GET[‘foo’] значение bar.

Или:

 <form method='get' action='index.php'>
 

Любая информация, которую вы отправите с помощью этой формы, будет извлекаться с помощью $ _GET .

Комментарии:

1. Ни то, ни другое вообще не применимо к CLI.