我想用 Shell 脚本执行 php 文件,但我不知道如何传递 GET 变量。
此脚本“php script.php?var=data”不起作用,因为 Shell 找不到文件“script.php?var=data”。
那么,你知道我如何传递我的变量吗?如果真的不可能使用 GET 变量,我可以通过其他方式传递变量并在我的 php 脚本中使用它吗?
我想用 Shell 脚本执行 php 文件,但我不知道如何传递 GET 变量。
此脚本“php script.php?var=data”不起作用,因为 Shell 找不到文件“script.php?var=data”。
那么,你知道我如何传递我的变量吗?如果真的不可能使用 GET 变量,我可以通过其他方式传递变量并在我的 php 脚本中使用它吗?
如果您通过命令行(例如php your_script.php
)执行脚本,您将无法使用这些$_GET
参数,正如您所遇到的那样。
但是,您可以使用 PHP 的 CLI,它可以为您提供$argv
数组。
要使用它,您将像这样调用您的脚本:
php your_script.php variable1 "variable #2"
在您的脚本中,您可以通过以下方式访问变量:
<?php
$variable1 = $argv[1];
$variable2 = $argv[2];
?>
我的想法是编写某种包装脚本来提供给 /usr/bin/php 并给出一串参数以从中获取数据。毫无疑问,这是一个 hack,可能不是一个好的,但它应该可以完成工作。
<?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')
或者您可以直接获取它们 form argv
。
作为@GBD 所说的替代方案,您也可以使用 bash 脚本来获取您网站的页面。