Hi, Lucca, I would refer you to create a temporary file and, after sending, delete it from the server.
I took the liberty of including a function to generate the random name to complete the example.
function gerarIdentificadorLink($senha = 0, $tamanho = 20, $maiusculas = true, $numeros = true, $simbolos = false){
// Caracteres de cada tipo
$lmin = 'abcdefghijklmnopqrstuvwxyz';
$lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$num = '1234567890';
$simb = '!@#$%*-';
// Variáveis internas
$retorno = '';
$caracteres = '';
// Agrupamos todos os caracteres que poderão ser utilizados
$caracteres .= $lmin;
if ($maiusculas) $caracteres .= $lmai;
if ($numeros) $caracteres .= $num;
if ($simbolos) $caracteres .= $simb;
// Calculamos o total de caracteres possíveis
$len = strlen($caracteres);
for ($n = 1; $n <= $tamanho; $n++) {
// Criamos um número aleatório de 1 até $len para pegar um dos caracteres
$rand = mt_rand(1, $len);
// Concatenamos um dos caracteres na variável $retorno
$retorno .= $caracteres[$rand-1];
}
return $retorno;
}
/* Gera a string aleatoria */
$identificador = gerarIdentificadorLink();
/* Indica o caminho destino */
$Destino = '/var/www/html/';
/* Indica o nome temporário do arquivo */
$Arquivo = 'Arquivao_'.$identificador.'.pdf';
/* Cria a pasta temporária para armazenamento do arquivo */
if (!file_exists($Destino . $identificador)) {
mkdir($Destino . $identificador);
$Destino = $Destino . $identificador . '/';
}
/* monta o caminho completo do arquivo */
$caminhoCompletoArquivo = $Destino . $Arquivo;
(...)
/* executa a geração do seu PDF*/
$pdf->Output('f', $caminhoCompletoArquivo);
/* adiciona o arquivo físico ao e-mail */
$mail->AddAttachment($caminhoCompletoArquivo);
/* envia o e-mail */
$enviado = $mail->Send();
/* exclui o arquivo pdf do servidor */
if (file_exists ($ArquivoCaminhoCompleto)) {
unlink($ArquivoCaminhoCompleto);
}
I hope it helps.
My suggestion would be to test saving the file with an absolute path. It is possible that the FPDF is saving to a temporary folder where it is running and different from the one PHP is using. By controlling the absolute path you will always be sure where the file is and can correctly attach.
– Leite
I think I was able to find out where the error is. In the FPDF implementation, it uses the file_get_content() function. I tried to run the function separately in a basic example, but the function did not run and the file was not created. I believe the error is linked to this function.
– Lucca Bibar
This seems to be a problem with the permissions where the FPDF is trying to write/read the file.
– Leite