AJAX PHP上传的问题
我正在创建一个AJAX PHP上传脚本,但我遇到了一些问题。用户选择要上载的图像后,它将显示在我在javascript文件中指定的div容器中(好)。但是,移动上传的文件似乎不起作用,或者至少我认为这就是问题所在。我将上传/文件夹设置为具有“777”权限 以下是JS文件:AJAX PHP上传的问题,php,javascript,ajax,Php,Javascript,Ajax,我正在创建一个AJAX PHP上传脚本,但我遇到了一些问题。用户选择要上载的图像后,它将显示在我在javascript文件中指定的div容器中(好)。但是,移动上传的文件似乎不起作用,或者至少我认为这就是问题所在。我将上传/文件夹设置为具有“777”权限 以下是JS文件: $(document).ready(function () { $("#upload-image-button").hide(); var input = document.getElementById("image
$(document).ready(function () {
$("#upload-image-button").hide();
var input = document.getElementById("images"),
formdata = false;
function showUploadedItem(source) {
var list = document.getElementById("image-list"),
li = document.createElement("li"),
img = document.createElement("img");
img.src = source;
$("#topic-img-container").html(img);
}
if (window.FormData) {
formdata = new FormData();
$("#upload-image-button").hide();
}
$("input[type='file']").live("change", function(event) {
$("#response").html("Uploading...");
var i = 0, len = this.files.length, img, reader, file;
for (; i < len; i++) {
file = this.files[i];
if (!!file.type.match(/image.*/)) {
if (window.FileReader) {
reader = new FileReader();
reader.onloadend = function (e) {
showUploadedItem(e.target.result, file.fileName);
};
reader.readAsDataURL(file);
}
if (formdata) {
formdata.append("images[]", file);
}
}
}
if (formdata) {
$.ajax({
url: "db/upload_image.php",
type: "POST",
data: formdata,
processData: false,
contentType: false,
success: function (res) {
document.getElementById("response").innerHTML = res;
}
});
}
}, false);
});
$(文档).ready(函数(){
$(“#上载图像按钮”).hide();
var input=document.getElementById(“图像”),
formdata=false;
函数showUploadedItem(源代码){
var list=document.getElementById(“图像列表”),
li=document.createElement(“li”),
img=document.createElement(“img”);
img.src=源;
$(“#主题img容器”).html(img);
}
if(window.FormData){
formdata=新的formdata();
$(“#上载图像按钮”).hide();
}
$(“输入[type='file']”)。实时(“更改”,函数(事件){
$(“#响应”).html(“上传…”);
var i=0,len=this.files.length,img,reader,file;
对于(;i
以下是PHP文件:
<?php
foreach($_FILES["images"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
print_r($_FILES);
$name = $_FILES["images"]["name"][$key];
move_uploaded_file($FILES["images"]["tmp_name"][$key], "uploads/" . $_FILES["images"]["name"][$key]);
echo $FILES["images"]["tmp_name"][$key];
}
}
echo "Success";
?>
当没有错误时,它进入循环。当我转到上载文件夹时,没有新文件。知道为什么会这样吗?您不能使用AJAX上传文件。您需要一个通过常规表单post发送的助手Iframe。永远不要假设移动调用成功<代码>如果(!move_上传的文件(…){die(“move failed”);}。同样,不要在文件系统操作中使用用户提供的文件名。您的构造允许恶意用户在服务器上任意位置涂鸦其文件。考虑一个文件名<代码>….//..…/ETC/PasWD< <代码>,以及你的代码将如何处理它。@ Marc B,我希望服务器和PHP作为一个用户来运行,它不允许编辑这样的文件。您通常希望使您的代码尽可能防白痴和黑客攻击。如果你能在这个级别处理它,千万不要认为另一个级别的安全会处理它!特别是由于保护passwd文件的安全性可能不会保护index.html或其他一些随机但重要的文件。@内切切格:防御编程从从不假设您的操作环境是“安全的”开始。@Marc B我很清楚这一点。我不是说你不应该有其他的保护措施,但是确保你的服务器用户被很好地锁定应该是设置生产服务器的第一步。HTML5不是这样,请查看HTML5 rocks网站。