2009-02-03 2 views
1

у меня есть этот код: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 
+0

Вы можете сообщить нам, какая ошибка php дает вам с помощью 'error_reporting (E_ALL)'? –

+0

Спасибо за ответ. Я установил E_ALL, и он только выплескивает уведомление о несвязанной неопределенной переменной (спасибо, впоследствии мне удалось сообщить об ошибке). Я исправил это, и он все еще просто терпит неудачу без сообщения об ошибке. –

ответ

4

Выключен Windows/openssl_pkcs7_encrypt не понравился этот относительный путь, давая полный путь после того, как он возился с прямой и обратной косой чертой (/. \\), немного исправил это.

+0

Ты мой герой сегодня! В моем случае я сделал это со следующим полным путем: '' C: \\ xampp7 \ htdocs \\ project \\ public \\ sandbox \\ tmp \\ passbook \\ manifest.json "' – Silvan

1

Вы загружая ключ в $key где-то в вашем коде? Я не вижу его на фрагменте

+0

Спасибо за ответ. Я добавил строку, в которую она втягивается, и некоторые заметки о моем текущем прогрессе. –

Смежные вопросы