2

私の目的は、レジストリ ハイブで Company のキー値を探し、それに続く対応する Guid とその他のキーと値を取得することです。そこで、regedit export コマンドを実行してから、必要なキーを求めてファイルを php で解析することにしました。

したがって、 dos batch コマンドを実行した後

>regedit /E "output.txt" "HKLM\System....\Company1" 

出力テキストファイルは、正規表現に適していないある種の UNICODE 形式のようです。ファイルを解析してキーを取得するためにphpを使用しています。

ファイルの解析に使用しているphpコードは次のとおりです

<?php 

$regfile = "output.txt";


$handle = fopen ("c:\\\\" . $regfile,"r");
//echo "handle: " . $file . "<br>";
$row = 1;


while ((($data = fgets($handle, 1024)) !== FALSE) ) {

    $num = count($data);
    echo "$num fields in line $row: \n";

$reg_section = $data;   
//$reg_section = "[HKEY_LOCAL_MACHINE\SOFTWARE\TECHNOLOGIES\MEDIUS\CONFIG MANAGER\SYSTEM\COMPANIES\RECORD11]";

$pattern = "/^(\[HKEY_LOCAL_MACHINE\\\SOFTWARE\\\TECHNOLOGIES\\\MEDIUS\\\CONFIG MANAGER\\\SYSTEM\\\COMPANIES\\\RECORD(\d+)\])$/";
if ( preg_match($pattern, $reg_section )) { 

echo "<font color=red>Found</font><br>"; 

} else { 
echo "not found<br>"; 
echo $data . "<br>";
}
$row++;
} //end while 
fclose($handle);


?> 

出力は次のようになります....

行 1 の 1 フィールド: 見つかりませんr� �V�e�r�s�i�o�n� �5�.�0�0� � 行 2 の 1 フィールド: 見つかりません

行 3 の 1 フィールド: 見つかりません [�H�K�E�Y�<em>�L�O�C�A�L�</em>�M�A�C�H�I�N�E �\�S�O�F�T�W�A�R�E�\�I�N�T�E�R�S�T�A�R� �T�E�C�H�N� O�L�O�G�I�E�S�\�X�M�E�D�I�U�S�\�C�O�N�F�I�G��M�A�N �A�G�E�R�\�S�Y�S�T�E�M�\�C�O�M�P�A�N�I�E�S�]� � 1 フィールドが並んでいます4: 見つかりません "�N�e�x�t� �R�e�c�o�r�d� �I�D�"�=�"�4�1�"� � 5 行目に 1 フィールド: 見つかりません

これにアプローチする方法はありますか?

前もって感謝します

4

4 に答える 4

1

これにはPerlライブラリがあることを知っています:

解析::Win32Registry

それから PHP クラスを作成することはそれほど難しくありません。Perl コードを解析する PHP 用の PECL 拡張機能もあります。

http://devzone.zend.com/node/view/id/1712

于 2009-02-23T20:55:40.730 に答える
1

/A を次のように REGEDIT コマンドに追加して、互換性のある出力を生成してみてください。

REGEDIT /E /A "output.txt" "HKEY_LOCAL_MACHINE\System....\Company1"

于 2010-03-22T18:06:40.063 に答える
0

正規表現はUnicodeで正常に機能します。特定のエラーメッセージが表示されていますか?

于 2009-02-23T20:51:44.733 に答える
0

Windows XP からは、Regedit エクスポートは Unicode なので 2 バイトです。メモ帳でエクスポートを開くと、これが表示されます。古いバージョンの php が unicode ファイルを処理できるかどうかはわかりません。

必要な特定のキーを読み取る方法はありませんか? 別のツールなどを使用すると、はるかに簡単なアプローチになります。

于 2009-02-28T15:40:37.873 に答える