2011-04-22 25 views
4

tempnameを使用しているときに.pdfファイル拡張子を作成することはできますか?私はtempnameを使用して作成されたファイルを電子メールで送信する必要があります。 (ファイルを送信できますが、.pdf拡張子が必要です).pdf拡張子を持つ一時ファイルを作成するtempnam

+1

これは本当に理にかなっていますか?電子メールに他の添付ファイルが含まれていない場合は、電子メールの内容に関連して「attachment.pdf」とか何か意味のある名前を付けてください。 –

+0

ファイルを保存するために一時的な場所を使用したい(私のアプリケーションディレクトリではない)。あなたが別の方法を考えることができれば私に知らせてください。 –

+0

@Chrisしかし、一時ファイルの拡張子が.PDFである必要があるのはなぜですか? –

答えて

1

マルチパートメッセージ内のMIMEヘッダーに任意の名前を付けることができます。

+1

それに慣れていない読者のためにMimeヘッダーのサンプルを追加できますか?Googleについてはこれも必要ありません。 –

0

いいえ、tempnamでは不可能です。たとえば、現在の時刻を使用して、独自の関数を記述する必要があります。ここでの問題は、競合状態を避けるためですが、それはおそらく、このようなファイル名でPIDを含むことによって解決することができます:ディレクトリが異なるマシン間で共有されている

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

場合PIDは一意であることが保証されていません。その場合は、現在のマシンのホスト名(gethostnameによって返される)も含めます。

0

私は一時的にユニークな名前のために、このような関数を使用します。

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)); 
関連する問題