PHP: Как перенести переменные из php cmd (выполняется из оболочки) в PHP GET и POST Array? - PullRequest
1 голос
/ 27 июля 2010

У меня есть несколько скриптов, которым для начала нужны значения GET и POST, и я хочу протестировать их через оболочку.
Есть ли способ передать значения в эти массивы, чтобы избежать использования функции getenv()?

Заранее спасибо!

Ответы [ 6 ]

2 голосов
/ 27 июля 2010

если ваша основная цель - просто выполнить тестирование из командной строки, я бы использовал команду wget и просто вызвал ваш скрипт со строкой запроса (для GET) и передавал данные поста с помощью --post-data=stringпараметр wget (для POST).

Если по какой-то причине ваша цель - вообще не использовать веб-сервер для тестирования, я бы рекомендовал использовать оболочку и инкапсулировать ваш доступ к данным GET и POST, чтобы вы моглиможет проверить это любым способом.

2 голосов
/ 27 июля 2010

Вам нужен скрипт-обертка, который устанавливает соответствующие глобальные переменные и переменные среды, а затем вызывает ваш скрипт.

1 голос
/ 27 июля 2010
if(php_sapi_name() == 'cli')
{
    associateGetPost();
}

function associateGetPost()
{
    $_GET = $_POST = array(); //Reset
    foreach($args as $id => $value)
    {
        if(substr($value,0,5) == '--get')
        {
            $_GET = parse_str(substr($value,5,-1))
        }elseif(substr($value,0,6) == '--post')
        {
            $_GET = parse_str(substr($value,6,-1))
        }
    }
}

Что-то в этом роде.

1 голос
/ 27 июля 2010

Попробуйте что-то вроде этого:

if(php_sapi_name() == 'cli' && empty($_SERVER['REMOTE_ADDR'])){ // make sure we're running in CLI
    $args = $argv; // copy the argv array, we want to keep the original for (possible) future uses
    array_shift($args); // the $argv[0] is the filename, we don't need it
    for($i = 0;$i < ($argc - 1);$i++){
        list($key, $value) = explode('=', $args[$i]);
        $_REQUEST[$key] = $value;
    }
}

Конечно, с помощью getopts можно добавить больше возможностей (например, --get abc = def ghi = jkl --post name = test passwd = test --cookie ilike = cookie) но это зависит от вас.

0 голосов
/ 27 июля 2010

В командной строке вы вызываете как

php test.php something1 something2 something3

, а ваш test.php -

<?php
print_r($argv);
?>

, а вывод -

Array
(
    [0] => test.php
    [1] => something1
    [2] => something2
    [3] => something3
)
0 голосов
/ 27 июля 2010

Взгляните на: $ _ ЗАПРОС

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