我有一个php脚本,可以将图像上传到文件夹。
它在本地工作,但当我把它放在托管服务器上时,我收到以下错误消息:
[Thu May 18 21:45:00.833970 2017] [fcgid:warn] [pid 37560] [客户 151.229.83.93:44238] mod_fcgid:stderr:PHP注意:未定义的索引:文件在 /home/linnas01/g/domainname.com/user/htdocs/php/uploadphoto.php on 第9行,引用者:http://domainname.com/photoupload.html
有谁可以解释为什么会发生这种情况以及如何解决这个问题?
php看起来像这样
<?php
if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}
else {
move_uploaded_file($_FILES['file']['tmp_name'], 'images/' . $_FILES['file']['name']);
}
?>
我的html文件看起来像这样
<form enctype="multipart/form-data">
<input id="upload-input" type="file" name="file" multiple="multiple" enctype="multipart/form-data">
<input type="submit">
</form>
该文件以ajax发布。
var formData = new FormData();
for (var i = 0; i < files.length; i++) {
var file = files[i];
fileNames.push(file.name);
// add the files to formData object for the data payload
formData.append("image", file);
}
$.ajax({
url: 'uploadphoto.php',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(data){
console.log(data);
}
});
I have also configured the directories and files as explained here
答案 0 :(得分:1)
问题是您在$_FILES
中使用的名称与您在formData.append()
中提供的名称不符。
此外,由于这是一个多文件输入,您需要使用数组样式名称来获取所有文件。所以代码应该是:
var formData = new FormData();
for (var i = 0; i < files.length; i++) {
var file = files[i];
fileNames.push(file.name);
// add the files to formData object for the data payload
formData.append("file[]", file);
}
然后在PHP代码中,您需要循环遍历数组以处理所有上传。
foreach ($_FILES['file']['tmp_name'] as $i => $tmp_name) {
if ($_FILES['file']['error'][$i] != 0) {
echo 'Error: ' . $_FILES['file']['error'][$i] . '<br>';
} else {
move_uploaded_file($tmp_name, 'images/' . $_FILES['file']['name'][$i]);
}
}