线程安全的libapache2-mod-php5

时间:2017-08-09 11:30:47

标签: php multithreading apache

我有一个由Apache2服务器提供的PHP5应用程序。我想使用mpm_worker模块,如果PHP不是线程安全的,则该模块不可用。所以,我用适当的标志编译PHP。此输出确认我的PHP安装是线程安全的:

$ php -i | grep Thread
Thread Safety => enabled

大!要创建Apache和PHP之间的链接,我激活php5模块(a2enmod php5)。使用的文件( libphp5.so )由包libapache2-mod-php5安装。但是,在他们的网页上,他们说:

  

请注意,此程序包仅适用于Apache的prefork MPM,因为它不是编译线程安全的。

这是否意味着在我的线程Apache和线程安全的PHP之间存在 libphp5.so 这不是线程安全的?因此, mpm_worker 不可用。

我想像编写PHP一样编译这个文件,以使其成为线程安全的。我没有找到任何关于它的话题。我很乐意有任何建议可以帮助我的案子。

当我查看 phpinfo()时,我可以看到该版本(PHP版本5.6.30-0 + deb8u1)与我编译的版本(PHP 5.6.31)不匹配。并且Thread Safety显示为已禁用。就像它正在使用另一个PHP安装。这是当前安装的PHP包:

$ apt list --installed | grep php
libapache2-mod-php5/oldstable,oldstable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
libphp5-embed/oldstable,oldstable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
php5-cli/oldstable,oldstable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed,automatic]
php5-common/oldstable,oldstable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed,automatic]
php5-fpm/oldstable,oldstable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
php5-json/oldstable,now 1.3.6-1 amd64 [installed,automatic]
php5-mysql/oldstable,oldstable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed]
php5-readline/oldstable,oldstable,now 5.6.30+dfsg-0+deb8u1 amd64 [installed,automatic]

1 个答案:

答案 0 :(得分:0)

还有其他线程可以很好地解释您的情况。例如here

总结一下: 有两种方法可以配置关于PHP的apache。

  1. 使用独立的PHP。你自己编译了。 Apache可以连接到它。您可以将其理解为计算机上的另一台服务器。
  2. 直接在您的apache中包含PHP。那是mod_php。它是一个独立的PHP安装,它不是线程安全的。
  3. 要解决您的问题,请重新配置apache以使用独立的PHP。它更复杂但可能会根据您的使用情况给您一些速度。