Peut PHP dire si le serveur os est en 64 bits?
Je fais affaire avec Windows ici.
Je sais que vous pouvez utiliser le $_SERVER['HTTP_USER_AGENT']
variable pour détecter le système d'exploitation du navigateur, l'affichage de la page, mais est de toute façon que PHP peut détecter le serveur de l'OS?
Pour mon INTERFACE utilisateur du programme, je suis en utilisant une page web PHP. J'ai besoin de lire une clé dans le registre qui se trouve dans un emplacement différent sur un OS 64 bits (C'est en vertu de la Wow6432Node
Clé).
Pouvez PHP dire quel OS il est en cours d'exécution sur? Peut PHP dire si l'OS est en 64-bits ou 32 bits?
- Il pourrait être plus facile de simplement essayer de le Wow6432Node touche d'abord et puis aller pour la normale 32 bits de la clé si elle n'existe pas.
- Avez-vous eu un coup d'oeil à
$_ENV
?
Vous devez vous connecter pour publier un commentaire.
Remarque: Cette solution est un peu moins pratique et plus lent que @Salman Une réponse. Je vous conseille d'utiliser sa solution, et vérifier
PHP_INT_SIZE == 8
pour voir si vous êtes sur un os 64 bits.Si vous voulez juste pour répondre à la 32bit/64bit question, un peu sournois fonction comme ceci ferait l'affaire (en prenant avantage de la intval fonction de la manière de gérer les services de renseignements basés sur les architectures 32 et 64 bits.)
Vous pouvez voir le code en action ici: http://ideone.com/JWKIf
Note: Si l'OS est en 64 bits, mais exécute une version 32 bits de php, la fonction retournera false (32 bits)...
Pour vérifier la taille de l'entier (4/8 octets) vous pouvez utiliser le
PHP_INT_SIZE
constante. SiPHP_INT_SIZE===8
alors vous avez une version 64 bits de PHP.PHP_INT_SIZE===4
implique qu'une version 32 bits de PHP est utilisé, mais il ne signifie pas que le système d'exploitation et/ou le Processeur est un 32 bits.Sur Windows+IIS il y a un
$_SERVER["PROCESSOR_ARCHITECTURE"]
variable qui contientx86
lors d'un essai sur mon système (windows xp-32 bits). Je pense qu'il va contenirx64
lors de l'exécution sur un OS 64 bits.PHP_INT_SIZE===4
. Je pense que Windows les limites de cette. Vérifier Chris0 réponse à un moyen plus sûr de le détecter.Un peu plus courte et plus robuste pour obtenir le nombre de bits.
Comment cela fonctionne:
Le bit à bit opérateur de complément, le tilde, ~, renverse tous les bits.
@voir http://php.net/manual/en/language.operators.bitwise.php
À l'aide de ce sur 0 commutateurs sur chaque bit d'un entier.
Cela vous donne le plus grand nombre que PHP installer peut gérer.
Puis à l'aide de decbin() vous donnera une représentation de chaîne de ce nombre dans sa forme binaire
@voir http://php.net/manual/en/function.decbin.php
et strlen vous donnera le nombre de bits.
Ici est-il utilisable fonction
Essayez d'utiliser le php_uname fonction...
Source - Déterminer Le Système D'Exploitation http://www.sitepoint.com/forums/showthread.php?t=510565
Une autre méthode consiste à utiliser...
Retourne la chaîne de caractères suivante sur mon ibm t400 sous Win 7 (64 bits)...
Malheureusement, son retour WIN32 parce que je suis sous la version 32 bits de apache.
Vous pouvez obtenir générales du processeur d'informations (sur un *nix serveur), à l'aide de la cmd...
Vous aurez probablement besoin d'utiliser une combinaison de ces méthodes si vous comptez sur l'appui de nombreux différents Systèmes d'exploitation.
system()
et en s'appuyant sur la mise en page de/proc
. Deux de mes choses préférées.J'ai eu de la chance avec le décalage de bits, et profitant boolean casting.
Ou de l'utilisation de PHP COM pour appeler wmi
vous pouvez utiliser un script de sortie, le type de système d'exploitation
ici , il est un exemple de la façon d'obtenir cette information à l'aide de WMI.
Vous pouvez appeler ce script à l'aide de
exec
et de lire la sortie.Un peu de retard de réponse, mais si vous voulez juste pour déterminer la taille de mot, vous pouvez utiliser ceci:
(log(PHP_INT_MAX + 1, 2) + 1)
si vous avez la
COM
extension installée (en php.ini) vous pouvez appeler le service WMI de windows.Pour vérifier l'OS:
ou, vérifier le processeur physique:
Pas besoin de faire de calculs. Il suffit de cocher la PHP_INT_SIZE constante:
La taille des nombres entiers est un bon indicateur, mais pas à l'épreuve des balles. Quelqu'un pourrait exécutez une version 32 bits de l'application sur un système 64 bits.
$_SERVER['SERVER_SOFTWARE'] et $_SERVER['SERVER_SIGNATURE'] peut vous dire quelque chose d'utile, en fonction de la mise en œuvre du serveur.
Ici est une solution en ligne pour déterminer si PHP est en cours d'exécution en 64 bits ou 32 bits mode:
Après exécution de la ligne de code ci-dessus la
$php64bit
variable sera réglé soittrue
oufalse
À la recherche dans tous les de ce les réponses et quelques autres solutions + mon idée de "demander à l'ordinateur directement" je reçois cette solution universelle:
Est testé sur diverses machines, et pour l'instant j'ai des résultats positifs. N'hésitez pas à utiliser si vous voyez n'importe quel but.