2013-03-26 2 views
1

저는 집의 로컬 네트워크에 작은 파일 공유 서버를 설치하려고하는데 업 로더와 관련된 큰 문제가 있습니다. 문제가있는 단계는 디렉토리 생성 단계이지만, 처음 게시했을 때 아파치 로그 파일에 오류가 없었습니다. 이는 지연 파일에 대한 사용 권한 문제의 결과로 드러났습니다.PHP mkdir이 오류없이 실패했습니다

이것은 관련 로그 항목입니다. 나는 십자가 디렉토리 인// 서버와 sudo는 chmod를 0777/서버/* sudo는 chmod를 0777/서버 를 실행했기 때문에

[Mon Mar 25 18:43:05 2013] [error] [client 10.0.0.17] PHP Warning: mkdir(): Permission denied in /server/upload_movie.php on line 10, referer: http://10.0.0.17/upload_movie.html 

그것은 나를 혼란.

starting 
filetype parsed 
checking upload directory 
upload directory not found, creating...directory creation failed at /downloads/movies/unsorted/ 
checking file 
error: 
Type: 
Name: 
Size: 0 kB 
Temp file: 
extension: 

을 다음과 코드가 내가 PHP mkdir: Permission denied problem의 모든 제안을 시도하고있다

<form enctype="multipart/form-data" action="upload_movie.php" method="POST"> 
<input name="uploadedfile" type="file" /><br /> 
<input type="submit" value="Upload File" /> 
</form> 

입니다 전화로 출력이

<?php 
echo "starting". "<br>"; 
$allowedExts = array("mp4", "mpg", "avi", "mkv"); 
$extension = end(explode(".", $_FILES["uplodedfile"]["name"])); 
echo "filetype parsed". "<br>"; 
$path = "/downloads/movies/unsorted/"; 
echo "checking upload directory". "<br>"; 
if(!is_dir($path)){ 
    echo "upload directory not found, creating..."; 
    if (mkdir($path,0777,true)) 
     { 
     echo "directory creation complete". "<br>"; 
     } 
    else 
     { 
     echo "directory creation failed at ".$path."<br>"; 
     } 
} 
echo "checking file". "<br>"; 
if (false) 
    { 
    echo "filetype and size passed". "<br>"; 
    if ($_FILES["uplodedfile"]["error"] > 0) 
    { 
    header('Location: upload_failure.php?file='.$_FILES["uplodedfile"]['name'].'&error='.$_FILES["uplodedfile"]["error"]); 
    exit(); 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 

    if (file_exists("upload/" . $_FILES["uplodedfile"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists on server. ". "<br>"; 
     } 
    else 
     { 
     echo "creating perminant copy of file". "<br>"; 
     move_uploaded_file($_FILES["uplodedfile"]["tmp_name"], 
     $path."/" . $_FILES["uplodedfile"]["name"]); 
     echo "Stored in: " . "movie_uploads/" . $_FILES["file"]["name"]. "<br>"; 
     } 
    } 
    header('Location: upload_success.php?type=movie'); 
    exit(); 
    } 
else 
    { 
    echo "error:<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Name: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 
    echo "extension: ".$extension; 
    exit(); 
    // echo "Invalid file"; 
    } 
?> 

다음과 같이

내 코드입니다 나는 selinux를 꺼 놓았다. 나는 fedora 17을 사용하고 있습니다. 서버는 다른 것을 포함하고있는 ext4 파티션에서 실행 중입니다.

의견에 제안 된대로 시도했습니다. $ error = error_get_last(); echo $ error [ 'message']; 어느 쪽이든 정의되지 않은 색인 : 파일

+0

'error_reporting'을 (를) 활성화 했습니까? '/'루트 디렉토리가 world-writable 인 경우를 제외하고는 메시지가 있어야합니다. (아니,하지 마!) – mario

+0

오류를 얻으려면이 추가, 그것은 일종의 권한 문제, 어떤 식 으로든 오류 코드를 시도해보십시오 코드 : $ error = error_get_last(); echo $ error [ 'message']; –

+0

마리오가 맞다면 디렉토리의 사용 권한을 확인해야합니다. –

답변

0

/server-directory에 대한 올바른 권한을 설정 한 것으로 보입니다. 그러나 서버가/downloads- 디렉토리에 쓰기를 원합니다. 다음 명령으로 실행해야합니다.

Sudo chmod 777 /download 
0

오류 메시지가 모든 것을 알려줍니다. 파일 쓰기 권한 문제입니다./downloads/movies/unsorted /에 파일을 쓰려면이 디렉토리에 대한 쓰기 권한 (777)을 설정해야합니다. 그러나 다운로드 디렉토리에 대한 권한을 이미 확인했지만 반복 디렉토리에 대한 권한을 설정하지 않았다고 가정합니다. 그래서 파일을 업로드하기 전에 아래 명령을 시도하십시오.

Sudo chmod -R 777 /download 
관련 문제