首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用PHPMailer验证文件附件

用PHPMailer验证文件附件
EN

Stack Overflow用户
提问于 2013-10-04 07:44:03
回答 3查看 3.1K关注 0票数 1

我有一个html表单,我正在使用PHPMailer电子邮件形式的内容。在表单中,我有一个文件附件的部分。我的要求是,文件必须小于2mb,它必须是一个pdf,doc或docx文件。当我添加验证if语句时,我的表单停止工作:

代码语言:javascript
运行
AI代码解释
复制
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脚本:

代码语言:javascript
运行
AI代码解释
复制
<?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表单:

代码语言:javascript
运行
AI代码解释
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-04 07:50:13

您缺少一个结束括号) ,但是请看下面的内容,因为您的代码无法按照您预期的方式工作.

我不确定这些函数是否以您期望的方式工作:

代码语言:javascript
运行
AI代码解释
复制
filesize($file);
mime_content_type($file);

这些文件可以用于文件系统上的物理文件,但在代码的前面,您只将“$file”分配给您上传的文件的字符串名称--而不是filesize()所期望的物理文件路径!

代码语言:javascript
运行
AI代码解释
复制
// You assigned the file name, not the file path!!
$file = $_FILES['fileUpload']['name'];

当您这样做时,您只分配了$file变量的文件名,而不是文件本身的路径。

与您如何使用$_FILES['fileUpload']['name']$_FILES['fileUpload']['tmp_name']类似,在$_FILES[]对象中有值提供文件大小和文件类型:

检查大小:

代码语言:javascript
运行
AI代码解释
复制
if ($_FILES['fileUpload']['size'] < $maxsize)
{
}

检查它是否为PDF:

代码语言:javascript
运行
AI代码解释
复制
if ($_FILES['fileUpload']['type'] == "application/pdf")
{
}

更新:附件未附加

我认为您的文件没有实际附加的问题是因为您只是向您的$mail->AddAttachment()函数提供文件的临时名称,而不是像它所期望的那样提供文件的完整路径。

您需要将该文件移到您知道它的第一个位置的某个地方,您可以使用move_uploaded_file()函数来完成这个任务,请参阅http://php.net/manual/en/function.move-uploaded-file.php

然后,当文件位于您知道路径的位置时,提供到$mail->AddAttachment()的路径。

w3schools上的这个例子显示了使用此函数将文件移动到任何您想要的位置!

票数 1
EN

Stack Overflow用户

发布于 2013-10-04 07:46:19

看起来好像你的if语句没有放在括号里

票数 1
EN

Stack Overflow用户

发布于 2013-10-04 07:53:05

解析错误:第2行中的语法错误,意外的‘&’(T_BOOLEAN_AND)

代码语言:javascript
运行
AI代码解释
复制
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']);
}

也许你在这里漏掉了几个括号?

试一试:

代码语言:javascript
运行
AI代码解释
复制
<?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示例:

代码语言:javascript
运行
AI代码解释
复制
<?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"];
  }
?>

这一行:

代码语言:javascript
运行
AI代码解释
复制
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

因此,请记住,文件大小将以字节,而不是以千字节为单位。如果您想要的单位是千字节,除以1024,如上面的例子所示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19185406

复制
相关文章
JavaScript 使用 for 循环时出现的问题
有一些项目组在定位问题的时候发现,在使用 “for(x in array)” 这样的写法的时候,在 IE 浏览器下,x 出现了非预期的值。
四火
2022/07/15
4K0
JavaScript 使用 for 循环时出现的问题
使用pdfbox转换image时出现黑线问题
在使用pdfbox将pdf转image时在转换后的图片出现了一些粗粗的黑线,起初以为是pdfbox的bug,经过一系列的验证发现发生问题的根本原因在jai-imageio-jpeg2000这个jar包。
用户3459520
2021/05/11
2.1K0
apt-get update更新源时,出现“Hash Sum mismatch”问题
当使用apt-get update更新源时,出现下面“Hash Sum mismatch”的报错,具体如下: root@localhost:~# apt-get update ...... ...... W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/main/source/Sources Hash Sum mismatch W: Failed to fetch http://us.archive.ubuntu.co
洗尽了浮华
2018/01/23
2.1K0
安卓7.0在线更新解析包时出现问题
关于7.0行为变更,FileProvider应用共享文件的问题可以看鸿洋大佬的这篇博客 https://blog.csdn.net/lmj623565791/article/details/72859156 但是我遇到的这个问题是明明有授权临时权限,FileProvider的XML也有写,但是在下载apk后解析安装包出错,后面回顾一圈代码发现,有问题。
萬物並作吾以觀復
2018/12/12
1.4K2
运行basenji框架时出现的问题
2.分不清哪个是输入,输出是什么。另外每个数据集对应的参数param.json文件对应的什么
bye
2021/03/22
2.4K0
运行basenji框架时出现的问题
targetSdkVersion 更新到 28,出现的问题
原来的是 targetSdkVersion = 25,因vivo应用市场提醒需要升级到 28,可能出现一系列问题,现记录如下:
Jingbin
2019/05/08
2.8K0
解决Python使用matplotlib绘图时出现的中文乱码问题
Python 中使用 matplotlib 绘图时发现控制台报如下问题,可知是中文字体问题:
AI悦创
2021/09/15
9.2K0
更新win10系统时出现 0xc00000fd问题?
1、点击[开始菜单] 2、点击[运行] 3、点击[打开] 4、点击[确定] 5、点击[Windows Update] 6、点击[属性] 7、点击[禁用] 8、点击[确定] 9、点击[此电脑] 10、点击[本地磁盘(C:)] 11、点击[Windows] 12、点击[SoftwareDistribution] 13、点击[DataStore] 14、点击[删除] 15、点击[Download] 16、点击[删除]
裴来凡
2022/05/28
4480
更新win10系统时出现 0xc00000fd问题?
关于conda 更新时权限的问题
就被告知以下错误:PermissionError(13,'Permission denied)
戈贝尔光和热
2018/12/27
2.1K0
更新Win11之后出现的问题
昨天更新是用Win11易升更新的,更新完成之后我发现网络适配器不见了,于是乎就去看设备管理器-为网络适配器的状态,果然显示黄色三角标志,一看代码56,于是乎就搜索各种方法,我想到先USB共享网络看看行不行,结果USB共享网络压根不显示,USB转RJ45也不显示,回退到Win10发现网络适配器没问题.就这样下载了驱动之后又回去到Win11之后发现驱动也不管用.
团团生活志
2022/08/16
5390
java 安装配置时出现的问题
Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg') jdkerror  前些日子装了个jdk7试了试,后来做项目需要换成jdk6,安装完jdk6,设置完环境变量后出现问题。运行java -version出现Error: could not open `C:\Program Files\Java\jre7\lib\i586\jvm.cfg'),运行javac -version则是正常的javac 1.6.0_32。googl
Gxjun
2018/03/22
2.2K0
Ubuntu安装时出现黑屏问题的解决
问题描述:Ubuntu使用光盘/USB安装时,出现"install ubuntu/ try ubuntu without installation"选择,但是Enter安装时,显示器显示没有信息,进行休眠
知忆
2021/06/07
14K0
使用idea断点调试时出现no executable code found at line问题
描述 今天突然碰到了这样的一个问题: 使用断点调试时,断点的地方出现了一个叉号,而不是对勾,这就让我非常无奈了。 调了一天,终于把这个问题解决了,还是要记录一下的。 问题情况如下:
roobtyan
2018/06/04
5.3K0
上传文件时出现跨域问题
所以啊,这根本不是跨域的问题,Tomcat默认上传的文件大小就是1MB,你上传的文件超过而已。
乐心湖
2020/07/31
3.6K0
上传文件时出现跨域问题
使用docker时出现tls timeout
本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/tls-timeout-docker/
羽翰尘
2019/11/21
2K0
opencv使用中出现的问题
2、opencv使用人脸识别过程中,需要引入haarcascade_frontalface_alt2.xml文件,如果放在项目的lib文件中,在打包的过程中能够打到包里,但是在动态引用的过程中,由于jar包中文件的引用出现混乱路径的情况,找不到文件。找到一个折中的办法,haarcascade_frontalface_alt2.xml文件放到固定目录下,再引用的时候,只需要读取固定的路径即可。
用户5640963
2020/10/26
9570
Info模式下的隐形杀手(SpringMVC同时使用<mvc:resources.../>和FormattingConversionServiceFactoryBean时出现的问题)
       今天早上手贱把项目误删了,不得不去SVN上去乞求了。我个人习惯项目运行的时候是debug模式跑着,但是,问题来了,启动竟然抛点异常。。。。。可是上周还好好的,让我有点怀疑人生了。但是还有一个但是,我把日志模式改为info模式,这个贱贱的错误又隐藏起来了,项目一切正常运行,是没问题的。声明一点啊,这个错误不是跟日志的模式有关。        出现问题的根源,就是springmvc框架加载项目的时候,同时使用了加载静态资源的<mvc:resources>和定义了全局日期转换器。 1 <!-
赵小忠
2018/01/24
3.8K1
Ubuntu更新软件时出现boot空间不足的解决方法
由于磁盘空间不够大,Ubuntu软件更新升级时经常会提醒/boot空间不足的问题,一般是由于多次升级内核后,导致内核版本太多,占用了一些磁盘空间,清理一下没用的内核文件及其他文件就好了。
会长君
2023/04/25
1.4K0
Linq to Sql 更新数据时容易忽略的问题
越来越多的朋友喜欢用Linq to Sql来进行开发项目了,一般我们都会遇到CRUD等操作,不可否认,在查询方面Linq真的带来很大的便利,性能方面也表现不错,在插入操作和删除操作中,Linq的表现也还不错,但是在更新某条记录的时候,性能就相对比较弱了,我们一般会使用ExecuteSql等方法来执行脚本。 不过有时候,我们还是会使用Linq to Sql来进行Update,执行的步骤:获取一个记录-〉更新字段 -〉submitChanges() 昨天遇到了一个问题,流程都没有错,但是更新的时候始终没有更新到
脑洞的蜂蜜
2018/02/01
1.3K0
点击加载更多

相似问题

使用Eloquent更新时出现的问题

11

获取EnvironmentObject以更新UI时出现问题

112

使用if meteor/blaze语句更新的延迟

115

使用OleDbConnection更新时出现问题

20

使用angularjs更新时出现问题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文