2011-08-11 1 views
0

나는 사용자가 파일을 업로드하게하고 중복 및 기타 위험을 피하기 위해 한 필드에 원래 파일 이름의 이름을 저장하고 다른 하나는 파일의 이름을 바꾼 이름을 저장합니다. 그래서 내가 그들을 다운로드하게 할 때, 나는 그것들을 원래의 이름으로 다운로드 할 수 있기를 원하지만 우리 서버에 그것의 이름을 바꾼 버전을 사용하고 싶습니다.어떻게 두 개의 파일 이름을 가질 수 있으며 둘 중 하나를 사용하여 파일을 제공 할 수 있습니까?

샘플 :

$ 원본이 = 사용자가

$가 이름을 바꾼 파일을 지정한 이름 = 우리가

header('Content-type: application/octet-stream'); // concatenation 
    header("Content-disposition: attachment; filename=$original"); // double quotes 
    $filename="../../../../docs/doc/$renamed"; 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($filename)); 
    ob_clean(); 
    flush(); 
    readfile($renamed); // no quotes needed 

내가이 일을하려고 파일을하는 듯했으나 이름은 원래 이름이기 때문에 데이터베이스에 저장되고 실제 파일 이름은 이름이 바뀐 이름입니다. 어떻게이 작업을 수행 할 수 있습니까?

+0

두 이름을 모두 데이터베이스에 저장하십시오. 머리글에 원래 이름을 보내고 이름이 변경된 이름을 디스크에서 읽습니다. –

답변

5
header("Content-disposition: attachment; filename=" . urlencode($original)); 
readfile($renamed); 
+0

헤이 나는 그것을 사용하지만 내가 그것을 말할 때 : 파일을 열 수 없습니다. 미리보기에서 인식 할 수없는 파일 형식이나 파일이 손상되었을 수 있습니다. 내 질문에 내가 무엇을 사용하고있는 업데이 트를 참조하십시오. – KPO

+1

어, 사용해야하는 파일 이름이 다르면 ('$ filename'?) 대신 그 파일 이름을 사용해야합니다. –

+0

나는 잘 모르겠다. 매우 혼란. $ orignal은 파일의 원래 이름입니다. $ rennamed는 새로운 이름입니다. – KPO