目录
钥匙要点
注册表布局
制作沙盒
从注册表中读取
写入注册表
一个例子 - USB驱动加密狗
总结
>
>我可以从php中写入Windows注册表吗?使用COM类的regwrite方法的PHP。但是,这应该非常谨慎,因为错误的修改可能会导致严重的问题,这可能需要您重新安装操作系统。

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

不,您无法访问Windows Windows来自PHP的注册表在非窗口系统上。 Windows注册表是Windows操作系统的特定功能。
首页 后端开发 php教程 PHP主|使用PHP访问Windows注册表

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

Feb 25, 2025 am 10:09 AM

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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP 8.1中的枚举(枚举)是什么? PHP 8.1中的枚举(枚举)是什么? Apr 03, 2025 am 12:05 AM

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

什么是REST API设计原理? 什么是REST API设计原理? Apr 04, 2025 am 12:01 AM

RESTAPI设计原则包括资源定义、URI设计、HTTP方法使用、状态码使用、版本控制和HATEOAS。1.资源应使用名词表示并保持层次结构。2.HTTP方法应符合其语义,如GET用于获取资源。3.状态码应正确使用,如404表示资源不存在。4.版本控制可通过URI或头部实现。5.HATEOAS通过响应中的链接引导客户端操作。

您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? 您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? Apr 05, 2025 am 12:03 AM

在PHP中,异常处理通过try,catch,finally,和throw关键字实现。1)try块包围可能抛出异常的代码;2)catch块处理异常;3)finally块确保代码始终执行;4)throw用于手动抛出异常。这些机制帮助提升代码的健壮性和可维护性。

PHP中的匿名类是什么?您何时可以使用它们? PHP中的匿名类是什么?您何时可以使用它们? Apr 04, 2025 am 12:02 AM

匿名类在PHP中的主要作用是创建一次性使用的对象。1.匿名类允许在代码中直接定义没有名字的类,适用于临时需求。2.它们可以继承类或实现接口,增加灵活性。3.使用时需注意性能和代码可读性,避免重复定义相同的匿名类。

See all articles