Возможный дубликат:
PHP, передающий $ _GET в командной строке linux
Я хочу выполнить php-файл с помощью скрипта оболочки, но я не знаю, как я могу передавать переменные GET.
Этот скрипт «php script.php? Var = data» не работает, потому что Shell не может найти файл «script.php? Var = data».
Итак, вы знаете, как я могу передавать свои переменные? Если действительно невозможно использовать переменную GET, могу ли я передать переменные другим способом и использовать ее в моем php-скрипте?
Если вы выполняете свой скрипт через командную строку (например, php your_script.php
), вы не сможете использовать параметры $_GET
, как вы это переживаете.
Тем не менее, вы можете использовать CLI PHP, который любезно дает вам массив $argv
.
Чтобы использовать его, вы вызываете свой скрипт следующим образом:
php your_script.php variable1 "variable #2"
Внутри вашего скрипта вы можете получить доступ к переменным с помощью:
<?php $variable1 = $argv[1]; $variable2 = $argv[2]; ?>
Моя идея заключалась бы в написании своего рода скрипта-обертки для подачи в / usr / bin / php и предоставления строки аргументов для захвата данных. Не ошибитесь, это взлом и, вероятно, не очень хороший, но он должен выполнить свою работу.
<?php /** Wrapper.php ** ** Description: Adds the $_GET hash to a shell-ran PHP script ** ** Usage: $ php Wrapper.php <yourscript.php> arg1=val1 arg2=val2 ... **/ //Grab the filenames from the argument list $scriptWrapperFilename = array_shift($argv); // argv[0] $scriptToRunFilename = array_shift($argv); // argv[1] // Set some restrictions if (php_sapi_name() !== "cli") die(" * This should only be ran from the shell prompt!\n"); // define the $_GET hash in global scope $_GET; // walk the rest and pack the $_GET hash foreach ($argv as $arg) { // drop the argument if it's not a key/val pair if(strpos($arg, "=") === false) continue; list($key, $value) = split("=", $arg); // pack the $_GET variable $_GET[$key] = $arg; } // get and require the PHP file we're trying to run if (is_file($scriptToRunFilename)) require_once $scriptToRunFilename; else die(" * Could not open `$scriptToRunFilename' for inclusion.\n"); ?>
PHP CLI принимает переменные в структуре команд, например:
php woop.php --path=/home/meow/cat.avi
Затем вы можете использовать что-то вроде http://php.net/manual/en/function.getopt.php, чтобы получить такой вариант в своем PHP-скрипте:
getopt('path')
Или вы можете получить их прямо из argv
.
В качестве альтернативы, как @GBD говорит, что вы можете использовать скрипт bash для создания страницы своего сайта.