我正在尝试使用表单上传.pdf文件,并在检查文件是否存在时,即使目录中没有任何文件,结果也始终为真。
HTML表单:
<form id="contactForm" method="post" autocomplete="off" enctype="multipart/form-data">
<input autocomplete="false" name="hidden" type="text" style="display:none;">
<div class="row">
<div class="col-md-12 form-group">
<label for="name">Name</label>
<input type="text" name="name" class="form-control form-control-lg" id="name" required autocomplete="off">
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label for="email">Email</label>
<input type="email" name="email" id="email" class="form-control form-control-lg" autocomplete="off">
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label for="email">Phone</label>
<input type="number" name="phone" id="phone" class="form-control form-control-lg" required autocomplete="off">
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label for="address">Address</label>
<textarea name="address" id="address" class="form-control form-control-lg" cols="30" rows="8" autocomplete="off"></textarea>
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label for="department">Department</label>
<select class="form-control form-control-lg" name="department" required autocomplete="off">
<option value="so">Select Department</option>
<option value="Accounts">Accounts</option>
<option value="Machine Handling">Machine Handling</option>
<option value="Marketing">Marketing</option>
<option value="Sales Development">Sales Development</option>
<option value="Floor Manager">Floor Manager</option>
<option value="After Sales Service Manager">After Sales Service Manager</option>
</select>
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label for="file">Upload Your Resume (.pdf only!)</label>
<input type="file" name="fileToUpload" required autocomplete="off" class="form-control" accept="application/pdf">
</div>
</div>
<div class="row">
<div class="col-md-6 form-group">
<input type="submit" name="submit" value="Send Message" class="btn btn-primary btn-lg btn-block">
</div>
</div>
</form>
表格提交脚本:
<script>
$("#contactForm").submit(function(e){
e.preventDefault();
var form_data = $(this).serialize();
$('input[type="submit"]').val("Sending Message...");
$.ajax({
type: "POST",
url: "backend/career.php",
dataType: "json",
data: form_data
}).done(function (data){
console.log(data);
$('input[type="submit"]').removeClass('btn-primary');
$('input[type="submit"]').addClass('btn-success');
$('input[type="submit"]').val("Message Sent...");
$("#contactForm").closest('form').find("input[type='text'],input[type='number'],input[type='email'],input[type='file'], textarea, select").val("");
}).fail(function(data){
console.log(data);
$('input[type="submit"]').removeClass('btn-primary');
$('input[type="submit"]').addClass('btn-danger');
$('input[type="submit"]').val("Sending Failed...");
$("#contactForm").closest('form').find("input[type='text'],input[type='number'],input[type='email'],input[type='file'], textarea, select").val("");
});
});
</script>
PHP代码:
$target_dir = "../pdf/";
$target_file = $target_dir.basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$pdfFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
if ($_FILES["fileToUpload"]["name"] > 500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
}
输出:
Sorry, file already exists.Sorry, your file was not uploaded.
即使该目录中没有任何文件,这也是输出。
如何解决这个问题?
答案 0 :(得分:0)
请尝试使用 file_exists
的绝对路径$target_dir = realpath('../pdf');
答案 1 :(得分:0)
如果var_dump($target_file);
正在返回/home/aadhunik/public_html/pdf
,file_exists
正在检查该/pdf/
目录是否存在,它是否存在。
问题似乎是$_FILES["fileToUpload"]["name"]
未设置。
我会通过使用$_FILES
检查var_dump($_FILES);
来开始调试 - 找出文件名的实际位置。
这可能有很多原因 - 但file_exists
如果$_FILES
为空,请检查表单是否为enctype="multipart/form-data"
,并且在服务器上允许上传文件(在php.ini中,您应该有file_uploads=1
。如果它不是空的,调整代码以使用正确的数据,例如$_FILES['some_file']['name']
<强>更新强>
您无法以这种方式上传带有ajax的文件。使用新的HTML5 FormData
对象而不是JQuery序列化。有关详细信息,请参阅此链接:
How can I upload files asynchronously?
请记住,这仅适用于较新的浏览器。有些人建议使用iFrames或其中一个可用的库。 jQuery Ajax File Upload
这样的事情:
<script>
$("#contactForm").submit(function(e){
e.preventDefault();
$('input[type="submit"]').val("Sending Message...");
$.ajax({
type: "POST",
url: "backend/career.php",
data: new FormData($(this)[0]),
cache: false,
contentType: false,
processData: false
}).done(function (data){
console.log(data);
$('input[type="submit"]').removeClass('btn-primary');
$('input[type="submit"]').addClass('btn-success');
$('input[type="submit"]').val("Message Sent...");
$("#contactForm").closest('form').find("input[type='text'],input[type='number'],input[type='email'],input[type='file'], textarea, select").val("");
}).fail(function(data){
console.log(data);
$('input[type="submit"]').removeClass('btn-primary');
$('input[type="submit"]').addClass('btn-danger');
$('input[type="submit"]').val("Sending Failed...");
$("#contactForm").closest('form').find("input[type='text'],input[type='number'],input[type='email'],input[type='file'], textarea, select").val("");
});
});
</script>
答案 2 :(得分:0)
data: new FormData($(this).get(0))
这是我在上传文件的ajax代码上必须进行的编辑。
if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $target_dir.$target_file)) {
这是我必须在PHP代码中进行的更改