Найдите, является ли установленный PHP потокобезопасным или нет?


Как узнать, является ли установленная версия PHP потокобезопасной или нет?

обратите внимание, что я не спрашиваю разницу между потокобезопасной/не потокобезопасной установкой. Я хотел бы узнать, что установлено в настоящее время.

7 63

7 ответов:

откройте phpinfo () и найдите строку потокобезопасность. Для потокобезопасной сборки вы должны найти включить.

Как указано в комментарии Мухаммад Gelbana вы также можете использовать:

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

если вы предпочитаете использовать командную строку:

  • * nix:

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

    php -i | findstr -i "thread"
    

это должно дать вам что-то вроде этого:

Thread Safety => enabled

или

Thread Safety => disabled

создайте новый PHP файл и вставьте в него этот код:

<?php
phpinfo(); ?>

затем запустите эту страницу, и вы найдете всю информацию PHP. Найдите нужный термин, и он покажет вам, что он включен.

Мне просто легче смотреть на файл с именем php[version].dll в корневой папке php. Его либо php[версия].dll или php [версия]ts.dll (ts, стоящий для потокобезопасности). Итак, если у вас установлен php7.0.10, перейдите в каталог с этим именем, и вы найдете файл с именем php7ts.файл DLL. Это очень печальный способ узнать, но он работает!

сценарий:

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

тогда есть недокументированные ZEND_THREAD_SAFE константа, которая, кажется, существует с PHP 4.3.

<?php

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

https://3v4l.org/tALKX

проверьте, является ли ваша установка Apache Module или CGI Binary. См. раздел вопрос переполнения стека что является потокобезопасным или не потокобезопасным в PHP?.