PHP上传文件无法正常工作

时间:2015-11-02 05:53:29

标签: php mysql file upload

我有这个脚本,它将文件上传到目录并将数据表格形成数据库。但有些文件没有上传,并说 变量'$ filedestination'未定义。

if(!isset($error)){

try{

  if(isset($_FILES['cv'])){
    $file = $_FILES['cv'];

    $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('pdf', 'doc');

    $cl_name = e($_POST['cl_name']);

    if(in_array($file_ext, $allowed)){
      if($file_error === 0){
        $new_file_name = 'cv-'.$cl_name.'-'.$file_ext;
        $file_destination = 'cv/' . $new_file_name;

        if(move_uploaded_file($file_tmp, $file_destination)){

        } else{
          $error[] = 'No se podido subir el c.v.';
        }
      }else{
        $error[] = 'Problema';
      }
    }
  }

  $handler = $db->prepare('INSERT INTO work_with_us (work_area, cl_name, cl_last_name, cl_dir, cl_city, cl_provincia, cl_tel, cl_email, work_comentario, is_cv, cv_url) VALUES (:work_area, :cl_name, :cl_last_name, :cl_dir, :cl_city, :cl_provincia, :cl_tel, :cl_email, :work_com, :is_cv, :cv_url)');

  $handler->execute(array(
    ':work_area' => e($_POST['work_area']),
    ':cl_name' => e($_POST['cl_name']),
    ':cl_last_name' => e($_POST['cl_last_name']),
    ':cl_dir' => e($_POST['cl_dir']),
    ':cl_city' => e($_POST['cl_city']),
    ':cl_provincia' => e($_POST['cl_provincia']),
    ':cl_tel' => (int)$_POST['cl_tel'],
    ':cl_email' => e($_POST['cl_email']),
    ':work_com' => e($_POST['work_comentario']),
    ':is_cv' => 'Si',
    ':cv_url' => $file_destination
  ));

}catch(PDOException $e){
  $error[] = $e->getMessage();
}

}

事情是我使用相同的脚本,在其他文件和上传图片,它工作正常,但这个.pdf和.doc它不知何故不起作用。

4 个答案:

答案 0 :(得分:1)

您只允许使用pdf和doc:

 $allowed = array('pdf', 'doc');

所以不允许png。至于word文件,请确保您上传的是.doc文件,而不是.docx,因为不允许这样做。您可以添加涵盖所有Microsoft单词扩展名的允许扩展名列表。

对于Microsoft扩展程序,请检查this link

答案 1 :(得分:0)

只需定义你的$ filedestination变量全局意味着if块。你的代码没问题。 为您要移动/上传文件的文件夹授予R / W权限。 实际上由于R / W权限,你的文件没有移动尝试Chmod命令给予R / W权限;如果你正在使用linux。

答案 2 :(得分:0)

请检查$error中是否有任何内容或检查$error变量值...

我的另一个建议是,而不是检查$file['error']

检查(getimagesize($_FILES["fileToUpload"]["tmp_name"]!==false)

答案 3 :(得分:0)

请确保名为' cv'的文件夹存在于您的本地服务器中。

而且,我刚刚在你的代码中注意到: $new_file_name = 'cv-'.$cl_name.'-'.$file_ext;

您将获得如下输出: myfile-doc

应该是: myfile.doc

所以,我认为它应该是:

 $new_file_name = 'cv-'.$cl_name.'.'.$file_ext;

我不知道这对你有帮助,但我只是注意到了。