首頁 > 後端開發 > php教程 > PHP主|使用PHP訪問Windows註冊表

PHP主|使用PHP訪問Windows註冊表

Jennifer Aniston
發布: 2025-02-25 10:09:10
原創
473 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板