私はこのコードを持っています:
$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