У меня есть этот код:
$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");
}
, который работает правильно в моей локальной среде разработчика (Macbook работает с LAMP). Я переместил его на сервер Windows для тестирования, и теперь openssl_pkcs7_encrypt
каждый раз дает сбой. Я предполагаю, что это проблема с разрешениями, так как функция должна писать в $enc_path
; Но я сделал каталог на сервере Windows примерно настолько открытым, насколько это возможно. (установите полный контроль практически для каждого пользователя / группы, которые могут иметь к этому какое-либо отношение. Кто-нибудь знает хороший метод для отладки этого? Похоже, что функция просто возвращает false, когда она завершается ошибкой, без указания причины.
После дальнейшего изучения выясняется, что у сценария есть доступ на запись в каталог. Он пишет в $ unenc_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