2013-05-28 2 views
0

두 개의 파일 (HTML 및 PHP)이 있습니다. 사용자는 html 형식의 파일을 업로드하고 php 파일은 파일을 서버에 업로드하는 스크립트를 포함합니다. 완벽하게 작동합니다. 내 문제는 사용자 1이 'wordThing.docx'를 업로드하고 사용자 2가 함께 올 때 'wordThing.docx'를 업로드하면 사용자 1의 파일이 무시됩니다.PHP에서 입력 파일 이름에 세부 정보를 추가하는 방법

여기 내 HTML 코드입니다 :

<html> 
<body> 
<form action="upload_file.php" method="post" enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file"><br /> 

<label for="yourName">Your name:</label> 
<input type="textbox" name="yourName" id="yourName" /><br /> 
<input type="submit" name="submit" value="Submit"><br /> 
</form> 
</body> 
</html> 

그리고 이것은 내 PHP 스크립트입니다 : 나는 사용자가 'YOURNAME'에 입력하면 텍스트를 첨부하고 싶은

<?php 
$userName=$_POST['yourName']; 
$target_path = "uploads/"; 
$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
{ 
    echo "The file ". basename($_FILES['uploadedfile']['name']). 
    " has been uploaded"; 
} 
else 
{ 
    echo "There was an error uploading the file, please try again!"; 
} 
?> 

. 따라서 서버에는 다른 파일 이름이 포함되어 있으며 어느 것도 덮어 쓸 필요가 없습니다. 그래서 사용자가 다른 이름을 가지고 있다고 가정하고, 이름을 붙인 서버에 파일을 저장하는 방법을 알고 싶습니다. 예 : 사용자 1의 파일 업로드는 'wordThingSusan.docx'입니다.

이 정보가 너무 많지 않기를 바랍니다. 나는 단지 명확하고 정밀 해지고 싶었다. 누군가이 코드를 사용하려고하는 경우 디렉토리에 'uploads'라는 폴더가 있어야 작동 할 수 있습니다.

+0

코드는 업로드가 항상 성공했다고 가정합니다. ** 좋은 생각이 아닙니다 **. 오류를 나타내는 0이 아닌 코드에 대해 항상'$ _FILES [ 'uploadedfile'] [ 'error']'를 확인하십시오. –

+0

고마워, 마크. 그것을 들여다 볼 것입니다. –

답변

2

변화

$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

$target_path = $target_path . time() . rand(11, 99) . basename($_FILES['uploadedfile']['name']); 

에 생성 된 이름은 업로드 같은/123456789052wordThing.docx

시간 (예정) (형식 1234567890, 랜드 당신에게 시간을 줄 것이다 11,99)는 11과 99 사이의 난수를 생성하므로 2 명이 동일한 파일을 동시에 업로드하더라도 파일을 덮어 쓰지 않습니다.

+0

고마워, 딥시. 나는 그 생각을했으면 좋았을 텐데. 완전히 이해할 수 있습니다. –

+0

딥시, 스크립트로 PDF 파일을 업로드 할 수없는 이유가 있습니까? 다른 모든 파일, 이미지, 문서 등을 시도했지만 PDF 파일은 업로드되지 않습니다. –

+0

@EliSkywalker 다음 코드에서 형식 제한이 표시되지 않으며 모든 형식에서 올바르게 작동합니다. 어떤 오류가 있습니까? 파일이 어떻게 든 부러지지 않았 니? $ _FILES [ 'uploadedfile'] [ 'error']를 인쇄하여 오류 코드가 반환되는지 확인할 수 있습니다. 또한 move_uploaded_file()이 실패 했습니까? – Deepsy

1

그냥 파일 이름의 시작 부분에 유닉스 타임 스탬프를 추가

<?php 
    $userName=$_POST['yourName']; 
    $target_path = "uploads/"; 
    $target_path = $target_path . date('U') . '_' . basename($_FILES['uploadedfile']['name']); 
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
    { 
     echo "The file ". basename($_FILES['uploadedfile']['name']). " has been uploaded"; 
    } else { 
     echo "There was an error uploading the file, please try again!"; 
    } 

>

+0

감사합니다, Phil ... –

0
나는 file_exists 방법으로 보일 것이다

: 검사가 제공된 경우

http://php.net/manual/en/function.file-exists.php

파일이 이미 존재하는지 다시 확인하고 파일의 이름을 바꾼 다음 새 이름으로 저장합니다.

그렇게 시도 할 것입니다.

+0

아아, 예 ... 파일이 있는지 확인하고, 조건이 참이면 다른 이름으로 저장하고, 그렇지 않으면 저장하십시오. 좋은. –

관련 문제