如何通过网页将参数传递到PHP脚本中?


139

每当网页加载时,我都会调用PHP脚本。但是,PHP脚本需要运行一个参数(在测试脚本时通常会通过命令行传递该参数)。

页面加载时,每次运行脚本时如何传递此参数?


1
您可以发布您的代码吗?
SenorAmor 2012年

1
所以您想运行命令行?或PHP脚本?
Christopher Pelayo 2012年

好的,谢谢大家。我得到以下答案:使用$ GET并将其作为参数值传递给url本身。
尼克

Answers:


232

大概是在命令行中按以下方式传递参数:

php /path/to/wwwpublic/path/to/script.php arg1 arg2

...然后通过脚本访问它们:

<?php
// $argv[0] is '/path/to/wwwpublic/path/to/script.php'
$argument1 = $argv[1];
$argument2 = $argv[2];
?>

通过HTTP传递参数(通过Web访问脚本)时,您需要做的是使用查询字符串并通过$ _GET超全局变量访问它们:

转到http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2

...和访问:

<?php
$argument1 = $_GET['argument1'];
$argument2 = $_GET['argument2'];
?>

如果您希望脚本无论在哪里(从命令行或从浏览器)调用,都可以运行,则将需要以下内容:

编辑:正如克苏鲁(Cthulhu)在评论中指出的那样,测试您在哪个环境中执行测试的最直接方法是使用PHP_SAPI常量。我已经相应地更新了代码:

<?php
if (PHP_SAPI === 'cli') {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
else {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
}
?>

我会用empty($_GET)$_GET是一个预定义的值,因此我很确定始终设置该值,但如果未设置GET参数,则为空。empty()返回false空字符串和数组。
Tim S.

如果没有实际检查,我确实相信$_GET如果在命令行上下文中调用脚本实际上并没有设置。 empty()如果从网上访问脚本时没有查询字符串,则会导致它寻找命令行参数,从而引发更多注意。
杰森

$ argv [0]在您的第一个示例中实际上不是arg1,而是“ /path/to/wwwpublic/path/to/script.php”。(php.net/manual/en/reserved.variables.argv.php
CasualT

3
我知道我参加聚会迟到了,但是检查的正确方法是PHP_SAPI === 'cli'
克苏鲁2015年

1
@emanueledelgrande我不能完全确定我是否遵循您的要求,但我会尽力的。.htaccess是一个Apache文件-Apache使用指令处理传入的请求,.htaccess然后调用PHP生成对请求的响应。因此,如果您在命令行中,.htaccess将被完全忽略。如果您要通过网络访问脚本,并且希望在收到请求后添加新的querystring参数,通常可以通过完成mod_rewrite。如果那不能完全回答您的问题,建议您发布一个全新的问题。
杰森

17
$argv[0]; // the script name
$argv[1]; // the first parameter
$argv[2]; // the second parameter

如果您希望所有脚本都能运行,无论您从哪里(从命令行或从浏览器)调用它,都将需要以下内容:

<?php
if ($_GET) {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
} else {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
?>

从命令行调用chmod 755 /var/www/webroot/index.php并使用

/usr/bin/php /var/www/webroot/index.php arg1 arg2

要从浏览器拨打电话,请使用

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.