2016-11-28 32 views
0

使用PHP上传文件时出现一个问题。我可以成功上传图片类型文件,但无法上传PDF /文档类型文件。我在下面解释我的代码。使用PHP无法上传文档/ pdf文件

$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

打印您的$ _FILES并检查文件实际上是上传或任何其他问题?的print_r($ _ FILES);出口; – Ima

+0

@Ima:我已经打印并在那里收到了这条消息。 – satya

+0

@RuhulAmin:请检查我对你的帖子的评论。我按你的方式做了,但同样的问题。 – satya

回答

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); 
    } 
    } 
?> 
+0

@拉胡尔:不,它不工作。它再次打印该消息“检查错误”。 – satya

+0

你正在使用'error_reporting(-1)获得的原始错误信息是什么? ini_set('display_errors','On'); set_error_handler(“var_dump”);' –

0

有条件地调用getImagesize函数。如果文件类型是图像,那么它应该得到调用。

+0

@ snehal:我需要允许所有类型的文件。 – satya

0

在调用getimagesize()之前检查上传的文件是否为图像。

if($file_type=="image/gif" || $file_type=="image/jpeg") 
    { 
     $check = getimagesize($_FILES['attachment']['tmp_name']); 
    } 

也在if-else块添加条件$check != NULL