文件上传工作在本地服务器,但不是网络服务器
问题描述:
当我的本地XAMPP服务器上传文件但上传到我的Web服务器停止工作时,这个确切的代码将正常工作。同一个项目的其他功能仍然可以正常工作。文件上传工作在本地服务器,但不是网络服务器
//Image Uploading
if(isset($_FILES['file'])) {
$file = $_FILES['file'];
$file_name = $file['name'];
$file_tmp = $file['tmp_name'];
$file_size = $file['size'];
$file_error = $file['error'];
$file_ext = explode('.', $file_name);
$file_ext = strtolower(end($file_ext));
$allowed = array('png', 'jpg', 'jpeg');
if(in_array($file_ext, $allowed)) {
$file_name_new = $username.'.png';
$file_dest = '../images/'.$file_name_new;
if($file_error > 0){
echo "There was an error uploading this image! Try another.";
} else {
if(move_uploaded_file($file_tmp, $file_dest)) {
header("Location: ../user/editprofile.php?user=".$username);
}
}
}
}
HTML位
<h2>Profile Image</h2>
<form action="editprofile.php?user=<?php echo $user; ?>" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
答
首先,我想pathinfo得到上传文件的文件名和文件扩展名。其次,你应该通过比较$_FILES['userfile']['type']
中的mimetypes列表来验证mimetype而不是扩展名,对于这种情况,你需要检查['image/png', 'image/jpeg']
以防止某人上传类似PHP脚本的扩展名为jpg的东西。您也可能希望保留上传文件的扩展名,而不是将它们全部设为png,因为这可能会导致意外错误。
通过这种方式,信息将在$file_error
之内,以便让您确切知道文件没有上传的原因。你会得到一个file error code,它会告诉你出了什么问题。
这将是这些中的一个:
-
UPLOAD_ERR_INI_SIZE
值:1;上传的文件超出了php.ini中的upload_max_filesize指令。 -
UPLOAD_ERR_FORM_SIZE
Value:2;上传的文件超出了HTML表单中指定的MAX_FILE_SIZE指令。 -
UPLOAD_ERR_PARTIAL
Value:3;上传的文件仅部分上传。 -
UPLOAD_ERR_NO_FILE
Value:4;没有文件上传。 -
UPLOAD_ERR_NO_TMP_DIR
Value:6;缺少临时文件夹。在PHP 5.0.3中引入。 -
UPLOAD_ERR_CANT_WRITE
Value:7;无法将文件写入磁盘。在PHP 5.1.0中引入。 -
UPLOAD_ERR_EXTENSION
Value:8; PHP扩展停止了文件上传。 PHP不提供确定哪个扩展导致文件上传停止的方法;使用phpinfo()检查加载的扩展列表可能会有所帮助。在PHP 5.2.0中引入。
共享主机上最常见的是您上传到的文件的权限不正确(值7)。