2012-03-05 4 views
1

dir에있는 모든 파일을 나열하는 코드가 있습니다. 그것이 내가 유일하게 각 파일을 확인하고 다음 페이지로 $ _GET이나 $ _POST 또는 뭔가를 전달해야하는 echo "some.php?file=".$image; 말한다 곳디렉토리에서 고유 한 파일을 식별하는 방법은 무엇입니까?

//path to directory to scan 
$directory = "../images/team/harry/"; 

//get all image files with a .jpg extension. 
$images = glob($directory . "*.jpg"); 

//print each file name 
foreach($images as $image) 
{ 
    echo "some.php?file=".$image; 
} 

링크 부분에서 다음 코드는 다음과 같이 보입니다. 그러나 파일 이름에는 특수 문자 (발음 구별 기호), 공백 등이 포함될 수 있습니다. 다음 페이지에서 그들을 식별하는 좋은 방법은 무엇입니까? ID와 같은 것, 아마도 base64_encode/decode 또는 유사할까요? (단순히 카운터를 사용하면 파일이 잘못된 결과를 가져올 수있는 시간에 삭제 될 수 있으므로 신뢰할 수 없습니다)

+0

예를 들어 사용자가 데이터베이스를 만들고 자동으로 업데이트합니다. cronjob. 또는 당신은 함께 base64 할 urlencode;) – androidavid

답변

2

Base64로 아마 잘 트릭을 할 것입니다 :

echo "some.php?file=".base64_encode($image); 

및 페이지

는 GET 쿼리를 수신 :

$image=base64_decode($_GET['file']); 

또 다른 제안은 저장소 사용자의 업로드 된 파일에 대한 데이터베이스를 사용하는 것입니다. 업로드시 각 이미지는 ID와 파일 이름의 예제 열과 함께 DB에 저장됩니다. 그런 다음 해당 ID를 GET var에 할당하고 반대쪽에는 지정된 ID에서 파일 이름을 가져올 수 있습니다.

0

"urlencode/urldecode"로 파일 이름을 삭제하는 것은 어떻습니까? http://www.php.net/manual/en/function.urlencode.php

+0

그럼에도 불구하고 나는 base64 + urlencode를 사용하여 훨씬 더 안전한 유형의 서버면을 사용하는 것이 좋습니다! AFAIK :이 경우에는 urldecode가 필요하지 않습니다.) – androidavid

1

요청한 파일이 존재하지 않을 수도 있습니다. 먼저 md5 문자열을 생성하고 전달하는 것이 좋습니다. 생성 된 문자열이 있는지 확인하여 사용할 수 있는지 확인해야합니다. 그렇지 않으면 간단한 8 자리 숫자로 충분하며 업로드시 지정해야합니다. 파일이 삭제 된 경우 some.php은 사용자에게 오류를 표시해야합니다.

base64를 사용한 다음 다시 some.php에서 디코딩하는 것을 고려하지 않았습니다. 이 URL은 복사하는 데 아주 오래 걸리고 보안 문제를 나타낼 수 있습니다. 단, PHP가이를 방지 할 수 있기를 바랍니다. 또한 URL은 사용자가 실수로 base64를 변경하여 임의로 생성 된 그림으로 끝나기에 충분하지 않습니다. ...

+0

FTP에서 파일을 업로드하므로 파일 이름을 제어 할 수 없으며 업로드 할 때 어떤 기능도 호출 할 수 없습니다 ... 불행히도 ... – Michal

+0

아, 나는 모두 제공됩니다. 고유 한 파일 이름 (동일한 dir에 있어야 함). 그런 다음 md5 옵션을 사용합니다. –

관련 문제