Dowiedz się, czy zainstalowany PHP jest bezpieczny wątkowo czy nie jest bezpieczny?

91

Jak sprawdzić, czy zainstalowana wersja PHP jest wątkowo bezpieczna, czy nie?

Zwróć uwagę, że nie pytam o różnicę między instalacją bezpieczną dla wątków / bez wątku. Chciałbym się dowiedzieć, co jest aktualnie zainstalowane.

Josh
źródło
1
zobacz odpowiedź na stackoverflow.com/questions/1623914/…
Haim Evgi
1
@Haim Thats not my question Haim. Widziałem ten wątek. Mam już PHP zainstalowane na tym serwerze. Działa z usługami IIS. Ale muszę dowiedzieć się, która konfiguracja została użyta do zainstalowania tego ... Konfiguracja Threadsafe / Konfiguracja inna niż theadsafe?
Josh

Odpowiedzi:

167

Otwórz phpinfo () i wyszukaj wiersz Bezpieczeństwo wątków . Aby uzyskać bezpieczną wątkowo kompilację, należy znaleźć opcję enable .

Jak określono w komentarzach Muhammada Gelbany , możesz również użyć:

  • W systemie Windows: php -i|findstr "Thread"
  • W * nix: php -i|grep Thread
grunk
źródło
15
W systemie Windows: php -i|find "Thread"On * nix:php -i|grep Thread
Muhammad Gelbana
7
Uwaga dla siebie: php -i | find "Architecture"aby sprawdzić, czy jest to x86 czy x64
suma kontrolna
@checksum It'sphp -i | grep Architecture
helpse
22

Jeśli wolisz używać wiersza poleceń:

  • *nic:

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

    php -i | findstr -i "thread"
    

To powinno dać ci coś takiego:

Thread Safety => enabled

lub

Thread Safety => disabled
Matt
źródło
1
Niezbyt dobry pomysł, ponieważ wersja PHP używana przez serwer może różnić się od tej odebranej przez system operacyjny (domyślna).
Buffalo
4

Utwórz nowy plik PHP i wstaw do niego ten kod:

<?php
phpinfo(); ?>

Następnie uruchom tę stronę, a znajdziesz wszystkie informacje o PHP. Wyszukaj żądany termin, a pokaże, że jest włączony.

nadtlenek
źródło
4

Po prostu łatwiej mi przyjrzeć się plikowi o nazwie php [wersja] .dll w głównym folderze php. Jest to php [wersja] .dll lub php [wersja] ts.dll (ts oznacza Thread Safe). Tak więc, jeśli masz zainstalowane php7.0.10, przejdź do katalogu o tej nazwie, a znajdziesz plik o nazwie php7ts.dll. To bardzo smutny sposób na sprawdzenie tego, ale działa!

Flemin Adambukulam
źródło
4

Jest też nieudokumentowana ZEND_THREAD_SAFEstała, która wydaje się istnieć od PHP 4.3.

<?php

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

https://3v4l.org/tALKX

ShiraNai7
źródło
2

Sprawdź, czy Twoja instalacja to Apache Module czy CGI Binary. Zobacz pytanie dotyczące przepełnienia stosu Co jest bezpieczne dla wątków lub nie jest bezpieczne w PHP? .

Phliplip
źródło
Jak to sprawdzić? Oczywiście jest używany przez IIS, ale jak mogę się dowiedzieć, jaki to moduł? To było moje pytanie ... Nie chcę pytać o różnicę między bezpiecznymi wątkami / bez wątków. Muszę wiedzieć, czy zainstalowana wersja jest bezpieczna
Josh
Ok, właśnie trochę zbadałem i tak, są dostępne 2 wersje ; bezpieczne i niebezpieczne. Zgodnie z tym przewodnikiem instalacji dla instalacji usług IIS7 niegwintowanych są zalecane. Czy możesz otworzyć phpinfo () i sprawdzić, czy słowo „wątek” pojawia się gdzieś?
Phliplip
tak, phpinfo zawierało informacje ... Właśnie je znalazłem ... Dzięki @Philiplip
Josh
1

Ze skryptu:

/**
 * @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
źródło