2009-11-01 59 views
1

在网络上运行分叉PHP应用程序有什么缺点?运行分叉PHP应用程序

我已阅读,它不应该被Apache下以任何理由运行,但没有解释原因。
我能想到的唯一原因是,如果一个脚本在执行过程中被终止,任何分叉的进程永远不会被终止,并可能导致内存泄漏。

的问题是,在问候中了pcntl扩展

<?php 
$pid = pcntl_fork(); 
if ($pid) 
{ 
    //parent, execute parent code 
} 
else 
{ 
    //child code 
} 
?> 

我是在这个假设是正确的?

+0

只是为了clarfiy这样的:你谈论的PCNTL扩展库(http://php.net/manual/en/function.pcntl-fork.php)? – Max 2009-11-01 12:36:21

+0

我推荐使用php-fpm进行多处理和使用php分派进程。 – LeonanCarvalho 2017-11-15 11:25:08

回答

3

调用fork()从Apache服务器进程(再不行exec'ing)是一个非常糟糕的主意。

的主要问题是,文件描述符将仍然与母体,这意味着之类的数据库连接和插座将处于未有用的方式被共享共享。

而不是使用fork()的,那么就产生一个单独的进程 - 如果你想运行PHP,运行PHP命令行可执行文件运行脚本做任何你想做的事情。

否则,你会导致Apache做坏事 - 例如,如果父进程然后在同一个连接上提供更多的请求,并且你的分叉进程恰好发送一些输出,它会在任意点交错响应 - 这将产生看似随机难以诊断的错误。如果连接是SSL,情况就会变得不那么好(SSL会话将包含错误并意外终止,根据我的经验创建一些奇怪的浏览器错误)。

虽然fork()的看起来很方便,它只是不值得冒险。它在一般情况下不起作用。