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