2011-04-22 7 views
4

tempname을 사용할 때 .pdf 파일 확장자를 만들 수 있습니까? tempname을 사용하여 만든 파일로 전자 메일을 보내야합니다. (파일을 보낼 수는 있지만 .pdf 확장자가 필요합니다.).pdf 확장명이 tempnam 인 임시 파일 만들기

+1

이 정말 이해가 않습니다 –

+0

내 응용 프로그램 디렉토리가 아닌 파일을 저장하기 위해 임시 위치를 사용하고 싶습니다. 네가 다른 방법을 생각하면 나 한테 알려줘. –

+0

@Chris하지만 임시 파일의 확장자가 .PDF 여야하는 이유는 무엇입니까? –

답변

1

멀티 파트 메시지의 MIME 헤더에 파일 이름을 지정할 수 있습니다.

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; 
} 
+1

익숙하지 않은 독자를 위해 Mime 헤더의 샘플을 추가 할 수 있습니까? Google에 대해서도 그렇게하지 않아도됩니다. –

0

아니요, tempnam에서는 불가능합니다. 현재 시간을 사용하는 등 자신 만의 함수를 작성해야합니다. 여기서 문제는 경쟁 조건을 방지하는 것입니다,하지만 아마도이 같은 파일 이름에 PID를 포함하여 해결할 수 있습니다 : 디렉토리가 서로 다른 시스템간에 공유되는

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

경우 PID가 고유하지 않을 수도 있습니다. 이 경우 gethostname에 의해 반환 된 현재 컴퓨터의 호스트 이름도 포함시킵니다.

0

내가 임시 고유 한 이름이 같은 함수를 사용할 수 있습니까? 전자 메일에 다른 첨부 파일이 포함되어 있지 않으면 전자 메일 내용과 관련하여 '첨부 파일 .pdf'또는 의미있는 이름을 지정하십시오.
2
$tempname = tempnam('', 'report_'); 
rename($tempname, $tempname .= '.pdf'); 
var_dump($tempname, is_file($tempname)); 
관련 문제