我目前正在运行的cronjobs几个人,PHP GET请求来知道谁是这些人我给它一些细节参数:执行通过终端
0 1 * * * cd /var/www; php auto.php?user=user
由于某种原因,它返回这个结果:
无法打开输入文件:?auto.php用户=用户
是有什么错的语法?我必须编码任何东西吗?
我目前正在运行的cronjobs几个人,PHP GET请求来知道谁是这些人我给它一些细节参数:执行通过终端
0 1 * * * cd /var/www; php auto.php?user=user
由于某种原因,它返回这个结果:
无法打开输入文件:?auto.php用户=用户
是有什么错的语法?我必须编码任何东西吗?
在命令行PHP中使用的参数是不同
命令应该是
php auto.php myuser
然后在脚本访问使用$_SERVER['argv']
超全局数组变量 - 每个命令行参数是为了在该阵列中以脚本名称开始。您可以检查在这种情况下与$_SERVER['argc']
传递的参数数目
$_SERVER['argc'] = 2 $_SERVER['argv'][0] = auto.php $_SERVER['argv'][1] = myuser
奖金信息
您可以添加#!/usr/bin/php
(称为认领)到PHP文件的第一行,添加执行位,那么你不必在命令行调用php,你可以调用脚本。假设PHP是位于/ usr/bin中/ PHP的典型位置
问号表示一个HTTP GET参数,它在终端上没有意义,因为不涉及Web服务器。您可以使用此:
cd /var/www; php auto.php some parameters
然后用$_SERVER['argc']
和$_SERVER['argv']
PHP脚本中读取参数。
不能调用从URL风格的参数命令行PHP脚本,但也有几个可能的解决方案:
您可以使用wget来有效地触发通过web服务器的脚本(假设它实际上是在服务器中运行的网页/脚本)
0 1 * * * wget http://yourserver/thepath/auto.php?user=user
使用PHP的getopt扩展您修改脚本以接受壳式参数
$options = getopt("u:"); // expect -u followed by the parameter value
$user = $options["u"];
// continue the script
将其称作
php -q auto.php -u user
退房的getopt的文档页面,你可以把它比这个票友很多也是如此。使用getopt over argc/argv(它仍然是一个有效的btw选项)的主要优点是处理可以按任意顺序给出的多个参数要容易得多。例如,假设您需要:
php -q auto.php -u user -p pass -a another -b whatever
你需要写一段代码,支持分析这些参数,getopt的确实是所有的本身。
你不能做到这一点的方式 - 它传递参数的HTTP请求,不到处的方式。对于命令行,您必须使用$_SERVER['argv']
和$_SERVER['argc']
。
你应该返工你的代码位。在地方的
$user = $_GET['user'];
使用
$user = $_SERVER['argv'][1];
,应该改变方式,你调用你的脚本:
0 1 * * * cd /var/www; php auto.php user
您还可以会发现一些命令行的辅助类是有用的,即: CLI
见PHP手册Command Line Usage节更多的INF ormation。
显示“一些参数” – Osa
的完整的例子这是完整的例子,“一些”和“参数”是参数。尝试脚本中的'var_dump($ _ SERVER ['argv'])'来看看它是如何工作的。 –