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

时间:2011-04-27 05:38:57

标签: php iis thread-safety

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

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

8 个答案:

答案 0 :(得分:147)

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

根据Muhammad Gelbana的评论中的说明,您也可以使用:

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

答案 1 :(得分:20)

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

  • * nix中:

    php -i | grep -i "Thread"
    
  • 视窗:

    php -i | findstr -i "thread"
    

这应该给你这样的东西:

Thread Safety => enabled

Thread Safety => disabled

答案 2 :(得分:4)

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

<?php
phpinfo(); ?>

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

答案 3 :(得分:3)

我发现在php的根文件夹中查看名为php [version] .dll的文件更容易。它的php [版本] .dll或php [版本] ts.dll(ts代表线程安全)。因此,如果您安装了php7.0.10,请转到具有此名称的目录,然后您将找到名为php7ts.dll的文件。这是一种非常悲伤的发现方式,但它确实有效!

答案 4 :(得分:2)

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

<?php

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

https://3v4l.org/tALKX

答案 5 :(得分:1)

来自剧本:

/**
 * @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()));
}

答案 6 :(得分:0)

检查您的安装是否为Apache Module或CGI Binary。请参阅Stack Overflow问题 What is thread safe or non-thread safe in PHP?

答案 7 :(得分:0)

另一种检查方法是使用 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