php / dos: Nasıl bir regedit verme dosyası ayrıştırmak?

4 Cevap php

Benim amacım kayıt defteri kovanında Şirket anahtar-değer aramak ve daha sonra gelen Guid ve ona aşağıdaki diğer anahtarlarını ve değerlerini çekmek. Yani ben regedit ihracat komutunu çalıştırın ve daha sonra ihtiyaç tuşları için php ile dosyayı ayrıştırmak düşündüm.

Yani dos toplu iş komutu çalıştırdıktan sonra

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

Çıktı Textfile dostu regex değil UNICODE biçimi bir tür gibi görünüyor. Ben dosyayı ayrıştırmak ve anahtarları çekmek için php kullanıyorum.

Burada dosyayı ayrıştırmak için kullanıyorum php kodu

<?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);


?>

ve çıkış bu gibi görünüyor ....

1 fields in line 1: not found ÿþW�i�n�d�o�w�s� �R�e�g�i�s�t�r�y� �E�d�i�t�o�r� �V�e�r�s�i�o�n� �5�.�0�0� � 1 fields in line 2: not found

1 fields in line 3: not found [�H�K�E�Y��L�O�C�A�L��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 fields in line 4: not found "�N�e�x�t� �R�e�c�o�r�d� �I�D�"�=�"�4�1�"� � 1 fields in line 5: not found

Herhangi bir fikir bu nasıl yaklaşım?

şimdiden teşekkürler

4 Cevap

Bunun için bir Perl kütüphane olduğunu biliyorum:

Parse::Win32Registry

Ondan bir PHP sınıfı yapma olsa çok zor olmamalı. Perl kodu ayrıştırmak PHP için bir PECL uzantısı da var:

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

Düzenli ifadeler unicode ile iyi çalışır. Belirli bir hata mesajı alıyor musunuz?

Windows XP'den Regedit ihracat Unicode ve bu nedenle 2 bayt. Eğer not defteri ihracat açmak eğer bu görürsünüz. Ben php eski sürümleri unicode dosyaları işlemek mümkün olduğundan emin değilim.

Eğer ihtiyacınız belirli bir anahtar okuyabilir hiçbir yolu yoktur? Başka bir araç vb aracılığıyla Bu daha straighforward yaklaşım olacaktır.

Uyumlu çıktı üretmek için böyle REGEDIT komutuna ekleyerek / A deneyin:

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