【发布时间】:2014-01-10 21:29:32
【问题描述】:
我有一个如下的 HTML 表单:
<form id="addTrack" action="/worship/script/upload.php" method="post" enctype="multipart/form-data">
<label>File:</label>
<input type="file" name="uploaded" id="addTrackFile"/>
<label>Key Title: </label>
<input type="text" name="title" id="addTrackTitle"/>
<input type="hidden" name="id" id="addTrackId"/><br>
</form>
<button onclick="uploadAddTrack()">Upload</button>
<button onclick="closeAddTrack()">Close</button>
当我提交表单时,文件会正确上传到服务器,但是当它被重定向到 PHP 操作脚本时,它会在第一个错误捕获时停止。然后脚本转储$_FILES 变量,它作为一个空数组返回。正如你在下面的代码中看到的,我也让它回显了错误,但它也回显了一个空字符串。
为什么我没有在 $_FILES 数组中获得文件?
我的 PHP 代码:
$id=$_POST["id"];
$name=$_POST["title"];
$name = str_replace(" ","",$name);
$allowed_filetypes = array('.mp3','.m4a','.wav','.wma');
$filename = $_FILES['uploaded']['name'];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
$target = "../audio/";
$target = $target . $id. "_".$name.$ext;
$ok=1;
if ($_FILES['uploaded']['error'] !== UPLOAD_ERR_OK) {
//------------This is where it gets stopped-----------------//
var_dump($_FILES);
echo $_FILES["uploaded"]["error"];
return;
}
if(!in_array($ext,$allowed_filetypes))
die("This file type is not allowed");
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
include("updateDB.php");
header("Location:/worship/cpanel/?autoload=$id");
}
我上传的文件大小为 9mb。
我的 php.ini 相关信息
file_uploads:开启
上传最大文件大小:25M
upload_tmp_dir: 没有值
max_post_size: 8M
【问题讨论】:
-
您要上传的目录是否可写?
-
我不知道。如何检查?
-
您是通过 ajax 发送表单还是通过什么触发器提交?
-
取决于服务器运行的操作系统。如果是 linux,您将导航到父目录,然后运行
ls -l。如果是windows服务器,右键目录,查看IIS_USR账号的权限 -
@mituw16 目录权限为0755。
标签: php file-upload forms php-ini