我想用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调用失败。
我该怎么做?
我想用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调用失败。
我该怎么做?
您的通话,因为你使用的是网络式的失败语法(?parameter=value
)与命令行调用。我明白你在想什么,但它根本行不通。
你会想用来代替。请参阅the PHP manual。
要看到这个动作,这个只有一行写入文件:
<?php print_r($argv); ?>
然后在命令行带参数调用它:
php -f /path/to/the/file.php firstparam secondparam
你会看到,包含脚本本身的名称作为元素零,后面跟随其他任何参数。
尝试echo exec("php /var/www/unity/src/emailer.php 123");
在您的脚本中,然后阅读commandline parameters。
,包括线 – 2013-02-21 01:58:15
如果你想一个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);
。)
此适配脚本显示了将参数传递给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在调用的脚本
什么是对-f PARAM? – Hailwood 2011-06-08 03:42:08
这真是一个深刻的问题。如果你从命令行执行php --help,它会这样写: “-f解析并执行”。 但是,由于无论如何PHP(无需调用-f选项),我想这是一个很好的问题:它是干什么用的? :) –
2011-06-08 03:45:22
也许它的强迫症患者谁必须通过一个标志;) – Hailwood 2011-06-08 06:52:55