我有一个html表单,我正在使用PHPMailer电子邮件形式的内容。在表单中,我有一个文件附件的部分。我的要求是,文件必须小于2mb,它必须是一个pdf,doc或docx文件。当我添加验证if语句时,我的表单停止工作:
if ((isset($_FILES['fileUpload']) && $_FILES['fileUpload']['error'] == UPLOAD_ERR_OK) && filesize($file) < $maxsize && in_array(mime_content_type($file), $types)) {
$mail->AddAttachment($_FILES['fileUpload']['tmp_name'],
$_FILES['fileUpload']['name']);
}
下面是完整的PHP脚本:
<?php
require_once('assets/PHPMailer/class.phpmailer.php');
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$job = $_POST['job'];
$file = $_FILES['fileUpload']['name'];
$mail = new PHPMailer();
$mail->From = "xxxxx";
$mail->FromName = "xxxxx";
$mail->AddAddress("xxxxx","xxxxx");
$mail->WordWrap = 50;
$mail->Subject = "Job form";
$mail->Body="
First Name: $first_name
Last Name: $last_name
Email: $email
Job: $job";
$maxsize = 2 * 1024 * 1024;
$types = array('application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document');
if (isset($_FILES['fileUpload']) && $_FILES['fileUpload']['error'] == UPLOAD_ERR_OK) && filesize($file) < $maxsize && in_array(mime_content_type($file), $types) {
$mail->AddAttachment($_FILES['fileUpload']['tmp_name'],
$_FILES['fileUpload']['name']);
}
if(!$mail->Send())
{
echo 'Message was not sent.';
echo 'Mailer error: ' . $mail->ErrorInfo;
}
else
{
echo 'Thank you for your feedback.';
}
?>
以下是HTML表单:
<form enctype="multipart/form-data" action="jobform.php" method="POST">
<input type="text" name="first_name" value="First Name">
<input type="text" name="last_name" value="Last Name">
<input type="text" name="phone" value="Phone"><br />
<input type="text" name="email" value="Email">
<select name="job"><br />
<option>Graphic Design Intern</option>
<option>ASP.Net Developer</opttion>
<option>Marketing Coordinator</option>
<option>Social Media Content Writer</option>
</select><br />
<div><h4>Résumé</h4><input type="file" name="fileUpload" /><br /></div>
<p></p>
<input class="btn btn-large btn-success" type="submit" value="Submit">
</form>
发布于 2013-10-04 07:50:13
您缺少一个结束括号)
,但是请看下面的内容,因为您的代码无法按照您预期的方式工作.
我不确定这些函数是否以您期望的方式工作:
filesize($file);
mime_content_type($file);
这些文件可以用于文件系统上的物理文件,但在代码的前面,您只将“$file”分配给您上传的文件的字符串名称--而不是filesize()
所期望的物理文件路径!
// You assigned the file name, not the file path!!
$file = $_FILES['fileUpload']['name'];
当您这样做时,您只分配了$file变量的文件名,而不是文件本身的路径。
与您如何使用$_FILES['fileUpload']['name']
和$_FILES['fileUpload']['tmp_name']
类似,在$_FILES[]对象中有值提供文件大小和文件类型:
检查大小:
if ($_FILES['fileUpload']['size'] < $maxsize)
{
}
检查它是否为PDF:
if ($_FILES['fileUpload']['type'] == "application/pdf")
{
}
更新:附件未附加
我认为您的文件没有实际附加的问题是因为您只是向您的$mail->AddAttachment()
函数提供文件的临时名称,而不是像它所期望的那样提供文件的完整路径。
您需要将该文件移到您知道它的第一个位置的某个地方,您可以使用move_uploaded_file()
函数来完成这个任务,请参阅http://php.net/manual/en/function.move-uploaded-file.php。
然后,当文件位于您知道路径的位置时,提供到$mail->AddAttachment()
的路径。
w3schools上的这个例子显示了使用此函数将文件移动到任何您想要的位置!
发布于 2013-10-04 07:46:19
看起来好像你的if语句没有放在括号里
发布于 2013-10-04 07:53:05
解析错误:第2行中的语法错误,意外的‘&’(T_BOOLEAN_AND)
if (isset($_FILES['fileUpload']) && $_FILES['fileUpload']['error'] == UPLOAD_ERR_OK) && filesize($file) < $maxsize && in_array(mime_content_type($file), $types) {
$mail->AddAttachment($_FILES['fileUpload']['tmp_name'],
$_FILES['fileUpload']['name']);
}
也许你在这里漏掉了几个括号?
试一试:
<?php
if ((isset($_FILES['fileUpload']) && $_FILES['fileUpload']['error'] == UPLOAD_ERR_OK) && filesize($file) < $maxsize && in_array(mime_content_type($file), $types)) {
$mail->AddAttachment($_FILES['fileUpload']['tmp_name'],
$_FILES['fileUpload']['name']);
}
?>
另外,我不确定mime_content_type是否会按照你想要的方式工作。
编辑**
我认为您无法从$_FILES‘’fileUpload‘获得文件大小。
遵循官方的W3C示例:
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
这一行:
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
因此,请记住,文件大小将以字节,而不是以千字节为单位。如果您想要的单位是千字节,除以1024,如上面的例子所示。
https://stackoverflow.com/questions/19185406
复制