Les plats clés
- Le registre de Windows, une base de données structurée hiérarchiquement des informations de configuration, est accessible avec PHP à l'aide de l'extension Win32STD, qui peut être téléchargée en tant que bibliothèque pré-compilée à partir de téléchargements.php.net/pierre /.
- Le registre de Windows est divisé en cinq groupes principaux appelés clés: hkey_current_config, hkey_local_machine, hkey_users, hkey_classes_root et hkey_current_user. Chaque clé contient des sous-clés qui à leur tour contiennent d'autres sous-clés, valeurs de configuration ou les deux.
- La fonction reg_open_key () ouvre une connexion au registre et renvoie une ressource, qui peut être utilisée avec d'autres fonctions de registre pour agir sur cette connexion. La fonction reg_close_key () ferme la connexion. La fonction reg_set_value () est utilisée pour écrire une valeur dans le registre, écraser les valeurs existantes ou en créer de nouveaux.
- Le registre Windows peut être utilisé pour des applications pratiques telles que le stockage des informations de configuration pour les applications Web, le stockage des données d'application et les préférences des utilisateurs pour les applications de bureau ou la vérification de la présence d'appareils matériels comme un dongle USB. Cependant, la modification du registre doit être effectuée avec prudence car elle peut affecter le fonctionnement du système.
Vous êtes-vous déjà réveillé le matin et vous avez pensé: «Je veux faire quelque chose de fou aujourd'hui?» Eh bien, si aujourd'hui était l'un de ces matins, vous avez de la chance. Je voudrais vous donner une petite introduction sur l'accès au registre Windows à l'aide de PHP. PHP… le registre… fou!
Le registre Windows est simplement une base de données structurée hiérarchique dans laquelle le système d'exploitation Windows et d'autres applications stockent des informations de configuration importantes. Toutes sortes de données sont stockées dans le registre: profils utilisateur, associations de type fichier, informations matérielles, numéros de série, etc. Avec des fonctions disponibles à partir de l'extension Win32STD, vos applications PHP basées sur Windows peuvent également accéder au registre.
L'extension Win32STD peut être téléchargée en tant que bibliothèque pré-compilée à partir de téléchargements.php.net/pierre/. Déposez-le simplement dans le dossier EXT de votre PHP, mettez à jour votre fichier php.ini et redémarrez Apache si nécessaire. Notez qu'à l'heure actuelle, les DLL que vous téléchargez sont 32 bits, donc si vous utilisez une version 64 bits de Wampserver ou, vous n'aurez pas beaucoup de succès. Vous devrez soit rétrograder Wampserver vers une version 32 bits ou essayer de compiler la bibliothèque vous-même.
La disposition du registre
Le registre a la réputation d'être un endroit sombre, dangereux et effrayant dans le système d'exploitation Windows. C'est probablement une peur trop exagérée, mais je vais quand même réitérer le mantra de registre de Microsoft: «Avant de modifier le registre, sauvegardez-le et assurez-vous de comprendre comment le restaurer si un problème se produit. Des changements inappropriés pourraient causer de graves problèmes qui peuvent vous obliger à réinstaller votre système d'exploitation. »
Alors, à quoi ressemble cet endroit sombre et effrayant? Le registre Windows est divisé en 5 groupes principaux appelés clés:
hkey_current_config
Cette clé stocke les informations sur le matériel de l'ordinateur telles que la résolution du moniteur et les paramètres de haut-parleur. Vous pouvez voir cette clé abrégée comme HKCC.
hkey_local_machine
Cette clé contient des informations de configuration pour la machine telles que les imprimantes, les logiciels et les informations de réseautage. La clé est chargée en premier, puis les entrées du profil de l'utilisateur remplacent diverses valeurs. Vous verrez cette clé abrégée comme HKLM.
hkey_users
Cette clé contient tous les profils pour les comptes d'utilisateurs locaux sur la machine. Des éléments tels que la sélection de l'économiseur d'écran de l'utilisateur, les informations sur le thème et d'autres préférences sont stockés ici. Cette clé est abrégée en HKU.
hkey_classes_root
Cette clé est un alias pointant vers HKEY_LOCAL_MACHINESOFTware qui stocke des informations sur les associations de fichiers et les types de mime. L'abréviation est HKCR.
hkey_current_user Cette clé est un alias pointant vers le profil de Hkey_users pour l'utilisateur actuellement connecté. Vous verrez cette clé abrégée comme HKCU.
Chaque clé contient des sous-clés qui à leur tour contiennent d'autres sous-clés, valeurs de configuration ou les deux.
Travailler sous hkey_current_user est suffisant pour jouer avec quelques scripts CLI et un bac à sable. Utilisez uniquement HKEY_LOCAL_MACHINE pour les données d'application à l'échelle du système et les situations où vous êtes à l'aise de travailler avec les autorisations de sécurité de Microsoft. Comprenez ce qui est bon pour votre situation, sachez en vertu de quel compte PHP exécute et créez vos clés de manière appropriée.
Faire un bac à sable
Je recommande de mettre en place une clé spéciale pour une utilisation dans vos scripts par souci de sécurité, surtout lorsque vous développez. Erch est humain et nous ne voulons pas écraser accidentellement quoi que ce soit d'important. L'organisation est une autre raison de mettre en place une clé désignée. Il y a beaucoup d'informations stockées dans le registre et nous voulons être en mesure de localiser facilement nos propres valeurs.
L'éditeur de registre est un programme Microsoft utilisé pour afficher et modifier le registre. Pour créer notre bac à sable, allez pour démarrer, tapez «regedit» dans la barre de recherche et sélectionnez regedit.exe dans la liste des résultats qui apparaît.
Le volet gauche montre une structure d'arbre des touches existantes tandis que le volet droit montre des valeurs stockées en eux. Développez le nœud HKEY_CURRENT_USER, cliquez avec le bouton droit sur la touche logicielle et sélectionnez NOUVEAU> Clé dans le menu contextuel popup. Alternativement, nous aurions pu également traverser l'arbre à l'aide des touches fléchées afin que la touche logicielle soit mise en évidence et sélectionnez la nouvelle touche> dans le menu Edit. Fournissez un nom pour la touche et appuyez sur Entrée.
Maintenant que nous avons un endroit pour jouer, permettez-moi de vous présenter les fonctions que Win32STD propose de manipuler les entrées de registre.
Lecture du registre
La fonction reg_open_key () ouvre une connexion au registre et renvoie une ressource. Cette ressource est ensuite utilisée avec d'autres fonctions de registre pour agir sur cette connexion. La fonction reg_close_key () ferme la connexion.
reg_open_key () prend deux arguments: d'abord une constante prédéfinie représentant l'un des cinq groupes de registre principaux, puis le reste du chemin vers la clé souhaitée.
<span><span><?php
</span></span><span><span>$keyConst = HKEY_CURRENT_USER;
</span></span><span>
</span><span><span>// backslash is used as an escape so it must be escaped itself
</span></span><span><span>$key = "Software\Intel";
</span></span><span>
</span><span><span>// open the registry key HKCUSoftwareIntel
</span></span><span><span>if (!($reg = @reg_open_key($keyConst, $key))) {
</span></span><span> <span>throw new Exception("Cannot access registry.");
</span></span><span><span>}
</span></span><span><span>...
</span></span><span>
</span><span><span>reg_close_key($reg);</span></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Maintenant que vous avez une connexion ouverte, vous pouvez récupérer des informations du registre à l'aide des fonctions reg_enum_key (), reg_enum_value () et reg_get_value ().
Si juste la ressource est transmise à reg_enum_key (), elle renverra un tableau de sous-clés sous la clé actuelle. Une valeur entière peut également être transmise pour récupérer la sous-clé à un index particulier.
<span><span><?php
</span></span><span><span>// retrieve an array of subkeys under the current key
</span></span><span><span>$subkeys = reg_enum_key($reg);
</span></span><span><span>foreach ($subkeys as $index => $subkey) {
</span></span><span> <span>echo "The subkey at " . $index . " is " . $subkey . "n";
</span></span><span><span>}
</span></span><span>
</span><span><span>// retrieve a specific subkey
</span></span><span><span>$index = 2;
</span></span><span><span>$subkey = reg_enum_key($reg, $index);
</span></span><span><span>echo "The subkey at " . $index . " is " . $subkey . "n";</span></span>
Copier après la connexion
Comme reg_enum_key () renvoie les clés, reg_enum_value () renvoie les valeurs des clés. La fonction accepte la ressource et un index facultatif. Le nom de valeur peut être transmis à reg_get_value () pour récupérer la valeur de la valeur (n'est pas une bouchée!).
<span><span><?php
</span></span><span><span>// retrieve an array of values under a given key
</span></span><span><span>$values = reg_enum_value($reg);
</span></span><span><span>foreach ($values as $index => $value) {
</span></span><span> <span>echo "The value at " . $index . " is " . $value . " and stores ";
</span></span><span> <span>echo reg_get_value($reg, $value) . "n";
</span></span><span><span>}
</span></span><span>
</span><span><span>// retrieve a specific value given the index
</span></span><span><span>$index = 1;
</span></span><span><span>$value = reg_enum_value($reg, $index);
</span></span><span><span>echo "The value at " . $index . " is " . $value . " and stores ";
</span></span><span><span>echo reg_get_value($reg, $value) . "n";</span></span>
Copier après la connexion
Écriture dans le registre
Il existe une poignée de types de données parmi lesquels vous pouvez choisir lors de la lecture et de l'écriture au registre. Ils ont généralement peu de conséquences en raison de la nature dynamique de PHP, mais vous devez spécifier le type lorsque vous écrivez une valeur. La plupart du temps, vous vous retrouverez à utiliser Reg_sz ou Reg_dword, mais voici une liste des types de données exposés par l'extension:
- reg_dword - La valeur est stockée sous forme de long entier de 32 bits
- reg_sz - la valeur est stockée sous forme de chaîne de longueur fixe
- reg_expand_sz - la valeur est stockée en tant que chaîne de longueur variable
- reg_multi_sz - La valeur est une liste d'éléments séparés par un délimiteur tel qu'un espace ou une virgule
- reg_binary - la valeur est une chaîne binaire
- reg_none - la valeur n'a pas de type de données particulier qui y est associé
La fonction reg_set_value () est utilisée pour écrire une valeur au registre. Si la valeur existe déjà, la nouvelle valeur la remplacera, mais si elle n'existe pas, elle le créera. La fonction prend quatre arguments: d'abord la ressource ouverte, puis le nom de la valeur, puis une constante prédéfinie représentant le type de données de la valeur et enfin les données elle-même.
<span><span><?php
</span></span><span><span>$keyConst = HKEY_CURRENT_USER;
</span></span><span>
</span><span><span>// backslash is used as an escape so it must be escaped itself
</span></span><span><span>$key = "Software\Intel";
</span></span><span>
</span><span><span>// open the registry key HKCUSoftwareIntel
</span></span><span><span>if (!($reg = @reg_open_key($keyConst, $key))) {
</span></span><span> <span>throw new Exception("Cannot access registry.");
</span></span><span><span>}
</span></span><span><span>...
</span></span><span>
</span><span><span>reg_close_key($reg);</span></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
un exemple - dongle de conduite USB
Vous vous demandez peut-être s'il y a une utilisation pratique pour travailler avec le registre. Dans une application Web, vous pouvez stocker vos informations de configuration dans le registre. Si vous avez écrit une application de bureau, le registre pourrait être un bon endroit pour stocker toutes sortes d'informations, des données d'application aux préférences des utilisateurs. Windows lui-même écrit toutes sortes de matériel intéressant et d'informations liées à l'état au registre, et une partie pourrait être utile si vous êtes assez créatif.
Supposons que notre application PHP ait été licenciée de telle manière qu'un dongle USB doit être attaché au serveur pour l'exécuter. Comment PHP peut-il détecter la présence du dongle? La réponse sur Windows réside dans le registre! Chaque appareil a un identifiant unique, et le script peut donc rechercher les touches appropriées pour l'identifiant lorsqu'il démarre pour déterminer si le dongle est branché ou non.
La première étape consiste à déterminer l'identifiant de l'appareil. Pour cet exemple, j'utiliserai un coffre de marchandises. Branchez simplement le lecteur sur un port USB sur l'ordinateur, puis allez pour démarrer, tapez «périphérique» dans la barre de recherche et sélectionnez le gestionnaire de périphériques dans la liste des résultats qui apparaît.
Recherchez l'appareil dans Device Manager, cliquez avec le bouton droit sur l'entrée et sélectionnez Propriétés dans le menu contextuel. Ensuite, accédez à l'onglet Détails de la fenêtre Propriétés et sélectionnez «Chemin d'instance de périphérique» dans la liste déroulante. La séquence des nombres hexadécimaux vers la fin de la valeur est l'ID de dispositif (marqué en rouge).
Windows enregistre la présence de périphériques USB sous diverses sous-clés de HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices. Les supports de stockage comme mon thumbdrive apparaîtront sous USBStor; D'autres appareils peuvent apparaître sous USBAUDIO, USBCCGP et USBEHCI. Notez également que HKEY_LOCAL_MACHINE ne sera accessible que des comptes privilégiés.
Alors maintenant, nous pouvons simplement rechercher le sous-clés de la clé pour l'instance de l'appareil. Lorsque le lecteur est joint, il sera répertorié, et lorsqu'il n'est pas joint, il ne sera pas répertorié.
<span><span><?php
</span></span><span><span>$keyConst = HKEY_CURRENT_USER;
</span></span><span>
</span><span><span>// backslash is used as an escape so it must be escaped itself
</span></span><span><span>$key = "Software\Intel";
</span></span><span>
</span><span><span>// open the registry key HKCUSoftwareIntel
</span></span><span><span>if (!($reg = @reg_open_key($keyConst, $key))) {
</span></span><span> <span>throw new Exception("Cannot access registry.");
</span></span><span><span>}
</span></span><span><span>...
</span></span><span>
</span><span><span>reg_close_key($reg);</span></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Ce simple contrôle ouvre également d'autres possibilités intéressantes; Vous pouvez facilement coder une interface d'administration sensible qui vérifie le dongle et la demande est envoyée à partir du serveur lui-même en vérifiant $ _Server ["Remote_Addr"]. Cette configuration nécessiterait que l'utilisateur soit physiquement sur le serveur désigné
et fournir une forme d'authentification physique.
en conclusion
Tout au long de cet article, nous avons vu ce qu'est le registre Windows et un petit échantillon de quelles informations peuvent être trouvées. Vous pouvez rédiger vos propres données de configuration, ou vous pouvez lire des informations, en utilisant les fonctions fournies par l'extension Win32STD.
Soit dit en passant, l'extension Win32STD offre plus qu'un simple accès au registre. Si vous êtes intéressé, consultez wildphp.free.fr/wiki/doku.php?id=win32std: index pour voir ce qu'il offre d'autre.
Image via Fotolia
Questions fréquemment posées (FAQ) sur l'accès au registre Windows à partir de PHP
Comment puis-je accéder au registre Windows à partir de PHP?
L'accès au registre Windows à partir de PHP peut être obtenu en utilisant la classe COM dans PHP. Cette classe permet à PHP d'interagir avec tous les objets COM, y compris le registre Windows. Vous pouvez créer une nouvelle instance de la classe COM, puis utiliser la méthode Regread pour lire une valeur du registre. Cependant, veuillez noter que cette méthode nécessite les autorisations correctes pour accéder au registre.
Qu'est-ce que le registre Windows et pourquoi aurais-je besoin d'y accéder à partir de PHP?
Le registre Windows est une base de données Cela stocke des paramètres de bas niveau pour le système d'exploitation et pour les applications qui choisissent d'utiliser le registre. Vous devrez peut-être y accéder depuis PHP pour diverses raisons, par exemple pour récupérer les informations du système, vérifier la présence de certains logiciels ou modifier les paramètres du système. Cependant, la modification du registre doit être effectuée avec prudence car elle peut affecter le fonctionnement du système.
Puis-je écrire au registre Windows à partir de PHP?
Oui, vous pouvez écrire au registre Windows à partir de PHP utilisant la méthode RegWrite de la classe COM. Cependant, cela devrait être fait avec une extrême prudence car des modifications incorrectes peuvent causer de graves problèmes qui peuvent vous obliger à réinstaller votre système d'exploitation.
De quelles autorisations ai-je besoin pour accéder au registre Windows à partir de PHP?
Pour accéder au registre Windows à partir de PHP, vous devez avoir des privilèges administratifs. En effet, le registre contient des paramètres de système et d'application critiques. Si vous exécutez votre script à partir d'un serveur Web, le compte utilisateur du serveur devra également avoir les autorisations nécessaires.
Quelle est la structure du registre Windows?
Le registre Windows est organisé hiérarchiquement comme un arbre, avec des clés et des valeurs. Les clés sont similaires aux dossiers et les valeurs sont les entrées de données dans les clés. Chaque touche peut contenir des sous-clés, et chaque sous-clé peut contenir d'autres sous-clés, formant une structure d'arbre.
Comment puis-je gérer les erreurs lors de l'accès au registre Windows à partir de PHP?
Lorsque vous accédez au registre Windows à partir du registre Windows depuis PHP, les erreurs peuvent être gérées à l'aide des fonctions de gestion des erreurs PHP standard. Par exemple, vous pouvez utiliser la fonction set_error_handler pour définir un gestionnaire d'erreur personnalisé.
Puis-je accéder au registre Windows à partir de PHP sur un système non Windows?
Non, vous ne pouvez pas accéder aux Windows Registre de PHP sur un système non Windows. Le registre Windows est une fonctionnalité spécifique au système d'exploitation Windows.
Quelle est la classe com en php?
La classe COM dans PHP est une classe intégrée qui permet à PHP d'interagir avec Com objets. Com (Component Object Model) est une norme d'interface binaire pour les composants logiciels introduits par Microsoft. Il permet à PHP d'interagir avec tous les objets COM, y compris le registre Windows.
Puis-je supprimer les clés du registre Windows à l'aide de PHP?
Oui, vous pouvez supprimer les clés du registre Windows à l'aide de PHP . Cela peut être fait en utilisant la méthode RegRelete de la classe COM. Cependant, cela devrait être fait avec une extrême prudence car la suppression de la mauvaise clé peut causer de graves problèmes.
Quels sont les risques de modification du registre Windows?
La modification du registre Windows comporte des risques. Des modifications incorrectes peuvent causer de graves problèmes qui peuvent vous obliger à réinstaller votre système d'exploitation. Par conséquent, il est recommandé de sauvegarder le registre avant d'apporter des modifications et de ne faire des modifications que si vous êtes confiant dans ce que vous faites.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!