hd.*_*hd. 71 php command-line command-line-arguments
我有一个需要从命令行运行的PHP文件(通过crontab).我需要传递type=daily给文件,但我不知道如何.我试过了:
php myfile.php?type=daily
Run Code Online (Sandbox Code Playgroud)
但是这个错误被返回了:
无法打开输入文件:myfile.php?type = daily
我能做什么?
PtP*_*uzu 123
该?type=daily参数(在结束了$_GET阵列)仅适用于网络访问的页面.
你需要调用它php myfile.php daily并从$argv数组中检索该参数(这将是$argv[1],因为$argv[0]将是myfile.php).
如果页面也用作网页,您可以考虑两个选项.要么使用shell脚本访问它,要么从cron调用它:
#!/bin/sh
wget http://location.to/myfile.php?type=daily
Run Code Online (Sandbox Code Playgroud)
或者检查php文件是否从命令行调用:
if (defined('STDIN')) {
$type = $argv[1];
} else {
$type = $_GET['type'];
}
Run Code Online (Sandbox Code Playgroud)
(注意:您可能需要/想要检查$argv实际是否包含足够的变量等)
Chr*_*Fin 59
只需将其作为普通参数传递,然后使用该$argv数组在PHP中访问它.
php myfile.php daily
Run Code Online (Sandbox Code Playgroud)
在myfile.php中
$type = $argv[1];
Run Code Online (Sandbox Code Playgroud)
fbo*_*oes 14
这些行将CLI调用的参数转换为php myfile.php "type=daily&foo=bar"众所周知的$_GET-array:
if (!empty($argv[1])) {
parse_str($argv[1], $_GET);
}
Run Code Online (Sandbox Code Playgroud)
虽然覆盖全局$_GET-array 会相当混乱,但它会快速转换所有脚本以接受CLI参数.
有关详细信息,请参见http://php.net/manual/en/function.parse-str.php.
小智 7
使用getopt()函数我们也可以从命令行读取参数,只需用php运行命令传递值
php abc.php --name = xyz
abc.php
$ val = getopt(null,["name:"]);
的print_r($ VAL);
o/p: -
array('name'=>'xyz',)
参数像其他应用程序一样由索引发送
php myfile.php type=daily
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样给他们加油
<?php
if (count($argv) == 0) exit;
foreach ($argv as $arg)
echo $arg;
?>
Run Code Online (Sandbox Code Playgroud)
小智 5
将此代码保存在文件中myfile.php并作为php myfile.php type=daily
<?php
$a = $argv;
$b = array();
if (count($a) === 1) exit;
foreach ($a as $key => $arg) {
if ($key > 0) {
list($x,$y) = explode('=', $arg);
$b["$x"] = $y;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
如果var_dump($b);在?>标记之前添加,您将看到数组$b包含type => daily.