Найдите, является ли установленный PHP потокобезопасным или нет?
Как узнать, является ли установленная версия PHP потокобезопасной или нет?
Пожалуйста, обратите внимание, что я не спрашиваю о разнице между потокобезопасной/не потокобезопасной установкой. Я хотел бы узнать, что установлено в настоящее время.
7 answers
Откройте phpinfo() и найдите строку Потокобезопасность. Для потокобезопасной сборки вы должны найти включить.
Как указано в комментариях Мухаммеда Гелбаны, вы также можете использовать:
- В Windows:
php -i|findstr "Thread"
- На *nix:
php -i|grep Thread
Если вы предпочитаете использовать командную строку:
-
*никс:
php -i | grep -i "Thread"
-
Окна:
php -i | findstr -i "thread"
Это должно дать вам что-то вроде этого:
Thread Safety => enabled
Или
Thread Safety => disabled
Создайте новый PHP-файл и вставьте в него этот код:
<?php
phpinfo(); ?>
Затем запустите эту страницу, и вы найдете всю информацию о PHP. Найдите нужный термин, и он покажет вам, что он включен.
Мне просто проще взглянуть на файл с именем php[версия].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';
}
Проверьте, является ли ваша установка модулем Apache или двоичным файлом CGI. См. Раздел Вопрос о переполнении стека Что такое потокобезопасный или не потокобезопасный в PHP?.