首页 > popen函数调本地脚本并传参数

popen函数调本地脚本并传参数

老大要我实现一个php异步发邮件的功能,上网找了资料发现用popen就可以,于是初步写成这样:

pclose(popen("php -f mymail.php","r"));

这个脚本里就是一个用phpmailer发送一封邮件给我的账号。
现在想给这个功能传参数:
$to--收件人
$content--内容
$subject--标题。
这些是一个发邮件的功能必不可少的,
但是不知道要怎么写?
是在这条指令后加参数?如下,==可能这个靠谱点

php -f mymail.php -a $argv1 -b $argv2

还是有一个可以传参数的东西?(但是看popen这个函数4个参数都不是啊)

popen("balabala","r",$参数,$参数)

还是说强行写进去,然后直接用?类似下面这个意思

fopen("mymail.php","w");
fwrite $to balabala;
fwrite $subject balabala;
fclose(fopen(balabala));

初学php,有毛病多多包涵,请大家多多指教,==


<?php
$parm1 = "*";
$parm2 = " -l";
$handler = popen ("/bin/ls ".$parm1.$parm2,"r");
$read = fread($handler,2048);
echo $read;
?>

这个等同运行命令:ls * -l ,所以,参数直接作为字符串传参给popen就好了。


pclose(popen("php /path/to/task.php '$arg1' '$arg2' '$arg3' >/dev/null 2>&1 &", 'r'));

比如变量$arg1是传递给脚本task.php的参数,task.php里通过$argv[1]拿到这个参数$arg1.

字符串参数$arg可以用单引号括起来,可以避免一些空格的影响,但还是有缺陷.
字符串参数最好还是serialize序列化到文件,
然后给脚本task.php传文件路径这个参数,
让task.php自己读文件unserialize反序列化拿数据.
文件名应该做到唯一,比如可以是用户ID+进程PID+时间随机数:
$filename = md5(uniqid('mail_'.$uid.'_'.getmypid().'_'.mt_rand(), true));

【热门文章】
【热门文章】