PHPマスター| PHPでWindowsレジストリにアクセスします
キーテイクアウト
- 構成情報を保存する階層構造のデータベースであるWindowsレジストリは、win32std拡張機能を使用してPHPでアクセスできます。 Windowsレジストリは、Keysとして知られる5つの主要なグループに分けられます: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ドングルなどのハードウェアデバイスの存在の確認などの実用的なアプリケーションに使用できます。ただし、レジストリの変更は、システムの操作に影響を与える可能性があるため、注意して行う必要があります。
レジストリレイアウト
レジストリは、Windowsオペレーティングシステムの暗くて危険で怖い場所であるという評判があります。 これはおそらく誇張された恐怖ですが、それでもマイクロソフトのレジストリマントラを繰り返します。 不適切な変更は、オペレーティングシステムを再インストールする必要がある可能性のある深刻な問題を引き起こす可能性があります。」 それで、この暗くて怖い場所はどのように見えますか? Windowsレジストリは、キーとして知られる5つの主要なグループに分割されます。 HKEY_CURRENT_CONFIG hkey_local_machineこのキーには、プリンター、ソフトウェア、ネットワーキング情報など、マシンの構成情報が含まれています。 キーは最初にロードされ、次にユーザーのプロファイルからのエントリがさまざまな値をオーバーライドします。 このキーはHKLMとして略されていることがわかります。 hkey_users
このキーは、マシン上のローカルユーザーアカウントのすべてのプロファイルを保持しています。 ユーザーのスクリーンセーバーの選択、テーマ情報、その他の設定などがここに保存されます。 このキーはHKUとして略されます。 HKEY_CLASSES_ROOT hkey_current_user このキーは、現在ログインしているユーザーのhkey_usersのプロファイルを指すエイリアスです。 このキーはHKCUとして略されていることがわかります。 各キーには、他のサブキー、構成値、またはその両方を含むサブキーが含まれています。 hkey_current_userの下で作業するだけで、いくつかのCLIスクリプトとサンドボックスをいじくり回すのに十分です。 Microsoftのセキュリティ許可を快適に操作するシステム全体のアプリケーションデータと状況には、hkey_local_machineのみを使用します。あなたの状況に正しいことを理解し、どのアカウントPHPが実行されているかを知り、キーを適切に作成します。
サンドボックスの作成
特に開発する場合は、安全のためにスクリプトで使用するために特別なキーを設定することをお勧めします。エラーは人間であり、私たちは誤って重要なものを上書きしたくありません。 組織は、指定されたキーを設定するもう1つの理由です。 レジストリには多くの情報が保存されており、自分の価値を簡単に見つけることができるようにしたいと考えています。 レジストリエディターは、レジストリを表示および編集するために使用されるMicrosoftプログラムです。サンドボックスを作成するには、開始し、検索バーの「Regedit」と入力し、表示される結果リストでRegedit.exeを選択します。 左ペインには既存のキーのツリー構造が表示され、右ペインには内部に保存されている値が表示されます。 hkey_current_userノードを展開し、ソフトウェアキーを右クリックして、ポップアップコンテキストメニューから[新しい>キー]を選択します。 または、矢印キーを使用してツリーを通過して、ソフトウェアキーが強調表示され、[編集]メニューから[新しいキー]を選択するようにすることもできます。キーの名前を提供し、Enterを押します。
reg_open_key()関数は、レジストリへの接続を開き、リソースを返します。 このリソースは、他のレジストリ関数とともに使用され、その接続に作用します。 reg_close_key()関数は接続を閉じます。 reg_open_key()は、2つの引数を取ります。最初は、5つの主要なレジストリグループの1つを表す定義済み定数、次に目的のキーへのパスの残りです。
オープン接続ができるようになったので、reg_enum_key()、reg_enum_value()、reg_get_value()関数を使用してレジストリから情報を取得できます。 リソースがreg_enum_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>
<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>
<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 - 値は、スペースやコンマなどの区切り文字で区切られたアイテムのリストです
- reg_binary - 値はバイナリ文字列
- です reg_none - 値には特定のデータ型が関連付けられていません
<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アプリケーションが、それを実行するためにサーバーに接続する必要があるような方法で当社のPHPアプリケーションがライセンスされているとします。 PHPはドングルの存在をどのように検出できますか? Windowsの答えはレジストリにあります!各デバイスには一意の識別子があるため、スクリプトは、ドングルがプラグインされているかどうかを判断するために起動するときに識別子の適切なキーを検索できます。 最初のステップは、デバイスの識別子を決定することです。この例では、商品サムドライブを使用します。ドライブをコンピューターのUSBポートに接続してから開始し、検索バーに「デバイス」と入力し、表示される結果リストでデバイスマネージャーを選択します。 デバイスマネージャーでデバイスを見つけ、エントリを右クリックし、コンテキストメニューから[プロパティ]を選択します。次に、[プロパティ]ウィンドウの[詳細]タブに移動し、ドロップダウンリストから[デバイスインスタンスパス]を選択します。値の終わりに向けた16進数のシーケンスは、デバイスID(赤でマークされています)です。
<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>
この記事の過程で、Windowsレジストリとは何か、その中にどの情報が見つかるかについての小さなサンプルが見られました。独自の構成データを記述することも、Win32stD拡張子によって提供された関数を使用して、情報を読み返すこともできます。 ちなみに、Win32stD拡張機能は、レジストリへのアクセスだけではありません。興味のある方は、wildphp.free.fr/wiki/doku.php?id=win32std:indexをチェックして、他に何が提供されるかを確認してください。 Fotoliaを介した画像 php
からのWindowsレジストリへのアクセスに関するよくある質問(FAQ)
PHPからWindowsレジストリにアクセスするにはどうすればよいですか?
PHPからWindowsレジストリにアクセスするには、PHPのCOMクラスを使用することで実現できます。このクラスにより、PHPはWindowsレジストリを含む任意のCOMオブジェクトと対話できます。 COMクラスの新しいインスタンスを作成してから、RegReadメソッドを使用してレジストリから値を読み取ることができます。ただし、この方法ではレジストリにアクセスするために正しい権限が必要であることに注意してください。これは、オペレーティングシステムとレジストリを使用することを選択したアプリケーションに低レベルの設定を保存します。システム情報を取得したり、特定のソフトウェアの存在を確認したり、システム設定を変更するなど、さまざまな理由でPHPからアクセスする必要がある場合があります。ただし、システムの操作に影響を与える可能性があるため、レジストリの変更は注意して実行する必要があります。PHPからWindowsレジストリに書き込みますか? comクラスのregwriteメソッドを使用したphp。ただし、誤った修正により、オペレーティングシステムを再インストールする必要がある深刻な問題を引き起こす可能性があるため、これは非常に注意してください。PHPからWindowsレジストリにアクセスするには、どのような権限がありますか?
PHPからWindowsレジストリにアクセスするには、管理特権が必要です。これは、レジストリに重要なシステムとアプリケーションの設定が含まれているためです。 Webサーバーからスクリプトを実行している場合、サーバーのユーザーアカウントには必要なアクセス許可も必要です。キーと値を備えた木として階層的に編成されています。キーはフォルダーに似ており、値はキー内のデータエントリです。各キーにサブキーを含めることができ、各サブキーにはさらにサブキーが含まれ、ツリー構造を形成できます。 PHP、エラーは標準のPHPエラー処理機能を使用して処理できます。たとえば、set_error_handler関数を使用してカスタムエラーハンドラーを定義できます。非ワインドシステムのPHPからのレジストリ。 Windowsレジストリは、Windowsオペレーティングシステムに固有の機能です。 comオブジェクト。 com(コンポーネントオブジェクトモデル)は、Microsoftによって導入されたソフトウェアコンポーネントのバイナリインターフェイス標準です。 Windowsレジストリを含むPHPが任意のcomオブジェクトと対話することができます。 。これは、comクラスのregdeleteメソッドを使用して実行できます。ただし、間違ったキーを削除すると深刻な問題を引き起こす可能性があるため、これは非常に注意してください。
Windowsレジストリの変更のリスクは何ですか?誤った変更は、オペレーティングシステムを再インストールする必要がある可能性のある深刻な問題を引き起こす可能性があります。したがって、変更を加える前にレジストリをバックアップし、自分がしていることに自信がある場合にのみ変更を加えることをお勧めします。
以上がPHPマスター| PHPでWindowsレジストリにアクセスしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

php8.1の列挙関数は、指定された定数を定義することにより、コードの明確さとタイプの安全性を高めます。 1)列挙は、整数、文字列、またはオブジェクトであり、コードの読みやすさとタイプの安全性を向上させることができます。 2)列挙はクラスに基づいており、トラバーサルや反射などのオブジェクト指向の機能をサポートします。 3)列挙を比較と割り当てに使用して、タイプの安全性を確保できます。 4)列挙は、複雑なロジックを実装するためのメソッドの追加をサポートします。 5)厳密なタイプのチェックとエラー処理は、一般的なエラーを回避できます。 6)列挙は魔法の価値を低下させ、保守性を向上させますが、パフォーマンスの最適化に注意してください。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。
