【发布时间】:2014-10-10 10:24:11
【问题描述】:
由于去年对我们服务器的攻击,我已经阻止了所有通过php的系统调用:
## php.ini
disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, eval
但这已经停止了我用于在后台发送电子邮件的异步功能。
是否有一种纯粹的 php“安全”方式来进行异步调用而无需再次打开 exec() 函数?
function doEmail($subject,$body,$to){
$pwd = realpath(dirname(__FILE__));
$body = urlencode($body);
$subject = urlencode($subject);
$mailpage = $pwd."/email.php";
$command = "$mailpage $subject $body $to";
bgExecute($command);
}
## Asyncronous PHP - Multi-Tasking (Email etc)
function bgExecute($command) {
if (substr(php_uname(), 0, 7) == "Windows") pclose(popen("start /B ". $command, "r")); // Windows
$exec = "/usr/bin/php -f $command > /dev/null &"; // Ubuntu
exec($exec);
}
【问题讨论】:
-
另一种方法可能是对您委派给的单独服务进行 Web 服务调用。
-
谢谢,你能详细说明一下吗?
-
基本思想是将信息传递给有能力完成这项工作的不同进程/系统。您可以通过设置 Web 服务(另一个 Web 服务器侦听电子邮件信息)来做到这一点。您也可以将其写入本地文件,并让其他进程获取它。我确定还有其他解决方案可以传递信息(套接字/中间件/等)。
标签: php