у меня есть этот код:PHP Шифрование openssl_pkcs7_encrypt() при отсутствии
$fp = fopen($unenc_path, "w");
fwrite($fp, $msg);
fclose($fp);
$easy_access_emails = '[email protected]##.com';
$headers = "From: [email protected]##.com <[email protected]##.com>\n" .
"Reply-to: [email protected]##.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");
}
Что правильно работает на моем локальном Dev среде (Macbook работает ЛАМПЫ). Я переместил его на сервер Windows для тестирования, и теперь openssl_pkcs7_encrypt
терпит неудачу каждый раз. Я предполагаю, что это проблема с разрешениями, так как функция должна писать до $enc_path
; Но я сделал каталог на сервере Windows настолько открытым, насколько это возможно. (полный контроль над всеми пользователями/группами, которые могут что-то с ним делать. Кто-нибудь знает хороший метод для отладки этого? Кажется, функция просто возвращает false, когда она терпит неудачу, не указав причины.
при дальнейшем исследовании оказывается скрипт писать доступ к каталогу он пишет в $ unenc_path не проблема, просто не будет работать на призыв к openssl_pkcs7_encrypt
еще одно обновление:.. Я использую FileMon смотреть запрос некоторые в и я вижу его открытие и запись в незашифрованный файл, но для него нет выхода, даже если он пытается записать в зашифрованный файл.
Также добавлена строка, загружающая ключ. Я проверял, что он загружается, повторяя его, и это кажется хорошим.
Еще одно обновление: снова Смотря FileMon, примерно в то время он должен называть openssq_pkcs7_encrypt
я вижу запись, что он ищет в незашифрованном виде сообщения в каталоге окна TMP.
w3wp.exe:4172 C:\windows\system32\tmp\04277530010..msg.txt
PATH NOT FOUND Options: Open Access: Read
Вы можете сообщить нам, какая ошибка php дает вам с помощью 'error_reporting (E_ALL)'? –
Спасибо за ответ. Я установил E_ALL, и он только выплескивает уведомление о несвязанной неопределенной переменной (спасибо, впоследствии мне удалось сообщить об ошибке). Я исправил это, и он все еще просто терпит неудачу без сообщения об ошибке. –