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

91

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

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

Джош
источник
1
см. ответ в stackoverflow.com/questions/1623914/…
Haim Evgi
1
@ Хаим Это не мой вопрос, Хаим. Я видел эту ветку. У меня уже установлен PHP на этом сервере. Его работа с IIS. Но мне нужно выяснить, какая установка использовалась для установки этого ... Установка Threadsafe / установка non theadsafe?
Джош

Ответы:

167

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

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

  • В Windows: php -i|findstr "Thread"
  • На * nix: php -i|grep Thread
ворчание
источник
15
В Windows: php -i|find "Thread"On * nix:php -i|grep Thread
Мухаммад Гелбана
7
Примечание для себя: php -i | find "Architecture"проверить, x86 или x64
контрольная сумма
@checksum этоphp -i | grep Architecture
helpse
22

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

  • * nix:

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

    php -i | findstr -i "thread"
    

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

Thread Safety => enabled

или

Thread Safety => disabled
Мэтт
источник
1
Не очень хорошая идея, поскольку версия PHP, используемая сервером, может отличаться от версии, выбранной ОС (по умолчанию).
Buffalo
4

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

<?php
phpinfo(); ?>

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

перекись
источник
4

Мне просто проще посмотреть файл с именем php [version] .dll в корневой папке php. Это либо php [версия] .dll, либо php [версия] ts.dll (ts означает Thread Safe). Итак, если у вас установлен 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

ShiraNai7
источник
2

Проверьте, какой у вас установлен: модуль Apache или двоичный файл CGI. См. Вопрос о переполнении стека. Что такое потокобезопасность или небезопасность в PHP? .

Phliplip
источник
Как мне это проверить? Конечно, он используется IIS .. Но как мне узнать, что это за модуль? Это был мой вопрос ... Я не хочу спрашивать разницу между потокобезопасным и небезопасным потоком. Мне нужно знать, является ли установленная версия потокобезопасной или нет
Джош
Хорошо, я немного исследовал, и да, доступны 2 сборки ; безопасно и небезопасно. Согласно этому руководству по установке для IIS7 рекомендуются небезопасные для потоков установки. Не могли бы вы открыть phpinfo () и посмотреть, если где-нибудь встречается слово «поток»?
Phliplip
да, у phpinfo была информация ... Только что нашел ... Спасибо @Philiplip
Джош
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()));
}
Элвис Чиотти
источник