2016-06-07 7 views
1

한 명의 사용자 (사이트 관리자 및 소유자)가 자신의 사진을 사이트의 갤러리에 업로드 할 수있는 사이트를 만들고 있습니다. 사진을 업로드해도 문제는 없지만 디렉토리로 옮기려고하면 오류가 발생합니다. ecowebhosting.co.uk의 cpanel에 대한 모든 권한을 허용하는 등 많은 것을 시도했습니다. 하지만 내 스크립트는 그룹 권한없이 어쨌든 업로드 할 수 있어야합니다. 여기 내 PHP 스크립트입니다 :PHP move_uploaded_file 서버 오류

$target_dir = "/assets/collages/"; 
$target_file = $target_dir.basename($_FILES['image']['name']); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 

$upload_dir = $_SERVER['DOCUMENT_ROOT'] . "assets/collages/"; 

if (is_dir($upload_dir)) { 
    // do upload logic here 
} else { 
    echo 'Upload directory is not writable, or does not exist.'; 
} 

if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["image"]["tmp_name"]); 
    if($check !== false) { 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image.<br>"; 
     $uploadOk = 0; 
    } 

    if (file_exists($target_file)) { 
     echo "Sorry, file already exists.<br>"; 
     $uploadOk = 0; 
    } 

    // Check if $uploadOk is set to 0 by an error 
    if ($uploadOk == 0) { 
     echo "Sorry, your file was not uploaded.<br>"; 
    // if everything is ok, try to upload file 
    } else { 
     if (move_uploaded_file($_FILES["image"]["name"], $target_file)) { 
      echo "The file ". basename($_FILES["image"]["name"]). " has been uploaded."; 
     } else { 
      echo "Sorry, there was an error uploading your file.<br>"; 
     } 
    } 
} 

그리고 여기 내 양식 (사용하여 부트 스트랩)입니다 :

<form method="post" enctype="multipart/form-data"> 
    <div class="row"> 
     <div class="col-md-2"> 
      <div class="form-group"> 
       <label for="year">Year</label> 
       <input type="text" name="year" id="year" placeholder="Year" class="form-control" /> 
      </div> 
     </div> 
    </div> 

    <div class="row"> 
     <div class="col-md-4"> 
      <div class="form-group"> 
       <label for="title">Title</label> 
       <input type="text" name="title" id="title" placeholder="Title" class="form-control" /> 
      </div> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label for="image">Image File</label> 
     <input name="image" type="file" id="image"> 
     <p class="help-block">Chose the collage image you would like to add.</p> 
    </div> 

    <button type="submit" class="btn btn-success" name="submit">Submit</button> 
</form> 

그리고 마지막으로, 그것은 호스팅 패키지, 그래서 그 만들 것 나도 몰라 차이.

+0

그리고 어떤 오류가 발생합니까? 웹 서버 로그에 액세스 할 수 있는지 확인하십시오 (어쩌면 공급자 제어판에서). –

+0

@MarcCompte xxxxxxxxx.com xx.xxx.xx.x - - [07/Jun/2016 : 22 : 41 : 12 +0100] "http://xxxxxxxx.com/ftpriurNj.cgi를 구하십시오. HTTP/1.1"200 169 " - ""JustAnInstaller/0.1 "이것은 내 기록에있는 모든 것입니다. – Twonty2

+0

CGI 파일에 대한 GET 호출에 대한 항목입니다. PHP 파일에 대한 POST 호출에 대해 뭔가가 있어야합니다. –

답변

1

잘못된 매개 변수 :

if (move_uploaded_file($_FILES["image"]["name"], $target_file)) { 
              ^^^^ 

당신은 tmp_name를 원한다. Name은 클라이언트가 제공 한 파일 이름이지만 정보 용일뿐입니다. 서버가 임시로 파일을 저장 한 곳의 실제 파일 이름은 tmp_name입니다. 따라서 서버에없는 파일을 이동하려고합니다.

업로드가 성공했다고 가정하고 있습니다. 파일이 실제로 이미지인지 제대로 확인하는 동안 $_FILES['image']['error'] FIRST를 확인해야합니다. 업로드가 중간에 실패 할 수있는 많은 방법이 있지만 여전히 getimagesize를 전달합니다.이 함수는 파일의 첫 번째 k 바이트 정도만 이미지 magicnumbers/headers 정보를 가져옵니다.

+0

오 와우. 나는 그것을 놓쳤다는 것을 믿을 수 없다. 감사. 그러나 문제는 해결되지 않았습니다. 여전히 업로드 할 수 없다는 말입니다. cpanel의 파일 관리자에있는 폴더에 대한 내 권한은 소유자의 쓰기 및 실행 읽기를 허용하지만 그룹에 대한 쓰기를 허용해야합니까? 나는 그 개념을 완전히 이해하지 못한다고 믿는다. 하지만 오류가 계속 발생하는 경우 권한이 필요하다고 생각합니다. 이미지 검사 당, 나는 테스터로서 내가 업로드하고있는 파일이 이미지라는 것을 알고 있기 때문에 반드시이 단계에서 그것을 필요로하지는 않는다. 하지만 나중에 추가 할 것입니다. 나중에 고마워. – Twonty2

+0

또한, 내 서버 로그 (내가 오류가 있다고 가정하는 곳)가 비어 있습니다. – Twonty2

+0

이 작업은 웹 서버에서 실행되므로 모든 파일 작업이 웹 서버 사용자 ID로 수행됩니다. 따라서 사용자가 필요한 권한을 설정하면 해당 사용자가 필요한 작업을 수행 할 수 있어야합니다. –