我有一个网站,用户填写表格并上传他们的简历(简历)。 95%的时间它应该工作,我得到服务器上的CV文件。虽然我尝试过,但我永远无法重现失败的5%用户的错误。我知道他们中的大多数都使用Android上传文件但不是全部。我们甚至让在Windows 7上运行的Chrome上的人失败,因此问题可能是连接不良。我仍然无法重现错误。
这是表单的简化版本:
<html>
<form action="get_file.php" method="POST" enctype="multipart/form-data">
Here goes the file: <input name="curriculo" type="file"><br>
<input type="submit">
</form>
</html>
这是我在后端的简化版本。
<pre>
<?php
print_r($_FILES);
?>
</pre>
这是我95%的时间得到的,这很好:
Array
(
[curriculo] => Array
(
[name] => cora.rtf
[type] => application/msword
[tmp_name] => /tmp/phpk0caxk
[error] => 0
[size] => 542
)
)
这是另外5%(不好!)
Array
(
[curriculo] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
)
Array
(
[curriculo] => Array
(
[name] => curriculo.odt
[type] =>
[tmp_name] =>
[error] => 3
[size] => 0
)
)
Array
(
[curriculo] => Array
(
[name] => jeisuana_almeida_de_sousa_jeise.pdf
[type] => application/pdf
[tmp_name] => /tmp/php7QmGOk
[error] => 0
[size] => 0
)
)
在最后一个例子中,请注意该文件没有任何错误,但大小为0,这也是一个问题。
我在php.ini上有这个:
file_uploads = On
upload_max_filesize = 6M
max_file_uploads = 20
我知道如果文件大小超过了upload_max_filesize,那么该文件并没有。事实并非如此。当文件超过6M时,$ _FILES数组为空,我会相应地处理此错误。
我也知道这些错误代码是什么。它们记录在这里。
http://php.net/manual/en/features.file-upload.errors.php
我的问题是:为了防止丢失5%的简历,我有什么遗漏吗?任何配置?或者可能是问题肯定是用户糟糕的连接?
就像我说的那样,我在Android / Chrome / Safari / Firefox / Windows / Mac上的用户都会收到此错误。
谢谢!
答案 0 :(得分:1)
为什么不在做任何事情之前测试文件大小?类似的东西:
<?php
if (isset($_FILES) && $_FILES['size'] > 0) {
// Do stuff here
}
?>
答案 1 :(得分:1)
不使用传统的<form>
和type="submit"
按钮,而是使用AJAX并在未收到文件的情况下提供即时反馈。
如果您之前没有使用过AJAX,那么这里有一些很好的帖子可以获得基础知识。 很多 比听起来容易。
Populate dropdown 2 based on selection in dropdown 1
另外,查看Ravishanker Kusuma的Hayageek jQuery文件上传插件:
http://hayageek.com/docs/jquery-upload-file.php
他将这个过程分解为三个简单的步骤,基本上看起来像这样:
<head>
<link href="http://hayageek.github.io/jQuery-Upload-File/uploadfile.min.css" rel="stylesheet"> // (1)
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://hayageek.github.io/jQuery-Upload-File/jquery.uploadfile.min.js"></script> // (1)
</head>
<body>
<div id="fileuploader">Upload</div> // (2)
<script>
$(document).ready(function(){
$("#fileuploader").uploadFile({ // (3)
url:"my_php_processor.php",
fileName:"myfile"
});
});
</script>
</body>
最后一步是在jQuery代码中指定PHP文件(在本例中为my_php_processor.php
)来接收和处理文件:
<强> my_php_processor.php:强>
<?php
$output_dir = "uploads/";
$theFile = $_FILES["myfile"]["name"];
move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.$fileName);
注意PHP(myfile
)中$_FILES["myfile"]
与jQuery代码块中指定的文件名之间的关系。