0
由于去年在我们的服务器上的攻击,我已经阻止通过PHP所有的系统调用:没有系统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服务调用到您将其委托给的单独服务。 – therealsix 2014-10-10 02:16:50
谢谢,能否详细说明一下? – crankshaft 2014-10-10 02:18:41
其基本思想是将信息传递给具有完成工作能力的不同过程/系统。您可以通过设置一个Web服务(另一个监听电子邮件信息的Web服务器)来做到这一点。您也可以将其写入本地文件,并让其他一些进程选取它。我确信有其他解决方案可以通过信息(套接字/中间件/等)。 – therealsix 2014-10-10 02:29:12