我有这个脚本,它将文件上传到目录并将数据表格形成数据库。但有些文件没有上传,并说 变量'$ 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它不知何故不起作用。
答案 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;
我不知道这对你有帮助,但我只是注意到了。