2011-06-08 132 views
14

我想用exec调用一个php文件。在一个PHP文件上调用exec并传递参数?

当我打电话时,我想能够通过(一个id)传递一个变量。

我可以打电话echo exec("php /var/www/unity/src/emailer.php");很好,但是现在我添加了像echo exec("php /var/www/unity/src/emailer.php?id=123");这样的exec调用失败。

我该怎么做?

回答

25

您的通话,因为你使用的是网络式的失败语法(?parameter=value)与命令行调用。我明白你在想什么,但它根本行不通。

你会想用来代替。请参阅the PHP manual

要看到这个动作,这个只有一行写入文件:

<?php print_r($argv); ?> 

然后在命令行带参数调用它:

php -f /path/to/the/file.php firstparam secondparam 

你会看到,包含脚本本身的名称作为元素零,后面跟随其他任何参数。

+3

什么是对-f PARAM? – Hailwood 2011-06-08 03:42:08

+4

这真是一个深刻的问题。如果你从命令行执行php --help,它会这样写: “-f 解析并执行”。 但是,由于无论如何PHP(无需调用-f选项),我想这是一个很好的问题:它是干什么用的? :) – 2011-06-08 03:45:22

+3

也许它的强迫症患者谁必须通过一个标志;) – Hailwood 2011-06-08 06:52:55

2

尝试echo exec("php /var/www/unity/src/emailer.php 123");在您的脚本中,然后阅读commandline parameters

+0

,包括线 – 2013-02-21 01:58:15

1

如果你想一个GET参数传递给它,那么它必须为调用提供的php-cgi的二进制:

exec("QUERY_STRING=id=123 php-cgi /var/www/emailer.php"); 

但是这可能需要更多的假CGI环境变量。因此,通常建议重写被调用的脚本,并让其采用正常的命令行参数,并通过$_SERVER["argv"]来读取它们。

(您同样可以只是假冒的php-cgi的行为与一个正常的PHP解释器和上面的例子在您的脚本的顶部添加parse_str($_SERVER["QUERY_STRING"], $_GET);。)

1

此适配脚本显示了将参数传递给php scr的两种方式IPT从PHP exec命令: 调用脚本

<?php 
$fileName = '/var/www/ztest/helloworld.php 12'; 
$options = 'target=13'; 
exec ("/usr/bin/php -f {$fileName} {$options} > /var/www/ztest/log01.txt 2>&1 &"); 

echo "ended the calling script"; 
?> 

调用的脚本

<?php 
echo "argv params: "; 
print_r($argv); 
if ($argv[1]) {echo "got the size right, wilbur! argv element 1: ".$argv[1];} 
?> 

不要忘记,以验证执行权限和创建具有写入权限的log01.txt文件(Apache的用户通常会WWW的数据)。

结果

的argv PARAMS:数组

[0] => /var/www/ztest/helloworld.php 

[1] => 12 

[2] => target=13 

得到了大小合适的,wilburargv元素1:12

选择你喜欢的任何解决方案传递参数,所有你需要做的就是访问argv arr ay并按照它们传递的顺序检索它们(文件名是0元素)。

TKS @hakre在调用的脚本

相关问题