使用PHP上传文件时遇到一个问题。我可以成功上传图像类型文件,但无法上传pdf / docs类型文件。我在下面解释我的代码。
$target_dir = "../../admin/enquiry/";
$fileName = generateRandom() . '_' . $_FILES['attachment']['name'];
$target_file = $target_dir . basename($fileName);
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);
$uploadOk = 1;
$check = getimagesize($_FILES['attachment']['tmp_name']);
header('Content-Type: application/json');
if ($check !== false) {
$result['msg'] = "check not false.";
// echo json_encode(array('status' => $check['mime']));
$uploadOk = 1;
} else {
$result['msg'] = "check false.";
// echo json_encode(array('status' => 'upload failed'));
$uploadOk = 0;
}
if (file_exists($target_file)) {
echo json_encode(array('status' => 'file already exists'));
$uploadOk = 0;
}
if ($uploadOk == 0) {
//
} else {
if (move_uploaded_file($_FILES['attachment']['tmp_name'], $target_file)) {
$result['msg'] = "File has uploaded successfully.";
$result['num'] = 1;
$result['img'] =$fileName;
}else{
$result['msg'] = "Sorry, Your File could not uploaded to the directory.";
$result['num'] = 0;
}
}
我收到消息check false.
表示getimagesize
存在问题。我也可以传递文件大小138kb,但如果图像上传成功,但其他类型文件无法上传,但我需要上传那些。请帮助我。
答案 0 :(得分:1)
在文件的最顶部,添加这些代码以启用php错误。
error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");
$target_dir = "../../admin/enquiry/";
if(isset($_FILES['attachment'])){
$errors= array();
$file_name = generateRandom() . '_' .$_FILES['attachment']['name'];
$target_file = $target_dir . basename($file_name);
$file_size = $_FILES['attachment']['size'];
$file_tmp = $_FILES['attachment']['tmp_name'];
$file_type = $_FILES['attachment']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['attachment']['name'])));
$extension= array("jpeg","jpg","png","pdf");
if(in_array($file_ext,$extension)=== false){
$errors[]="extension not allowed, please choose a JPEG,PNG or PDF file.";
}
if($file_size > 2097152) {
$errors[]='File size must be exactely 2 MB';
}
if(empty($errors)==true) {
move_uploaded_file($file_tmp,$target_file);
echo "Success";
}else{
print_r($errors);
}
}
?>
答案 1 :(得分:0)
有条件地调用getImagesize函数。如果文件类型是图像,那么应该调用它。
答案 2 :(得分:0)
在调用getimagesize()之前检查上传的文件是否为图像。
if($file_type=="image/gif" || $file_type=="image/jpeg")
{
$check = getimagesize($_FILES['attachment']['tmp_name']);
}
还在$check != NULL
块
if-else
答案 3 :(得分:0)
转到所有PHP ini文件并将post_max_size
更改为一个高值。我也遇到了问题,将其设置为10000M
post_max_size=10000M