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


90

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

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



1
@Haim那不是我的问题Haim。我看到了那个线程。我已经在此服务器上安装了PHP。它与IIS一起使用。但是,我需要找出用于安装此安装程序的安装程序...线程安全安装程序/非安全安装程序?
乔什(Josh)

Answers:


166

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

根据Muhammad Gelbana的评论中的指定,您还可以使用:

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

15
在Windows上:php -i|find "Thread"在* nix上:php -i|grep Thread
Muhammad Gelbana 2013年

7
自我注意:php -i | find "Architecture"检查它是x86还是x64
校验和

@checksum它是php -i | grep Architecture
帮助

22

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

  • * nix:

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

    php -i | findstr -i "thread"

这应该给你这样的东西:

Thread Safety => enabled

要么

Thread Safety => disabled

这不是一个很好的主意,因为服务器使用的PHP版本可能不同于操作系统选择的PHP版本(默认)。
水牛城

4

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

<?php
phpinfo(); ?>

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


4

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


4

然后是一个未记录的ZEND_THREAD_SAFE常量,自PHP 4.3以来似乎已经存在。

<?php

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

https://3v4l.org/tALKX


1

检查您的安装是Apache Module还是CGI Binary。请参阅堆栈溢出问题。PHP中的线程安全或非线程安全是什么?


我该如何检查?当然它被IIS使用。.但是我如何找出它是什么模块呢?那是我的问题...我不是要问线程安全/非线程安全之间的区别。我需要知道安装的版本是否是线程安全的
乔什(Josh)

好吧,我只是进行了一些调查,是的,有2个版本可用;安全和不安全。根据此IIS7安装指南,建议非线程安全安装。您能否打开phpinfo()并检查“线程”一词是否在任何地方出现?
Phliplip 2011年

是的,phpinfo中有信息...刚刚找到了...谢谢@Philiplip
Josh

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()));
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.