1

私はこのコードを持っています:

 $fp = fopen($unenc_path, "w");
 fwrite($fp, $msg);
 fclose($fp);

 $easy_access_emails = 'person@##.com';
 $headers =   "From: support@##.com <support@##.com>\n" . 
              "Reply-to: support@##.com\n" . 
              "Subject: " . $subject . "\n";

 $key = implode("", file("../newcert.pem"));

 $ArrayMessageProperties = explode("\n", $headers);

 $unenc_path = '..\\tmp\\'. preg_replace('/[^0-9]/','', microtime()) . rand(0,1000) . "msg.txt";
 $enc_path = '..\\tmp\\'. preg_replace('/[^0-9]/','', microtime()) . rand(0,1000) . "enc.txt";

 if (openssl_pkcs7_encrypt($unenc_path, $enc_path, $key, $ArrayMessageProperties))
 {
    $info = file_get_contents($enc_path);

    foreach ($easy_access_emails as $email)
    {
         mail($email, $subject, $info, $headers);
    }
} else {
    die("Failed Encryption");
}

私のローカル開発環境(LAMPを実行しているMacbook)で正しく動作します。テストのためにWindowsサーバーに移動しましたが、openssl_pkcs7_encrypt毎回失敗します。関数は$enc_path;に書き込む必要があるため、これはパーミッションの問題だと思います。しかし、Windowsサーバー上のディレクトリを可能な限りオープンにしました。(何らかの関係がある可能性のあるほぼすべてのユーザー/グループに完全な制御を設定します。これをデバッグするための良い方法を知っている人はいますか?関数は、失敗したときに単に false を返し、理由がわからないようです.

さらに調査すると、スクリプトにはディレクトリへの書き込みアクセス権があるようです。$unec_path への書き込みは問題なく、への呼び出しで失敗するだけopenssl_pkcs7_encryptです。

別の更新: filemonを使用してリクエストを監視していますが、暗号化されていないファイルを開いて書き込みますが、暗号化されたファイルに書き込もうとしても出力がありません。

キーをロードする行も追加しました。エコーアウトしてロードしていることを確認しましたが、問題ないようです。

別の更新: filemon を再度監視すると、呼び出されるはずの頃openssq_pkcs7_encryptに、Windows tmp ディレクトリで暗号化されていないメッセージを探しているというエントリが表示されます。

w3wp.exe:4172  C:\windows\system32\tmp\04277530010012336..msg.txt 
PATH NOT FOUND  Options: Open Access: Read
4

2 に答える 2

4

Windowsが判明した/その相対パスが気に入らなかったため、フォワードとバックスラッシュ( )を少し openssl_pkcs7_encryptいじった後、フルパスを指定して修正しました。/. \\

于 2009-02-03T21:48:28.707 に答える
1

$keyコードのどこかにキーをロードしていますか? スニペットでは見えない

于 2009-02-03T20:07:57.223 に答える