2011-04-22 2 views
4

Est-il possible de créer une extension de fichier .pdf lors de l'utilisation de tempname? Je dois envoyer un e-mail avec un fichier créé en utilisant tempname. (Je peux envoyer le fichier, mais j'ai besoin de l'extension .pdf)Création d'un fichier temporaire avec l'extension .pdf php tempnam

+1

Est-ce vraiment un sens? Si le courriel ne contient aucune autre pièce jointe, pourquoi ne pas le nommer 'attachment.pdf' ou quelque chose de significatif lié au contenu du courriel? –

+0

Je souhaite utiliser un emplacement temporaire pour stocker le fichier (pas dans le répertoire de l'application). Si vous pouvez penser à une autre façon, faites le moi savoir. –

+0

@Chris mais pourquoi le fichier temporaire doit-il avoir une extension .PDF? –

Répondre

1

Vous pouvez attribuer au nom de fichier un nom quelconque dans l'en-tête MIME du message multi-parties.

+1

Pourriez-vous ajouter un exemple de l'en-tête de Mime pour les lecteurs qui n'y sont pas habitués, ne pas avoir besoin de google à ce sujet aussi. –

0

Non, ce n'est pas possible avec tempnam. Vous devrez écrire votre propre fonction pour cela, par exemple en utilisant l'heure actuelle. Le problème ici est d'éviter les conditions de course, mais peut éventuellement être résolu en incluant le PID dans le nom de fichier, comme ceci:

do { 
    $filename = rand(); 
    $filename .= '.'. str_replace(' ', '.', microtime()); 
    $filename .= '.'. getmypid(); 
    $filename .= '.pdf'; 
} while(file_exists($filename)); 

Si le répertoire est partagé entre les différentes machines, le PID n'est pas garanti d'être unique. Dans ce cas, incluez également le nom d'hôte de la machine en cours (tel que renvoyé par gethostname).

0

J'utilise une fonction comme celui-ci pour les noms temporaires uniques:

function tempnam_sfx ($path, $suffix) { 
if(!is_dir($path)){ 
    mkdir($path, 0777, true); 
}  

do { 
    $file = $path . DIRECTORY_SEPARATOR . mt_rand() . $suffix; 
} while (file_exists($file));    

return $file; 
} 
2
$tempname = tempnam('', 'report_'); 
rename($tempname, $tempname .= '.pdf'); 
var_dump($tempname, is_file($tempname));