查找安装的PHP是线程安全还是非线程安全?

116

如何查找已安装的PHP版本是线程安全还是非线程安全?

请注意,我不是在询问线程安全/非线程安全安装之间的区别。我想找出当前安装了什么。


1
请问什么是PHP中的“线程安全”或“非线程安全”? - Haim Evgi
1
@Haim,那不是我的问题。我看到了那个帖子。我已经在这台服务器上安装了PHP。它与IIS一起工作。但是,我需要找出使用哪种设置来安装它...是Threadsafe设置/非线程安全设置? - Josh
7个回答

207

打开 phpinfo() 并搜索一行 Thread safety。对于支持多线程的构建,您应该找到 enable

根据 Muhammad Gelbana 的评论,您也可以使用以下命令:

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

19
在Windows系统上:php -i|find "Thread" 在*nix系统上:php -i|grep Thread - Muhammad Gelbana
8
提醒自己:使用命令 php -i | find "Architecture" 检查是 x86 还是 x64 架构。 - checksum
@checksum 是 php -i | grep Architecture - helpse

25
如果您更喜欢使用命令行:


  • *nix系统:

    php -i | grep -i "Thread"
    
  • Windows:

    php -i | findstr -i "thread"
    
    这将给你类似这样的东西:
    Thread Safety => enabled
    
    或者
    Thread Safety => disabled
    

1
这不是一个很好的想法,因为服务器使用的PHP版本可能与操作系统选择的版本(默认版本)不同。 - Buffalo

8

我发现查看位于php根目录下命名为php[版本].dll的文件更加容易。它可能是php[版本].dll或者php[版本]ts.dll(ts代表线程安全)。如果你安装了php7.0.10,请进入这个目录,你将会找到一个名为php7ts.dll的文件。这是一种非常可悲的查找方式,但是它确实有效!


5

还有一个未记录的ZEND_THREAD_SAFE常量,似乎自PHP 4.3以来就存在。

<?php

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

https://3v4l.org/tALKX


4

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

<?php
phpinfo(); ?>

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


2

另一种检查方法是使用php -vphp --version。以下是我的示例(NTS):

    $ php --version
    
    PHP 7.3.25-1+ubuntu20.04.1+deb.sury.org+1 (cli) (built: Dec 26 2020 10:32:51) ( NTS )       
    Copyright (c) 1997-2018 The PHP Group
    Zend Engine v3.3.25, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.25-1+ubuntu20.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

2

怎么检查呢?当然是被IIS使用了...但是我怎么找出它是哪个模块呢?这就是我的问题...我不是想问线程安全和非线程安全的区别。我需要知道安装的版本是否是线程安全的。 - Josh
好的,我刚刚进行了一些调查,确实有2个版本可供下载:安全版和非安全版。根据这个IIS7安装指南,建议使用非线程安全版本进行安装。您能否打开phpinfo()并查看是否出现了“thread”这个词? - Phliplip
是的,phpinfo 里面有这些信息……刚找到了……感谢 @Philiplip。 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接