Finden Sie heraus, ob das installierte PHP threadsicher oder nicht threadsicher ist?

90

Wie finde ich heraus, ob die installierte Version von PHP threadsicher ist oder nicht threadsicher?

Bitte beachten Sie, dass ich nicht nach dem Unterschied zwischen einer threadsicheren und einer nicht threadsicheren Installation frage. Ich möchte herausfinden, was aktuell installiert ist.

Josh
quelle
1
Siehe Antwort in stackoverflow.com/questions/1623914/…
Haim Evgi
1
@Haim Das ist nicht meine Frage Haim. Ich habe diesen Faden gesehen. Ich habe PHP bereits auf diesem Server installiert. Es funktioniert mit IIS. Aber ich muss herausfinden, welches Setup verwendet wurde, um dieses ... Threadsafe-Setup / das nicht theadsafe-Setup zu installieren?
Josh

Antworten:

165

Öffnen Sie eine phpinfo () und suchen Sie nach der Zeile Thread-Sicherheit . Für einen thread-sicheren Build sollten Sie enable finden .

Wie in den Kommentaren von Muhammad Gelbana angegeben , können Sie auch Folgendes verwenden:

  • Unter Windows: php -i|findstr "Thread"
  • On * nix: php -i|grep Thread
grunk
quelle
15
Unter Windows: php -i|find "Thread"Unter * nix:php -i|grep Thread
Muhammad Gelbana
7
Hinweis für sich selbst: um php -i | find "Architecture"zu überprüfen, ob es x86 oder x64 ist
Prüfsumme
@checksum es istphp -i | grep Architecture
Helpse
22

Wenn Sie die Befehlszeile bevorzugen:

  • * nix:

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

    php -i | findstr -i "thread"

Dies sollte Ihnen ungefähr so ​​etwas geben:

Thread Safety => enabled

oder

Thread Safety => disabled
Matt
quelle
Keine sehr gute Idee, da sich die vom Server verwendete PHP-Version von der vom Betriebssystem verwendeten unterscheiden kann (Standardeinstellung).
Buffalo
4

Erstellen Sie eine neue PHP-Datei und fügen Sie diesen Code ein:

<?php
phpinfo(); ?>

Führen Sie dann diese Seite aus und Sie finden alle PHP-Informationen. Suchen Sie nach dem gewünschten Begriff, und es wird angezeigt, dass er aktiviert ist.

Peroxid
quelle
4

Ich finde es einfach einfacher, die Datei mit dem Namen php [version] .dll im Stammordner von php zu betrachten. Es ist entweder php [version] .dll oder php [version] ts.dll (ts steht für Thread Safe). Wenn Sie also php7.0.10 installiert haben, gehen Sie in das Verzeichnis mit diesem Namen und Sie finden eine Datei mit dem Namen php7ts.dll. Dies ist eine sehr traurige Art, es herauszufinden, aber es funktioniert!

Flemin Adambukulam
quelle
4

Dann gibt es die undokumentierte ZEND_THREAD_SAFEKonstante, die seit PHP 4.3 zu existieren scheint.

<?php

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

https://3v4l.org/tALKX

ShiraNai7
quelle
1

Überprüfen Sie, ob Ihre Installation Apache Module oder CGI Binary ist. Siehe Frage zum Stapelüberlauf Was ist threadsicher oder nicht threadsicher in PHP? .

Phliplip
quelle
Wie überprüfe ich das? Natürlich wird es von IIS verwendet. Aber wie finde ich heraus, um welches Modul es sich handelt? Das war meine Frage ... Ich möchte nicht den Unterschied zwischen threadsicher und nicht threadsicher stellen. Ich muss wissen, ob die installierte Version threadsicher ist / nicht
Josh
Ok, ich habe nur ein bisschen nachgeforscht und ja, es sind 2 Builds verfügbar. sicher und nicht sicher. Gemäß dieser Installationsanleitung für IIS7 werden nicht threadsichere Installationen empfohlen. Könnten Sie eine phpinfo () öffnen und sehen, ob das Wort 'thread' irgendwo auftaucht?
Phliplip
Ja, Phpinfo hatte die Informationen drin ... Ich habe sie gerade gefunden ... Danke @Philiplip
Josh
1

Aus einem Skript:

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