将variables传递给从命令行运行的php脚本

我有一个PHP文件需要从命令行(通过crontab)运行。 我需要将type=daily传递给文件,但我不知道如何。 我试过了:

 php myfile.php?type=daily 

但是这个错误被返回:

无法打开input文件:myfile.php?type = daily

我能做什么?

?type=daily参数(以$_GET数组结尾)仅对Web访问的页面有效。

你需要php myfile.php daily调用它像php myfile.php daily并从$argv数组(这将是$argv[1] ,因为$argv[0]将是myfile.php )检索该参数。

如果该页面也用作网页,则可以考虑两个选项。 或者用shell脚本访问它,并从cron中调用它:

 #!/bin/sh wget http://location.to/myfile.php?type=daily 

或者检查php文件是否从命令行调用:

 if (defined('STDIN')) { $type = $argv[1]; } else { $type = $_GET['type']; } 

(注意:您可能需要/想要检查$argv实际包含了足够的variables等)

只需将其作为普通parameter passing,并使用$argv数组在PHP中进行访问。

 php myfile.php daily 

并在myfile.php

 $type = $argv[1]; 

参数像其他应用程序一样由索引发送

 php myfile.php type=daily 

然后你可以像这样打他们

 <?php if (count($argv) == 0) exit; foreach ($argv as $arg) echo $arg; ?> 

将这段代码保存在文件myfile.php并以php myfile.php type=daily

 <?php $a = $argv; $b = array(); if (count($a) == 0) exit; foreach ($a as $arg){ list($x,$y) = explode('=', $arg); $b["$x"] = $y; } ?> 

如果你添加var_dump($b);?>标签之前,你会看到数组$b包含type => daily

这些行将CLI调用的参数,如php myfile.php "type=daily&foo=bar"转换为众所周知的$_GET -array:

 if (!empty($argv[1])) { parse_str($argv[1], $_GET); } 

尽pipe覆盖全局的$_GET数组相当麻烦,但它会快速转换所有脚本以接受CLI参数。

有关详细信息,请参阅http://php.net/manual/en/function.parse-str.php

 <?php if (count($argv) == 0) exit; foreach ($argv as $arg) echo $arg; ?> 

这个代码不应该被使用。 首先CLI调用如下:/ usr / bin / php phpscript.php将有一个argv值,它是脚本的名字

 array(2) { [0]=> string(13) "phpscript.php" } 

这个会一直执行,因为会有1或2个参数

我强烈build议使用getopt。

文档在http://php.net/manual/en/function.getopt.php

如果你想帮助打印出你的select,看看https://github.com/c9s/GetOptionKit#general-command-interface

 if (isset($argv) && is_array($argv)) { $param = array(); for ($x=1; $x<sizeof($argv);$x++) { $pattern = '#\/(.+)=(.+)#i'; if (preg_match($pattern, $argv[$x])) { $key = preg_replace($pattern, '$1', $argv[$x]); $val = preg_replace($pattern, '$2', $argv[$x]); $_REQUEST[$key] = $val; $$key = $val; } } } 

我把参数放在$ _REQUEST中

$ _REQUEST [$ key] = $ val;

也可以直接使用

$$键= $ VAL

使用这样的:

myFile.php / key = val