55 Stimmen

Prüfen, ob Ihr Code auf 64-Bit-PHP läuft

Kennt jemand eine Möglichkeit, innerhalb von PHP zu überprüfen, ob das Skript als 32-Bit oder 64-Bit ausgeführt wird? Ich verwende derzeit PHP 5.3.5.

Idealerweise würde ich gerne eine Funktion schreiben, damit mein Code wie folgt aussieht:

if( is_32bit() === true ) {
    do_32bit_workaround();
}
do_everything_else();

Hat jemand eine Idee?

1 Stimmen

Es scheint, dass diese Frage hier beantwortet wird: stackoverflow.com/questions/2353473/

106voto

coreyward Punkte 72986

Prüfen Sie die PHP_INT_SIZE konstant. Sie hängt von der Größe des Registers ab (z. B. 32-Bit gegenüber 64-Bit).

Bei 32-Bit-Systemen PHP_INT_SIZE sollte sein 4 für 64-Bit sollte es sein 8 .

Siehe http://php.net/manual/language.types.integer.php für weitere Einzelheiten.

14voto

naT erraT Punkte 403

Hier ist ein Beispiel, das von der Konsole aus verwendet werden kann

Für Windows:

php -r "echo (PHP_INT_SIZE == 4 ? '32 bit' : '64 bit').PHP_EOL;" && php -i | findstr Thread

Für Linux

php -r "echo (PHP_INT_SIZE == 4 ? '32 bit' : '64 bit').PHP_EOL;" && php -i | grep Thread

Beispiel für die Ausgabe:

64 bit
Thread Safety => disabled

13voto

Tim Penner Punkte 3503

Sie könnten eine Funktion wie diese schreiben:

function is_32bit(){
  return PHP_INT_SIZE === 4;
}

Dann könnten Sie den von Ihnen geposteten Beispielcode verwenden:

if ( is_32bit() ) {
    do_32bit_workaround();
} else {
    do_everything_else();
}

8voto

Chris0 Punkte 456

Ein kurzer Weg, um die Anzahl der Bits zu erhalten.

    strlen(decbin(~0));

Wie das funktioniert:

Der bitweise Komplementoperator, die Tilde, ~ , dreht jedes Bit um.

@see http://php.net/manual/en/language.operators.bitwise.php

Die Verwendung dieser auf 0 schaltet jedes Bit für eine ganze Zahl ein.

Damit erhalten Sie die größte Zahl, die Ihre PHP-Installation verarbeiten kann.

Mit decbin() erhalten Sie dann die binäre Darstellung dieser Zahl als String

@see http://php.net/manual/en/function.decbin.php

und strlen geben die Anzahl der Bits an.

Hier ist sie in einer brauchbaren Funktion

function is32Bits() {
    return strlen(decbin(~0)) == 32;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X