文件上传与数据库交互
上传步骤
- 选择文件
- 提交文件到服务器
- 服务器进行上传操作
- 服务器反馈上传结果
上传限制
大小与时间限制
对于服务器而言,能够承受的上传文件大小是有限的,不能让用户上传超大的文件。可以在php.ini配置文件中设置
- upload_max_filesize:上传文件大小限制
- post_max_size:最大POST数据限制
- memory_limit:内存限制,PHP5.2之前(默认8M)、PHP5.2(16M)、PHP5.2之后(128M)
逻辑顺序上:
- memory_limit>post_max_size>upload_max_filesize
对于时间限制:
- max_execution_time:程序执行时间限制
- set_time_limit(0):0表示没有时间限制
1 | max_execution_time = 30//单位默认为second,时间默认为30秒 |
文件类型限制
通过对上传的文件的mimeType过滤处理。在PHP中利用$_FILES’file’来获取上传文件的mimeType。并使用in_array()函数对文件的mimeType进行判断,再决定是否能够上传。
安全检查
对于上传的文件,需要检查用户是否上传不安全的文件,诸如木马、病毒、脚本等等。
代码实例
实例 1
1 | PHP文件上传代码实例(来源自PHP中文网) |
1 | <?php |
上述代码中,使用了几个PHP内置函数来实现文件上传的基本功能。其中,in_array()函数用来判断上传的文件类型是否符合要求。pathinfo()函数用来获取上传文件的后缀名。is_uploaded_file()函数用来校验是否是合法的上传文件,防止非法上传。move_uploaded_file()函数则用来将上传缓存文件移动到指定目录,完成文件上传过程。
实例 2(实战)
1 | 表单上传-前台html代码 |
1 | <form action="upload.php" method="post" enctype="multipart/form-data"> |
enctype属性有两个,“application/x-www-form-urlencoded”,enctype属性值设为这个表示上传的内容为文本,所以一般我们只是上传文本信息的时候不需要设定enctype属性,因为浏览器给的enctype默认值就是它。而当我们上传文件的时候,则需要显性的设置enctype为“multipart/form-data”,表示以二进制形式把数据传到服务器。
1 | PHP-后台文件上传 |
1 | <?php |
数据库交互
使用PHP实现数据交互需要用到以下两个组件:
HTTP请求:PHP能够处理HTTP请求,就能够获取到从客户端发送来的数据。最常用的HTTP请求方法是GET和POST,分别用于向服务器请求数据和向服务器发送数据。
数据库连接:PHP提供了一种称为mysqli的内置库,能够让你轻松地与MySQL数据库进行交互。
1 | <?php |
创建mysqli连接,并将连接信息保存在$conn变量中。
检查连接是否成功, 如果没有连接成功,程序将输出连接错误,并中止程序的执行。
如果当前的HTTP请求是一个POST请求,从请求中获取所发送的数据, 并将数据保存在$data 变量中。
执行SQL语句以将所接收的数据插入到MySQL数据库中。可以使用mysqli的query()方法来执行SQL语句。
如果插入操作成功了,则向浏览器发送一条消息表明新记录插入成功。
如果插入操作失败,则输出错误信息并关闭连接。
最后,关闭数据库连接以释放资源。
1 | 参考资料: |
本文链接: https://bolerat.github.io/posts/46105/
版权声明: 本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!