首页 > 后端开发 > php教程 > PHP主|使用PHP访问Windows注册表

PHP主|使用PHP访问Windows注册表

Jennifer Aniston
发布: 2025-02-25 10:09:10
原创
474 人浏览过

PHP主|使用PHP访问Windows注册表

钥匙要点

  • > Windows注册表是一个层次结构化的数据库存储配置信息,可以使用php使用win32STD扩展程序访问,可以从downlocts.php.net/pierre/。
  • Windows注册表分为五个主要组,称为密钥:hkey_current_config,hkey_local_machine,hkey_users,hkey_classes_root和hkey_current_user。每个键都包含子键,依次包含其他子钥匙,配置值或两者。
  • >
  • > reg_open_key()函数打开与注册表的连接并返回资源,该资源可与其他注册表函数一起使用以在该连接上行动。 reg_close_key()函数关闭连接。 REG_SET_VALUE()函数用于为注册表编写一个值,覆盖现有值或创建新值。>
  • > Windows注册表可用于实用应用程序,例如为基于Web的应用程序存储配置信息,存储应用程序数据和桌面应用程序的用户偏好,或验证USB加密狗等硬件设备的存在。但是,应谨慎修改注册表,因为它可能会影响系统的操作。
您是否曾经早上醒来,想着自己,“我今天想做疯狂的事情?”好吧,如果今天是这些早晨之一,那么您很幸运。我想为您提供一些使用PHP访问Windows注册表的介绍。 PHP…注册表……疯狂! Windows注册表只是一个层次结构化的数据库,其中Windows操作系统和其他应用程序存储了重要的配置信息。 各种数据存储在注册表中:用户配置文件,文件类型关联,硬件信息,序列号等。借助WIN32STD扩展程序中的功能,您的基于Windows的PHP应用程序也可以访问注册表。 Win32STD扩展可以从downloads.php.net/pierre/下载为预编译库。只需将其放入PHP的Ext文件夹中,更新您的php.ini文件,然后在必要时重新启动Apache。请注意,目前您要下载的DLL为32位,因此,如果您使用的是64位的Wampserver构建,或者您将不会取得太大的成功。您必须将Wampserver降级到32位构建,或者自己尝试自行编译图书馆。

注册表布局

注册表在Windows操作系统中享有黑暗,危险和可怕的位置的声誉。 这可能是一种过于夸张的恐惧,但我仍然会重申Microsoft的注册表咒语:“在修改注册表之前,请将其备份并确保您了解如果发生问题时如何恢复它。 不当变化可能会导致严重的问题,可能需要您重新安装操作系统。” 那么这个黑暗,可怕的地方是什么样的? Windows注册表分为5个主要组,称为密钥: hkey_current_config
该密钥存储有关计算机硬件的信息,例如监视器分辨率和扬声器设置。 您可能会将此键缩写为HKCC。 > hkey_local_machine
该密钥包含用于机器的配置信息,例如打印机,软件和网络信息。 首先加载键,然后从用户配置文件中的条目覆盖各种值。 您会看到此密钥缩写为HKLM。 hkey_users
该键保留机器上本地用户帐户的所有配置文件。 此处存储了诸如用户屏幕保护程序选择,主题信息和其他首选项之类的内容。 该键缩写为HKU。 > HKEY_CLASSES_ROOT
此键是指向HKEY_LOCAL_MACHINESOFTWARE的别名,该软件存储有关文件关联和MIME类型的信息。 缩写为hkcr。 > hkey_current_user
此键是指向当前登录的用户中的HKEY_USERS中的配置文件的别名。 您会看到此密钥缩写为HKCU。 每个键都包含子键,又包含其他子键,配置值或两者。 在HKEY_CURRENT_USER下工作足以使用一些CLI脚本和一个沙盒。仅使用HKEY_LOCAL_MACHINE用于系统范围的应用程序数据和您可以使用Microsoft安全权限的情况。了解适合您的情况的是什么,在哪个帐户运行下知道,并适当地创建密钥。

制作沙盒

我建议为了安全起见,请设置一个特殊的密钥,以便在脚本中使用,尤其是在开发时。错误是人类,我们不想意外覆盖任何重要的事情。 组织是设置指定密钥的另一个原因。 注册表中存储了很多信息,我们希望能够轻松地找到自己的价值观。 注册表编辑器是一种用于查看和编辑注册表的Microsoft程序。要创建我们的沙箱,请开始,在搜索栏中键入“ regedit”,然后在显示的结果列表中选择regedit.exe。 左窗格显示现有键的树结构,而右窗格显示存储在其中的值。 展开HKEY_CURRENT_USER节点,右键单击软件键,然后从弹出式上下文菜单中选择新>键。 另外,我们还可以使用箭头键在树上穿越,以便突出显示软件密钥并从“编辑”菜单中选择新>键。提供键的名称,然后按Enter。

PHP主|使用PHP访问Windows注册表

现在,我们可以玩一个地方,请允许我向您介绍Win32STD为操纵注册表条目提供的功能。

从注册表中读取

reg_open_key()函数打开与注册表的连接并返回资源。 然后将此资源与其他注册表功能一起使用,以对该连接作用。 reg_close_key()函数关闭连接。 reg_open_key()采用两个参数:第一个预定义常数代表五个主要注册表组之一,然后代表所需密钥的剩余路径。
<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>
登录后复制
登录后复制
登录后复制
现在您有了一个开放的连接,可以使用reg_enum_key(),reg_enum_value()和reg_get_value()函数从注册表中检索信息。 如果仅将资源传递给reg_enum_key(),则它将在当前密钥下返回一组子键。 也可以传递整数值以检索特定索引的子钥匙。
<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>
登录后复制
由于reg_enum_key()返回键,reg_enum_value()返回键的值。 该功能接受资源和可选索引。值名可以传递到reg_get_value()以检索值的值(不是很嘴!)。
<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>
登录后复制

写入注册表

> 在阅读和写入注册表时,您可以选择少数数据类型。由于PHP的动态性质,它们通常不会产生任何后果,但是在编写值时,您必须指定类型。在大多数情况下,您会发现自己使用reg_sz或reg_dword,但以下是扩展程序公开的数据类型的列表:
  • reg_dword - 值存储为32位长整数
  • reg_sz - 值存储为固定长度字符串
  • reg_expand_sz - 值存储为可变长度字符串
  • reg_multi_sz - 值是由space或comma
  • 等定界线分隔的项目列表
  • reg_binary - 值是二进制字符串
  • reg_none - 值没有与之关联的特定数据类型
reg_set_value()函数用于为注册表编写一个值。如果该值已经存在,则新值将覆盖它,但是如果不存在,则将创建它。 该函数采用四个参数:首先是开放资源,然后是值的名称,然后是代表值数据类型的预定义常数,最后是数据本身。
<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>
登录后复制
登录后复制
登录后复制

一个例子 - USB驱动加密狗

您可能想知道是否有实际用途用于使用注册表。在基于Web的应用程序中,您可以将配置信息存储在注册表中。如果您写了一个桌面应用程序,那么注册表可能是将各种信息从应用程序数据到用户偏好存储的好地方。 Windows本身将各种有趣的硬件和状态相关的信息写入注册表,如果您足够创造力,则其中一些可能会很有用。 假设我们的PHP应用程序已获得许可,以至于需要将USB加密狗连接到服务器上才能运行它。 PHP如何检测加密狗的存在? Windows上的答案在于注册表!每个设备都有一个唯一的标识符,因此脚本可以在启动时搜索标识符的适当键,以确定是否插入了加密狗。 第一步是确定设备的标识符。在此示例中,我将使用商品拇指。只需将驱动器插入计算机上的USB端口,然后开始启动,在搜索栏中键入“设备”,然后在显示的结果列表中选择“设备管理器”。 在设备管理器中找到设备,右键单击条目,然后从上下文菜单中选择属性。然后转到“属性”窗口的详细信息选项卡,然后从下拉列表中选择“设备实例路径”。值末端的十六进制数的序列是设备ID(以红色标记)。

PHP主|使用PHP访问Windows注册表

Windows记录了HKEY_LOCAL_MACHINESYSYSTEMCURRENTCONTROLSESERSERSERSERSERSERSERICES的USB设备的存在。像我的ThumbDrive这样的存储媒体将出现在Usbstor下;其他设备可能会出现在Usbaudio,USBCCGP和USBEHCI下。另外,请注意,HKEY_LOCAL_MACHINE只能获得特权帐户。 因此,现在我们可以简单地搜索密钥的枚举子键以查看设备实例。连接驱动器时,它将被列出,当不附加时,它将不会列出。
<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>
登录后复制
登录后复制
登录后复制
这项简单的检查还开辟了其他一些有趣的可能性。您可以轻松地编码一个敏感的管理接口,该接口验证加密狗的验证,并通过检查$ _SERVER [“ remote_addr”]从服务器本身发送请求。此设置将要求用户在指定的服务器>和上提供物理身份验证的形式。

总结

在本文的整个课程中,我们已经看到了Windows注册表的内容,以及在其中可以找到哪些信息的一小部分。您可以编写自己的配置数据,也可以使用Win32STD扩展程序提供的功能来读取信息。 顺便说一句,Win32STD扩展不仅提供了对注册表的访问。如果您有兴趣,请查看wildphp.free.fr/wiki/doku.php?id=win32std:index,以查看其提供的内容。 通过fotolia 图像 经常询问的问题(常见问题解答)有关从php

访问Windows注册表的问题

>如何通过在PHP中使用COM类从PHP访问Windows注册表?该类允许PHP与包​​括Windows注册表在内的任何COM对象进行交互。您可以创建COM类的新实例,然后使用Regread方法从注册表中读取值。但是,请注意,此方法需要正确的权限来访问注册表。

>

Windows注册表是什么,为什么我需要从php?

> Windows Registry访问它。这为操作系统和选择使用注册表的应用程序存储了低级设置。由于各种原因,您可能需要从PHP访问它,例如检索系统信息,检查某些软件的存在或修改系统设置。但是,应谨慎修改注册表,因为它可能会影响系统的操作。

>

>我可以从php中写入Windows注册表吗?使用COM类的regwrite方法的PHP。但是,这应该非常谨慎,因为错误的修改可能会导致严重的问题,这可能需要您重新安装操作系统。

>我需要获得哪些权限,可以从PHP?

中访问Windows注册表来从PHP访问Windows注册表,您需要拥有管理特权。这是因为注册表包含关键系统和应用程序设置。如果您正在从Web服务器运行脚本,则服务器的用户帐户也需要具有必要的权限。

>

> Windows注册表的结构是什么?用钥匙和值以树为单位组织。键类似于文件夹,值是键中的数据输入。每个键都可以包含子钥匙,每个键都可以包含更多的子键,形成树结构。

>在从PHP访问Windows注册表时,我如何处理错误? PHP,可以使用标准PHP错误处理功能来处理错误。例如,您可以使用SET_ERROR_HANDLER函数来定义自定义错误处理程序。

我可以从非windows System上的PHP访问Windows注册表吗?

不,您无法访问Windows Windows来自PHP的注册表在非窗口系统上。 Windows注册表是Windows操作系统的特定功能。

> php中的com类是什么? com对象。 COM(组件对象模型)是Microsoft引入的软件组件的二进制界面标准。它允许PHP与任何COM对象进行交互,包括Windows注册表。

可以使用php?

>是的,您可以使用php从Windows注册表中删除键,从Windows注册表中删除键。 。这可以使用COM类的regdelete方法完成。但是,这应该非常谨慎,因为删除错误的钥匙可能会导致严重的问题。

>修改Windows注册表的风险是什么?

修改Windows注册表会带来风险。错误的修改可能会导致严重的问题,这可能需要您重新安装操作系统。因此,建议在进行任何更改之前备份注册表,并且只有在您对自己的工作充满信心的情况下进行更改。

以上是PHP主|使用PHP访问Windows注册表的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板