2014-10-09 60 views
-1

我只需要有人指点我进行以下操作。PHP返回上传的文件名进行验证

一旦我成功上传文件到/上传到我的服务器上,如果存在相同的文件(基本覆盖保护),则PHP通过添加一个数字迭代地更改文件名。文件成功上传后,我需要一个PHP函数,它可以将该文件名AND THEN(这是最难的部分)返回到触发PHP上传器脚本的页面。然后我将捕获文件名作为一个变量,并通过一个cookie传递给下一页(这后两件事我已经知道该怎么做)。

代码的PHP脚本:

<?php 
$allowedExts = array("zip", "rar"/*, "bmp", "jpg", "png", "tiff"*/); 
$temp = explode(".", $_FILES["file"]["name"]); 
$name = pathinfo($_FILES["file"]["name"], PATHINFO_FILENAME); 
$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); 
$i = ''; 

if ((($_FILES["file"]["type"] == "application/zip") 
|| ($_FILES["file"]["type"] == "application/x-zip") 
|| ($_FILES["file"]["type"] == "application/octet-stream") 
|| ($_FILES["file"]["type"] == "application/x-zip-compressed") 
|| ($_FILES["file"]["type"] == "application/x-rar-compressed") 
/*|| ($_FILES["file"]["type"] == "image/bmp") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/png") 
|| ($_FILES["file"]["type"] == "image/tiff")*/) 
&& ($_FILES["file"]["size"] < 50000000) 
&& in_array($extension, $allowedExts)) 
{ 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
    } else 
    { 
     if (file_exists("upload/" . $name . $i . '.' . $extension)) 
     { 
     while(file_exists("upload/" . $name . $i . '.' . $extension)) { 
      $i++; 
     } 

     $basename = $name . $i . '.' . $extension; 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $basename); 
     } else 
     { 
      move_uploaded_file($_FILES["file"]["tmp_name"], 
      "upload/" . $_FILES["file"]["name"]); 
     } 
    } 
} else 
    { 
    echo "Invalid file"; 
} 
?> 

HTML5上传:

<!DOCTYPE html> 
 
<!-- saved from url=(0044)http://html5demos.com/dnd-upload#view-source --> 
 
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 
<meta charset="utf-8"> 
 
<title>HTML5 Demo: Drag and drop, automatic upload</title> 
 
<body> 
 
<section id="wrapper"> 
 
    <header> 
 
     <h4>Drag and drop</h4> 
 
    </header> 
 

 
<style> 
 
#holder { border: 1px dashed lightgrey; width: 300px; min-height: 300px; margin: 20px auto;} 
 
#holder.hover { border: 1px dashed #FFCC00; } 
 
#holder img { display: block; margin: 10px auto; } 
 
#holder p { margin: 10px; font-size: 14px; } 
 
progress { width: 50%; } 
 
progress:after { content: ''; } 
 
.fail { background: #c00; padding: 2px; color: #fff; } 
 
.hidden { display: none !important;} 
 
</style> 
 
<article> 
 
    <div id="holder"> 
 
    </div> 
 
    <p id="upload" class="hidden"><label>Drag &amp; drop not supported, but you can still upload via this input field:<br><input type="file"></label></p> 
 
    <p id="filereader" class="hidden">File API &amp; FileReader API not supported</p> 
 
    <p id="formdata" class="hidden">XHR2's FormData is not supported</p> 
 
    <p id="progress" class="hidden">XHR2's upload progress isn't supported</p> 
 
    <p>Upload progress: <progress id="uploadprogress" min="0" max="100" value="0">0</progress></p> 
 
</article> 
 
<script> 
 
var holder = document.getElementById('holder'), 
 
    tests = { 
 
     filereader: typeof FileReader != 'undefined', 
 
     dnd: 'draggable' in document.createElement('span'), 
 
     formdata: !!window.FormData, 
 
     progress: "upload" in new XMLHttpRequest 
 
    }, 
 
    support = { 
 
     filereader: document.getElementById('filereader'), 
 
     formdata: document.getElementById('formdata'), 
 
     progress: document.getElementById('progress') 
 
    }, 
 
    acceptedTypes = { 
 
     //'image/bmp': true 
 
     //'image/jpg': true, 
 
     //'image/png': true, 
 
    }, 
 
    progress = document.getElementById('uploadprogress'), 
 
    fileupload = document.getElementById('upload'); 
 

 
"filereader formdata progress".split(' ').forEach(function (api) { 
 
    if (tests[api] === false) { 
 
    support[api].className = 'fail'; 
 
    } else { 
 
    // FFS. I could have done el.hidden = true, but IE doesn't support 
 
    // hidden, so I tried to create a polyfill that would extend the 
 
    // Element.prototype, but then IE10 doesn't even give me access 
 
    // to the Element object. Brilliant. 
 
    support[api].className = 'hidden'; 
 
    } 
 
}); 
 

 
function previewfile(file) { 
 
    /*if (tests.filereader === true && acceptedTypes[file.type] === true) { 
 
    var reader = new FileReader(); 
 
    reader.onload = function (event) { 
 
     var image = new Image(); 
 
     image.src = event.target.result; 
 
     image.width = 250; // a fake resize 
 
     holder.appendChild(image); 
 
    }; 
 

 
    reader.readAsDataURL(file); 
 
    } else {*/ 
 
    holder.innerHTML += '<p>Uploaded ' + file.name + ' ' + (file.size ? (file.size/1024|0) + 'K' : ''); 
 
    console.log(file); 
 
    /*}*/ 
 
} 
 

 
function readfiles(files) { 
 
    //debugger; 
 
    var formData = tests.formdata ? new FormData() : null; 
 
    for (var i = 0; i < files.length; i++) { 
 
     if (tests.formdata) formData.append('file', files[i]); 
 
     previewfile(files[i]); 
 
    } 
 

 
    // now post a new XHR request 
 
    if (tests.formdata) { 
 
     var xhr = new XMLHttpRequest(); 
 
     xhr.open('POST', 'upload_artwork.php'); 
 
     xhr.onload = function() { 
 
     progress.value = progress.innerHTML = 100; 
 
     }; 
 

 
     if (tests.progress) { 
 
     xhr.upload.onprogress = function (event) { 
 
      if (event.lengthComputable) { 
 
      var complete = (event.loaded/event.total * 100 | 0); 
 
      progress.value = progress.innerHTML = complete; 
 
      } 
 
     } 
 
     } 
 

 
     xhr.send(formData); 
 
    } 
 
} 
 

 
if (tests.dnd) { 
 
    holder.ondragover = function() { this.className = 'hover'; return false; }; 
 
    holder.ondragend = function() { this.className = ''; return false; }; 
 
    holder.ondrop = function (e) { 
 
    this.className = ''; 
 
    e.preventDefault(); 
 
    readfiles(e.dataTransfer.files); 
 
    } 
 
} else { 
 
    fileupload.className = 'hidden'; 
 
    fileupload.querySelector('input').onchange = function() { 
 
    readfiles(this.files); 
 
    }; 
 
} 
 
</script> 
 
</body></html>

+0

上传?更多细节和''代码'' – raiserle 2014-10-09 08:35:36

+0

添加代码,只需纯浏览器上传(无FTP) – Matthew6 2014-10-09 09:22:11

回答

0

提交与阿贾克斯的形式提交表单将返回文件路径的值。希望这有助于的你..

<?php 
if($_FILES["file"]["name"] != '') 
    { 
     $output_dir="uploads/"; 
     if(move_uploaded_file($_FILES["file"]["tmp_name"],$output_dir.$_FILES["file"]["name"])) 
     { 
      chmod($output_dir.$_FILES["file"]["name"],0777); 
      echo $_FILES["file"]["name"]; 
      exit; 
     } 

    } 
?> 
<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script> 
    <script src="http://malsup.github.com/jquery.form.js"></script> 

    <script> 
     // wait for the DOM to be loaded 
     $(document).ready(function() { 
     var jvar=""; 
      // bind 'myForm' and provide a simple callback function 
      $('#myForm').ajaxForm({ 
     clearForm: 'true', 
      success: function(data){ 
     if(data != '') 
     { 
      jvar=data; 
      window.location.href="test.php?path="+jvar; 

      //Assign the to a variable and pass to another file 
     } 

     } 

      }); 

     }); 
    </script> 
</head> 
<form id="myForm" action="test.php" method="post"> 
    <input type="file" name="file"> 
    <input type="submit" value="Submit Comment" /> 
</form> 
0

在数据库中创建第1名和第2服务器名称的两个字段与FTP访问后来

$name = $_FILES['file']['name']; 
//Insert this in first field 

//Insert it in server name field 
$stored_name = $_FILES['file']['name'].rand(10, 50); 
// name generated by you not automatically added if file already exists 

move_uploaded_file($_FILES["file"]["tmp_name"], $stored_name); 

退房这里兰特功能 http://php.net/manual/en/function.rand.php