.regファイルの作成

私は、WebアプリケーションからWindowsの.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ファイルを実行すると、レジストリエディタが期待どおりに開き、情報を追加することを尋ねることです。[...]本当ですか?はいをクリックすると、次のエラーメッセージが表示されます。

[file]をインポートできません:指定されたファイルはレジストリスクリプトではありません。君は   レジストリエディタ内からのみバイナリレジストリファイルをインポートできます。

私のファイルはこのように見えます

Windows Registry Editor Version 5.00

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

"HostName"="hostname"
"UserName"="username"
"PasswordPlan"="password"


私は、レジストリエディタと互換性のあるバイナリ形式でファイルを出力する方法は完全にはわかりません。

レジストリファイルのコンテンツタイプはWindows 7のSet Associationsアプリケーションの「登録エントリ」ですが、スクリプト内でこれにコンテンツタイプを設定しようとしましたが認識されません。

もし誰かがこれについていくらか光を当てることができればそれは大いに感謝されるだろう。ありがとう

0
プレーンパスワードFTW。 WinSCPプロファイルを挿入している間にファイルを適切に渡すことができないというのは本当に恐ろしいことです。
追加された 著者 hakre,
まあ、単なるテキスト形式です。 あなたのファイルはどのように見えますか?どのエンコードを使用しましたか?そして正しいMIMEタイプとContent-Charsetを試しましたか? (/force-download はちょっとばかりです)
追加された 著者 mario,
ファイルはUTF-16またはUCS-2でエンコードされている必要があります。 wget -S を試して、取得したファイルをデバッグしてください。あなたのPHPスクリプトのUTF-8 BOMなどはこれをねじ込むでしょう。 (検証にはヘキサエディタを使用してください)。また、 "Registry Entries" は有効なMIMEタイプではありません。どのような正確な価値を使いましたか?
追加された 著者 mario,
私はコンテンツタイプ "レジストリエントリ"を使用しようとしましたが、それは単にファイルを.reg.htmとして出力します。私は他のどのようなタイプがよくわからない。私のファイルは、regeditを使ってレジストリから直接インポートされたものと全く同じように見えますが、それを2番目に質問に追加します。私はContent-Charsetの設定を試みていません。
追加された 著者 Ben Swinburne,
WinSCPはPasswordPlainレジストリエントリを検出すると、WinSCPを暗号化します。私はすでにWinSCPフォーラムで尋ねてきました。そしてMartin Prikrylはこう言っています。私は暗号化アルゴリズムを再現する方法に関する情報を要求し、彼はこの方法でインポートすると言った。
追加された 著者 Ben Swinburne,

1 答え

レジストリエディタと互換性のあるバイナリ形式でファイルを出力する方法が完全にはわかりません。

私はあなたの問題の原因だと思う。そのファイル形式の仕様に基づいてファイルを作成する必要があります。ここではMIMEタイプはそれほど重要ではありませんが、WindowsではMIMEタイプよりファイル終端(.reg)が多く機能します。あなたはあなたのファイル形式で適切なMIMEタイプを使用するように注意する必要があります。そのためには、ファイル形式も知っておく必要があります。

どの特定のファイル形式仕様を参照していますか?バイナリ形式の.regファイルを作成して、テキスト形式のファイルではないと確信していますか?

1
追加された
それは私のファイルではないので、私はあなたに言うことができません、あなたは言う必要があります。どのファイルにもファイル拡張子を付けることができるので、ファイル名の末尾に .reg があります。これは、regeditによるインポートで失敗したということは、あなたが無効なフォーマットされたファイルを提供したことを意味します。ファイルの内容とファイル形式の仕様を比較します。その仕様はまだ失われています、あなたはそれを提供してくださいできますか?
追加された 著者 hakre,
私はバイナリ/テキストが私が必要とするフォーマットかどうかは不明です。私はエラーが何を言ったので、バイナリをasumingだけです。ファイルは.reg拡張子を持ち、ダブルクリックすると他のレジストリファイルと同じようにインポートしようとしますが、質問のエラーメッセージが表示されません。
追加された 著者 Ben Swinburne,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com