2014-10-30 2 views
-1

업로드 된 파일에 move_uploaded_file을 사용할 때마다 파일은 항상 내 웹 루트에서 종료됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 경로가 웹 루트와 관련이 있거나 파일 시스템의 절대 경로 여야합니까?PHP move_uploaded_file은 항상 웹 루트에서 끝납니다.

궁극적으로 내가 뭘 하려는지, 그것은 업로드/dowload 파일에 대한 PHP 폴더가 있습니다. 나는 웹 로봇과 다른 사람들이 파일에 액세스 할 수 있기를 원치 않으며, 인증 된 사람들 만 내 웹 사이트를 사용하여 파일을 다운로드 할 수 있기를 원합니다.

/var/www/website/public_html 

/var/www/website/files 

을 내 인 move_uploaded_file 명령은 다음과 같이이다 : 그래서 내가 내 파일 구조가 배치 한 방법이다

move_uploaded_file($_FILES['txtFileSelector']['tmp_name'], "/var/www/website/files/".$_FILES['txtFileSelector']['name']); 

하지만 문제는 내가 시도했다 파일은 항상 /var/www/website/public_html에 끝납니다. public_html의 다른 하위 폴더에서도 파일을 전송하려했지만 여전히 운이 없었습니다.

+1

사용 인 move_uploaded_file ($ _ FILES [ 'txtFileSelector'] [ 'tmp_name'],에 getcwd(). DIRECTORY_SEPARATOR. '파일 사이에 큰 차이가 있습니다 /'.$ _FILES [ 'txtFileSelector'] [ 'name'])); –

답변

0

아 - 하! 대상 경로는 상대 경로입니다.

그래서 나를 위해 솔루션입니다 :

때문에 상대 경로 지정, 사용
echo move_uploaded_file($_FILES['txtFileSelector']['tmp_name'], "../files/".$_FILES['txtFileSelector']['name'] 

는 .../웹 루트에서 이동 한 다음 원하는 저장 폴더로 이동합니다.

교정

절대 경로 또는 상대 경로가 작동합니다. 폴더 권한 (www 데이터는 소유자 또는 읽기/쓰기 권한이있는 그룹 구성원이어야 함)과 내가 바보가되어 프로그래밍 버그를 발견하는 조합이었습니다. 내 코드는 PHP 클래스에 있었고 업로드 기능이있었습니다. 내 생성자에서 나는 코드에 버그가있다. OO를 수행 할 때

$upload_dir = "/path/to/upload"; 

$this->upload_dir = "/path/to/upload"; 
+0

상대 경로를 사용하는 경우 상대 경로입니다. 원래의 글에서는 ('/'로 시작하는) 절대 경로를 사용하기 때문에 절대 경로 여야합니다. 뭔가 이상해! – deceze

관련 문제