2011-11-25 78 views
0

我需要從Web應用程序導出一些數據到Windows .reg文件創建.reg文件

我已經設法創建文件並強制下載。

$tmpfname = tempnam(sys_get_temp_dir(), "reg_".time().rand()."_"); 
$tmpfpath = sys_get_temp_dir() . $tmpfpath; 
$handle = fopen($tmpfname, "w"); 

fwrite($handle, $string); 

header('Content-type: application/force-download'); 
header('Content-Disposition: attachment; filename="'.time().'_import-'.$reg_folder.'.reg"'); 
header('Content-Transfer-Encoding: binary'); 
readfile($tmpfpath); 

fclose($temp); 
unlink($tmpfpath); 

的問題是這樣的,當我運行下載的.reg文件,註冊表編輯器打開如預期askes有關添加信息。[...]你確定?單擊是時,我收到以下錯誤消息

無法導入[文件]:指定的文件不是註冊表腳本。您只能從註冊表編輯器中導入二進制註冊表文件。

我的文件看起來像這樣

Windows Registry Editor Version 5.00 

[HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\Sessions\Test Site] 

"HostName"="hostname" 
"UserName"="username" 
"PasswordPlan"="password" 
<newline> 
<newline> 

我不完全知道如何輸出的文件與註冊表編輯器兼容的二進制格式。

根據Windows 7的「設置關聯」應用程序,註冊表文件的內容類型是「註冊條目」,但我已經嘗試在腳本中將內容類型設置爲此,但無法識別。

如果任何人都可以對此有所瞭解,那將非常感激。謝謝

+2

嗯,這只是一種文本格式。 *你的*文件的外觀如何?你使用哪種編碼?您是否嘗試過正確的MIME類型和Content-Charset? ('/ force-download'只是愚蠢的) – mario

+0

我試過使用內容類型「Registry Entries」,但只是輸出文件爲.reg.htm。我不確定其他類型。我的文件看起來與使用regedit直接從註冊表導入的文件完全一樣 - 但會在一秒鐘內將其添加到問題中。我還沒有嘗試設置Content-Charset。 –

+0

該文件必須是UTF-16或UCS-2編碼。請用'wget -S'嘗試並調試retreived文件。在你的PHP腳本中的UTF-8 BOM等可以解決這個問題。 (使用hexeditor來驗證)。另外「註冊表項」不是有效的MIME類型。你使用了哪個確切的值? – mario

回答

1

我不完全確定如何輸出與註冊表編輯器兼容的二進制格式的文件。

我認爲這是你的問題的原因。您需要根據文件格式規範創建文件。 mime類型在這裏不太重要,windows對文件結尾(.reg)的作用比對mime類型更多。你只需要注意你使用正確的MIME類型和你的文件格式。爲此你也需要知道文件格式。

您指的是哪個特定的文件格式規範?您確定要創建二進制.reg文件而不是文本文件嗎?

+0

我不確定二進制/文本是否是我需要的格式。我只是假設二元的,就像錯誤所說的那樣。該文件具有.reg擴展名,我可以雙擊它,它會嘗試導入它就像任何其他註冊表文件,但失敗,錯誤信息在問題中。 –

+0

我不能告訴你,因爲它不是我的文件,你需要說。你可以給任何文件任何文件擴展名,以便它在文件名末尾有'.reg'。它通過regedit導入失敗僅僅意味着你提供了一個無效的格式化文件。將文件內容與文件格式規範進行比較。該規範仍然缺失,您可以提供嗎? – hakre