Pergunta

Eu tenho esse código:

 $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");
}

Que funciona corretamente em meu ambiente de dev local (Macbook correndo LAMP). I mudou-se para um servidor Windows para testar e agora openssl_pkcs7_encrypt falhar cada vez. Eu suponho que este é um problema de permissões, uma vez que a função precisa de escrever para $enc_path; Mas eu fiz o diretório no servidor de janelas tão abertas quanto possível. (Definir o controle completo para apenas sobre cada usuário / grupo que pode ter algo a ver com isso. Alguém sabe um bom método para depurar isso? Parece que a função simplesmente retorna false quando ele falha com nenhuma indicação de como isso.

Ao investigar mais parece que o script tem acesso de gravação ao diretório. Ele escreve para o $ unenc_path nenhum problema, apenas falha na chamada para openssl_pkcs7_encrypt.

Outra atualização: Eu estou usando filemon para assistir a solicitação alguns em e eu vê-lo abrir e gravar o arquivo não criptografado, mas não há saída para ainda tentar escrever para o arquivo criptografado.

Também foi adicionado a linha que carrega a chave. Eu tenho verificado que o carregamento por ecoando-lo e parece ser bom.

Outra atualização: Assistindo filemon novamente, em torno do tempo que deveria estar chamando openssq_pkcs7_encrypt eu estou vendo uma entrada que ele está olhando para a mensagem sem criptografia no diretório das janelas tmp.

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

Solução

Acabou Windows / openssl_pkcs7_encrypt não gostava que caminho relativo, dando um caminho completo depois de brincar com frente e barras invertidas (/. \\) para um pouco fixado.

Outras dicas

Você está colocando a chave na em algum lugar $key em seu código? Eu não posso vê-lo no trecho

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top