Mit PHP 32bit/64bit auslesen?

josDesign

Erfahrenes Mitglied
Hallo liebe Gemeinde,

ich frage mich ob es eine Möglichkeit gibt in PHP um vom Webserver herauszufinden ob dieser ein 32bit OS oder ein 64bit OS laufen hat.
Die Kernelinformation spuckt manchesmal aus das dieser auf 64bit ist je nach Linux-Distri.

Hat evtl. jemand einen Tipp für mich? Mit bestem Dank im Voraus,
jos
 
Nein. PHP ist an den Apache gebunden und dieser kann auch auf einem 64bit System als 32bit Applikation laufen, d. h. deine Informationen wären extrem fehleranfällig.

Die einzige Möglichkeit wäre per [phpf]exec[/phpf] externe Skripte anzustoßen, die dir diese Antwort geben.
 
Nachtrag: Mit der PHP-Funktion pack() müsste man auch zur Laufzeit herausfinden können, ob man sich auf einem 32 oder 64 bit System befindet.
PHP:
echo (strlen(pack('i', 1)) * 8);
 
Falls Du die noetigen Rechte haste kannst Du einfach ein beliebiges Binary oeffnen (z.B. /bin/bash) und die ersten, ich glaube 5, Bytes auslesen.
32 Bit Binaries fangen so an (Hex-Werte):
7F 45 4C 46 01 01 01

64 Bit so (kann's grad nicht genau nachpruefen da ich hier grad kein 64-Bit Geraet zur Hand habe, sollte aber richtig sein):
7F 45 4C 46 02 01 01

Entsprechend hast Du in Byte 5 Deinen Marker fuer die Unterscheidung.

Natuerlich koennte auch ein 32 Bit Binary auf einem 64 Bit OS installiert sein, ist aber doch eher unwahrscheinlich.

Ansonsten koenntest Du auch file nutzen um ein Binary zu identifizieren.

Bash:
[dennis@cyberdemon ~]$ file /bin/bash
/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

Der Unterschied hier ist dass Du ein externes Programm ausfuehrst und dessen Ausgabe auswertest. Persoenlich ist mir der andere Weg auf jedem Fall lieber, vor allem da keine externen Programme ausgefuehrt werden muessen. Zum einen geht das nicht immer, und schoen ist es schon garnicht.
 
@Felix Jacobi
Soweit ich weiss ist pack() abhängig vom Betriebssystem, man kann damit schließlich auch herausfinden, ob der Computer Low-Endian oder Big-Endian verwendet, diese Information müsste vom Betriebssystem kommen.

Zitat von php.net/pack (aus der Tabelle)
i - vorzeichenbehaftete Ganzzahl (Größe und Byte-Folge maschinenabhängig)
 
@bloddy newbie:
Das ist ja die generelle Frage....bezieht sich "System" auf PHP oder auf das OS.
Also: was macht ein 32bit-PHP auf einem 64bit-OS ? :confused:
 
Zurück