关于iis:查看安装的PHP是线程安全的还是非线程安全的?

Find if the installed PHP is threadsafe or nonthreadsafe?

如何确定安装的PHP版本是否是线程安全的?

请注意,我不是在问线程安全/非线程安全安装之间的区别。我想知道目前安装的是什么。


打开phpinfo()并搜索行线程安全性。对于线程安全构建,您应该找到启用。

如穆罕默德·盖尔巴纳评论中所述,您还可以使用:

  • 在Windows上:php -i|findstr"Thread"
  • on*nix:php -i|grep Thread


如果您喜欢使用命令行:

  • *NIX:

    1
    php -i | grep -i"Thread"
  • 窗户:

    1
    php -i | findstr -i"thread"

这应该给你这样的感觉:

1
Thread Safety => enabled

1
Thread Safety => disabled


创建一个新的PHP文件并将此代码插入其中:

1
2
<?php
phpinfo(); ?>

然后运行这个页面,您将找到所有的PHP信息。搜索您想要的术语,它将显示它已启用。


我发现在PHP的根文件夹中查找名为php[version].dll的文件比较容易。它的php[version].dll或php[version]ts.dll(ts代表线程安全)。因此,如果安装了php7.0.10,请转到具有此名称的目录,然后找到一个名为php7ts.dll的文件。这是一个非常可悲的发现方式,但它起作用了!


然后是未记录的ZEND_THREAD_SAFE常量,这似乎是从php 4.3开始就存在的。

1
2
3
4
5
6
7
<?php

if (ZEND_THREAD_SAFE) {
    echo 'Thread safe';
} else {
    echo 'Not thread safe';
}

https://3v4l.org/talkx网站


从脚本:

1
2
3
4
5
6
7
8
9
/**
 * @return boolean true if PHP is thread safe
 */

function isThreadSafe()
{
    ob_start();
    phpinfo(INFO_GENERAL);
    return preg_match('/Thread\s*Safety\s*enabled/i', strip_tags(ob_get_clean()));
}


检查您的安装是Apache模块还是CGI二进制文件。请参阅堆栈溢出问题PHP中什么是线程安全的或非线程安全的?.