簡體   English   中英

當網站在線托管時,PHP 中的 move_uploaded_file() 失敗的原因是什么?

[英]What are the reasons of failing move_uploaded_file() in PHP when the website is hosted online?

我已經編寫了一個使用 PHP 上傳圖像的代碼,它在我的本地主機服務器上運行良好,但是當我將網站上傳到在線服務器時,函數 move_uploaded_file() 返回 false。

這是我的 HTML 代碼

<input type="file" name="selectImg" id="selectImg" accept="image/jpg, image/jpeg" style="display: none;">
<label for="selectImg" class="btn btn-primary" style="border-radius: 29px; outline: none;" > Chose a Image</label>
<button class="btn btn-success" style="border-radius: 29px;outline: none;" id="upload">Upload</button>

發送數據的 AJAX 函數

function sendData(name,pid,file){
  let data = new FormData();
  data.append('file',file);
  data.append('pid',pid);
  data.append('name',name);

  console.log(data);
  $.ajax({
    type: "post",
    url: "upload.php",  
    data :data,
    processData: false,
    contentType: false,
    success: function(data) {
      // if(data=='UPLOADED SUCCESSFULLY'){
      //   alert(data);
      //   location.reload();
      // }
      alert(data);
    }
  });
}

這是我的 JavaScript 代碼

uploadBtn.addEventListener("click",function(){

  if(file){
    
    let fName = file['name'].split(".");
    // console.log(fName);

    if(fName[1] == "jpeg" || fName[1] == "jpg"){

      let pid = document.getElementById('pID').value;

      let name = file['name'];
      let url = window.location.href.split("=");
      
      sendData(name,pid,file);
      
      
    }else{
      alert('Please Select a jpeg/jpg file');
    }


  }else{
    alert('Please Select an image');
  }

});

這是 PHP 代碼

if(isset($_POST['pid'])){

    $pid = $_POST['pid'];
    $imgFile = $_FILES['file'];
    $iName = $_POST['name'];
    $loc = $_FILES['file']['tmp_name'];
    $path = "../assets/uploads/".basename($_FILES['file']['name']);
    $serverPath = "assets/uploads/".$iName;
    $size = filesize($loc);
    if(move_uploaded_file($loc,$path)){
        $pathquery = "INSERT INTO `images` (`path`, `pid`, `status`) VALUES ('$serverPath', '$pid', 'ACTIVE');";
        echo $pathquery;
        $sendPathQuery = mysqli_query($conn,$pathquery);
    }else{
        echo "File Not Uploaded";
    }
}else{
    echo "FILE NOT UPLOADED !!!";
}

上面的代碼在本地主機服務器上完美運行,但上傳時 move_uploaded_file() 函數返回 false。

檢查 Web 服務器是否具有寫入/assets/uploads/目錄的權限

或者添加這個以獲得全面的答案:

$moved = move_uploaded_file($loc,$path);

if( $moved ) {
  echo "Successfully uploaded";         
} else {
  echo "Not uploaded because of error #".$_FILES["file"]["error"];
}

move_uploaded_file

如果 from 不是有效的上傳文件,則不會發生任何操作,並且 move_uploaded_file() 將返回 false。

如果 from 是一個有效的上傳文件,但由於某種原因無法移動,則不會發生任何動作,並且 move_uploaded_file() 將返回 false。

檢查文件和目錄的權限。 看:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM