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

如何查明已安装的 PHP 版本是否是线程安全的?

请注意,我并没有询问线程安全/非线程安全安装之间的区别。我想知道当前安装了什么。

52489 次浏览

Check if your install is Apache Module or CGI Binary. See Stack Overflow question What is thread safe or non-thread safe in PHP?.

Open a phpinfo() and search for the line Thread safety. For a thread-safe build you should find enable.

As specified in the comments by Muhammad Gelbana you can also use:

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

Create a new PHP file and insert this code in it:

<?php
phpinfo(); ?>

Then run this page and you will find all of the PHP information. Search for the term that you want, and it will show you it's enabled.

If you prefer to use the command line:

  • *nix:

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

    php -i | findstr -i "thread"
    

This should give you something like this:

Thread Safety => enabled

or

Thread Safety => disabled

I just find it easier to look at the file named php[version].dll in the root folder of php. Its either php[version].dll or php[version]ts.dll (ts standing for Thread Safe). So, if you have php7.0.10 installed, go to the directory that has this name and you'll find a file named php7ts.dll. This is a very sad way of finding out, but it works!

Then there's the undocumented ZEND_THREAD_SAFE constant, which seems to exist since PHP 4.3.

<?php


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

https://3v4l.org/tALKX

Another way to check it is using php -v or php --version. Example bellow from mine (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