2009-07-22 5 views
0

1.Hi, 파일을 디렉토리에 업로드하는 내부 용 파일 업로드 스크립트가 있습니다. 이름에서 spcace가있는 컴퓨터에서 무언가를 업로드하면 (예 : 1.zip) 이름에 공백이있는 상태로 업로드되므로 이메일 링크가 삭제됩니다. apache가 업로드 될 때 공간을 제거하거나 밑줄을 만들 수 있습니까?파일 이름에 공백을 제거하십시오. apache

내가 겪고있는 두 번째 문제는 전자 메일의 본문으로 링크의 전자 메일 링크를 전자 메일 링크로 만들기 위해 어떻게 해석합니까?

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $_FILES['file']['name'])) { 
    // uploaded file was moved and renamed succesfuly. Display a message. 
    echo "Link: " . "http://example.org/" . $_FILES["file"]["name"]; 

답변

7

당신은 당신의 파일 이름을 urlencode()해야 할 모든 것이 괜찮 :

echo "Link: http://example.org/" . urlencode($_FILES["file"]["name"]); 

그러나 다른 이유로 공백을 제거하려는 경우, 당신은 사용할 수 있습니다 str_replace() :

$replaced_name = str_replace(' ', '_', $_FILES["file"]["name"]); 
rename($uploaddir . '/' . $_FILES['file']['name'], $uploaddir . '/' . $replaced_name); 
# You should urlencode() it nonetheless: 
echo "Link: http://example.org/" . urlencode($replaced_name); 
+0

링크를 몸에 붙여서 메시지에 아무 것도없는 것처럼 링크를 mailto로 사용하려면 어떻게해야합니까? – hnhh

+0

다음 RFC : http : // 도구의 예제 섹션을 살펴보십시오. .ietf.org/html/rfc2368 # section-6 – soulmerge

+0

감사합니다. 정말 도움이되었습니다. –

1

시도 :

$filename = $_FILES['file']['name']; 
$filename = preg_replace("/[^a-zA-Z0-9]/", "", $filename); 

//then 
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $filename)) { 

// uploaded file was moved and renamed succesfuly. Display a message. 
echo "Link: " . "http://example.org/" . $filename; 
+0

고마워요! 어떻게하면 내가 좋아하는 것과 같은 이메일을 할 수 있을지에 대한 질문이 – hnhh

+0

이 링크를 이메일로 보내시겠습니까? – Nathan

+0

기본적으로 링크에 본문 텍스트가있는 mailto : [email protected]을 반향시키고 싶습니다. – hnhh

1

참고 사항 : 사용중인 코드에서 이름이 같은 두 개의 파일을 업로드하면 어떻게됩니까? (예 : 에 이미 $uploaddir?에 해당 이름의 파일이 있습니까?) 체크하지 않으면 두 번째 파일이 첫 번째 파일을 대체합니다.

그게 당신이 원하는게 아니겠습니까 ... 그게 맞습니까?

그렇지 않은 경우, 잠재적 인 문제를 해결하려면 업로드 된 파일의 이름을 항상 으로 바꾸는 것이 해결책입니다.

또 다른 한가지는 (것 아마 트릭에 대한 간단한 카운터) : $_FILES["file"]["name"]은 같은, 아마 누군가가 원하는 것이 무엇이든 포함에 위조 될 수 있으며, 클라이언트가 보낸하고있다. 이 파일에 "../../index.php"(또는 이와 비슷한 내용 - 사용자가 아이디어를 얻음)과 같은 내용이 있으면 원하는 파일을 서버에 저장할 수 있습니다.

이런 일이 발생하지 않도록하려면 move_uploaded_file의 대상으로 사용 된 파일 이름/경로에 "위험한"내용이 없는지 확인하십시오. 해결책은 basename 일 수 있습니다. (예 : POST method uploads의 예 # 2를 참조하십시오.)

업로드 된 파일의 MIME 형식을 확인하여 실행 파일을 확보하지 못할 수도 있습니다. 업로드 한 파일이 웹 서버에서 실행할 수 있습니다.

관련 문제