未找到Php类'Thread'

时间:2017-02-24 11:32:25

标签: php pthreads

我已通过以下http://php.net/manual/en/pthreads.installation.php安装了pthread 从 http://windows.php.net/downloads/pecl/releases/pthreads/

我的php信息: - 的phpinfo();

PHP版本5.6.30 编译器:MSVC11(Visual C ++ 2012) 架构:x86 线程安全:已启用

但错误仍然存​​在..

php -m输出#

  

php -m PHP警告:PHP启动:pthreads:无法编译模块   with module API = 20121212 PHP使用模块API编译= 20131226这些   选项需要在第0行的Unknown中匹配警告:PHP启动:   pthreads:无法使用模块API = 20121212 PHP编译的ini模块   使用模块API = 20131226编译这些选项需要匹配   第0行未知[PHP模块] bcmath bz2日历核心ctype卷曲   date dom ereg exif fileinfo filter ftp gd gettext hash iconv json   libxml mbstring mcrypt mhash mysql mysqli mysqlnd odbc

2 个答案:

答案 0 :(得分:2)

pthreads对于Web服务器环境(source)不安全: -

  

我没有在Web服务器环境中禁用pthread来惹恼你;一世   这样做是为了保证你的安全,并且不会改变这个决定。

     

PHP和Apache不提供正确使用所需的API   安全

     

如果我明天修补Apache和PHP以包含一些额外的钩子   为了使其安全,你永远无法做到   它规模。

     

线程不是Apache worker mpm服务器的实用程序,它们是   软件架构的一部分;进入并开始   该体系结构中的其他线程是鲁莽和破坏   该架构能够按原样扩展和运行   意图。

     

在Apache中使用pthreads是没有意义的,我让它保持工作   在以前的版本中试图降低进入门槛   (每个人都对网络服务器感到满意)。这是一个错误,我的   错误;当你尝试做某事时,线程并不简单   本来就很复杂的简单,你只是让它变得愚蠢。

     

允许在没有能力的情况下在Apache内部启动线程   使PHP或Apache正确地意识到架构的变化   是辱骂,非常愚蠢。

另一个注意事项,apache2默认以mpm_prefork模式运行,这意味着 - 所以说 - “嘿apache2,请为我分叉多个子进程,但每个用一个线程

答案 1 :(得分:0)

虽然Hassan Ahmed的回复解释了为什么不应该在Web服务器环境中使用pthread,但这并不是您收到错误的原因。

问题是您下载的pthreads二进制文件不是为您正在使用的PHP版本构建的。这导致pthreads的二进制API与它集成的PHP模块API不匹配。根据您的PHP版本判断,您应该使用2.0.10版本的pthreads,因为这是PHP 5.6版本的最后一个稳定版本。

请注意,不再维护对PHP 5.x版本的pthread的支持。如果您想要最新的错误修复和功能,请使用PHP 7.x和pthreads v3。