2017-05-05 77 views
-1

file_upload_parser.php無法使用PHP和Javascript

<?php 

var_dump($_FILES); 

if (isset($_FILES['file'])) { 
    var_dump($_FILES); 

    $fileName = $_FILES["file"]["name"]; 
    $fileTmpLoc = $_FILES["file"]["tmp_name"]; 
    $fileType = $_FILES["file"]["type"]; 
    $fileSize = $_FILES["file"]["size"]; 
    $fileErrorMsg = $_FILES["file"]["error"]; 

    if (!$fileTmpLoc) { 
     echo "ERROR: Please browse for a file before clicking the upload button."; 
     exit(); 
} 

if(move_uploaded_file($fileTmpLoc, "uploads/$fileName")){ 
    echo "$fileName upload is complete"; 
} else { 
    echo "move_uploaded_file function failed"; 
} 
} else { 
    echo "File not found."; 
} 

?> 

Javascript功能來上傳文件:

function _(el){ 
    return document.getElementById(el); 
} 

function uploadFile() { 
    var file = _("file").files[0]; 
    alert(file.name+" | "+file.size+" | "+file.type); 
    var formdata = new FormData(); 
    formdata.append("file", file); 
    var ajax = new XMLHttpRequest(); 
    ajax.upload.addEventListener("progress", progressHandler, false); 
    ajax.addEventListener("load", completeHandler, false); 
    ajax.addEventListener("error", errorHandler, false); 
    ajax.addEventListener("abort", abortHandler, false); 
    ajax.open("POST", "file_upload_parser.php"); 
    ajax.send(formdata); 
} 

function progressHandler(event){ 
    _("loaded_n_total").innerHTML = "Uploaded "+event.loaded+" bytes of "+event.total; 
    var percent = (event.loaded/event.total) * 100; 
    _("progressBar").value = Math.round(percent); 
    _("status").innerHTML = Math.round(percent)+"% uploaded... please wait"; 
} 

function completeHandler(event){ 
    _("status").innerHTML = event.target.responseText; 
    _("progressBar").value = 0; 
} 

function errorHandler(event){ 
    _("status").innerHTML = "Upload Failed"; 
} 

function abortHandler(event){ 
    _("status").innerHTML = "Upload Aborted"; 
} 

形式:

<form name="uploads" action="file_upload_parser.php" enctype="multipart/form-data" method="post" class="form-horizontal" id="_uploads"> 
    <div id="container"> 
    <div class="row"> 
     <div class="col-sm-12"> 
     <div class="panel panel-default"> 
      <div class="panel-heading"> 
      <h3 class="panel-title">Uploads</h3> 
      </div> 
      <div class="panel-body"> 
      <div class="form-group"> 
       <label class="col-sm-2 control-label" for="_file"> </label> 
       <div class="col-sm-10"> 
       <input type="file" name="file" id="file"> 
       </div> 
      </div> 
      <div class="form-group"> 
       <label class="col-sm-2 control-label" for="_button"> </label> 
       <div class="col-sm-10"> 
       <button type="button" name="button" value="Upload File" class="btn btn-success" onclick="uploadFile()" id="_button">Upload File</button> 
       </div> 
      </div> 

這就是我得到:

enter image description here

我檢查了我的php.ini文件以驗證文件上傳已打開,並且文件大小的限制足夠高,但每次運行此代碼時,$ _FILE總是空的。 FormData抓取文件並正確地將名稱,大小和類型輸出到控制檯,但與file_upload_parser.php的通信正在進行。

我也確定文件夾&文件權限設置爲完全訪問。

任何想法?

+0

你見過這個http://stackoverflow.com/questions/3586919/why-would-files-be-empty-when-uploading-files-to-php – j08691

+0

只是爲了檢查,你嘗試上傳文件沒有JS,只是正常提交​​表單? – Pango

+0

@ j08691雅在發佈之前我檢查了一下。 – Josh

回答

0

把encription形式

<form method="post" action="index.php" enctype="multipart/form-data"></form> 

入住php.ini文件中的max_execution_time沉重的圖像沒有上傳由於執行時間..並確保媒體文件夾有777權限和路徑../media/是正確的

+0

max_execution_time設置爲300,並且該文件夾具有777權限。 – Josh

+0

hmm id引用我自己的這[LINK](http://php.net/manual/en/features.file-upload.php),但要確保你沒有使用Javascript來禁用你的 Boschko

0

我找到了解決方案。所有的

首先,您需要更改HTML

<!DOCTYPE html> 
<html> 
<body> 
<script src="demo_script_src.js"> 
</script> 

<form name="uploads" action="/testing/file_upload_parser.php" enctype="multipart/form-data" method="post" class="form-horizontal" id="_uploads"> 
    <div id="container"> 
    <div class="row"> 
    <div class="col-sm-12"> 
    <div class="panel panel-default"> 
     <div class="panel-heading"> 
     <h3 class="panel-title">Uploads</h3> 
     </div> 
     <div class="panel-body"> 
     <div class="form-group"> 
      <label class="col-sm-2 control-label" for="_file">File Upload </label> 
      <div class="col-sm-10"> 
      <input type="file" name="file" id="file"> 
      </div> 
     </div>   

     </div> 
     </div> 
     </div> 
    </div> 
</div> 
<button type ="submit" class="btn btn-success pull-right">Submit</button> 
</form>   

</body> 
</html> 

我用public_html下testing文件夾,所以這就是爲什麼action="/testing/file_upload_parser.php"。如果你需要你可以刪除/testing文件夾。您需要通過type="submit"

而在你的JavaScript提交表單,需要改變

function uploadFile() { 
var file = _("file").files[0]; 
alert(file.name+" | "+file.size+" | "+file.type); 
var formdata = new FormData(); 
formdata.append("file", file); 

file1file

而且在file_upload_parser.php

if(move_uploaded_file($fileTmpLoc, "/uploads/$fileName")){確保uploads文件夾在正確的路徑。

最後沒有必要給文件夾權限777。它非常危險。

這可能會幫助你。 :)。如果你真的受益,請接受答案。留下勾號標記到我的答案。

+0

不幸的是,我已經嘗試過所有這些,沒有運氣。我只是嘗試使用[W3學校的PHP 5文件上傳代碼](https://www.w3schools.com/php/php_file_upload.asp)來驗證我可以上傳。我收到以下內容: array(0){} 注意:未定義的索引 所以它好像不能正確地與php文件進行通信。 – Josh

+0

在瀏覽器中給出php文件的路徑。如果它工作,然後將該路徑放在HTML文件的'action'中。在瀏覽器中查看頁面源代碼並點擊運行中的php文件,如果出現錯誤,只需要更改路徑。再試一次 – Bullet

1

好吧,我相信我發現了這個問題。我進去修改了httpd。

#LoadModule php5_module libexec/apache2/libphp5.so

要:從我的Apache2文件夾中的conf文件

LoadModule php5_module libexec/apache2/libphp5.so

這樣做了以後,我的測試圖像正確地搬了過來。