PHP表单处理、会话管理、文件上传、文件处理、执行函数(10.8 第十六天)

表单处理

服务器接收用户发过来的数据方式:

$_GET 接收用户以GET方式发过来的数据

$_POST 接收用户以POST方式发过来的数据

$_COOKIE 接收用户COOKIE

$_REQUEST 接收用户发过来的数据

htmlspecialchars() 实体化编码

文件包含:通过一些文件包含的函数将本地或者远程服务器中文件包含解析到当前服务器中,达到文件读取、代码利用、函数调用等目的

include "文件名 "==include("文件名")

include_once

去包含文件时,后者只需要包含一次即可,当找不到包含的文件,会警告(php warning),后续代码依然会执行

require

require_once

包含文件时,后者只需要包含一次即可,当找不到包含的文件时,会直接报错,后续代码不执行

包含过来文件中,只要文件中代码是标准格式的PHP代码就会被解析,如果里面内容不是PHP代码,就会把内容显示出来。包含文件的写法:可以是相对路径,也可以是绝对路径

注意:读文件时需要注意当前web服务的权限

copy good.png/b+shell.php/a bad.png(Windows 本地生成图片马)

good.png 是一个正常图片 /b 表示比特流文件

shell.php 这是木马文件或者含有php代码的文件

/a 表示ASCII文件 bad.png 这是生成的图片马

会话管理

会话:服务器和用户之间传输数据的方式或者途经,在通道传输数据之间需要建立通道,这个通道可理解为会话,在客户端通过cookie来管理会话,在服务器通过session来管理会话,cookie和session的介绍以及区别?前面已经讲过!!

cookie和session比较:

1、cookie是存放在用户的浏览器中,是服务端通返回包中set-cookie来设置,cookie表示用户的浏览器和服务器之间的会话状态,登录成功之后方可获取cookie数据,该数据一般具有时效性,失效之后需要用户重新去登录。有了cookie数据之后,用户的每次请求都会带上cookie,服务端会验证该cookie的合法性和时效性,cookie的发送需要遵循浏览器的同源策略。

2、session是存放在服务端,表示用户和服务器之间的会话状态,session和cookie是一一对应的,服务器也需要记住哪个用户登录了该站点,一般情况下,session以文件的形式保存在/tmp目录中,形式为:sess_XXXXX,此刻服务器给浏览器分配的cookie跟session一样,只要该cookie的值被修改过,那么服务器就会要求用户重新登录。

cookie的管理,首先需要服务器给用户分发cookie数据,setcookie(name,value,表达式,路径,域范围),后三者可不写,其中表达式 主要用来设置cookie的时效性。注意:setcookie需要写在HTML代码之前

服务器获取cookie:$_COOKIE["cookie的名字"] 注意:需要使用当前打开的浏览器去访问,不能换用其他浏览器。

删除cookie:setcookie("loginInfo","",time()-3600); 通过服务器去删除

session的管理,工作机制:为用户创建唯一的uid,在该uid的基础上存储变量,uid放在cookie或者通过URL去传输(相比较,后者不安全)

在HTML代码之前通过session_start()开启(就意味着在/tmp目录下会生成session文件,格式:sess_uid,uid是32位的),开启之后可以通过session[]数组存储某些变量

销毁session方式:unset()和session_start()一起使用

session_destory()和session_start()一起使用 注意慎用会清除所有的session数据

header() 向用户的浏览器发送HTTP报头

echo"<meta charset=‘utf-8‘/>";

header("Content-Type:text/html;charset=utf-8"); //解决编码问题

header(‘location:http://www.hacke.com/index.php‘)

文件上传:通过代码实现上传文件的功能。

explode(标识,字符串),按照标识将字符串分割为数组

explode(".","test.te.png")==arrat("test","te","png")

end(数组)取出数组中最后一个值

in_array($fileEndName, $array) 在数组中匹配要找的内容,如果有,则返回true

move_uploaded_file(临时文件位置,目的位置),将临时文件拷贝到目标位置中

file_exists() 检测文件或者目录是否存在,如果存在,则返回true

文件管理:通过PHP代码进行文件的打开、关闭、读取、写入

fopen(打开文件的位置包含了文件路径和文件名,打开文件的方式)

r 以只读的方式去打开

r+ 读和写

w 只以写的方式打开,如果文件不存在,则创建文件

w+ 读和写,如果不存在,则创建

a 文件末尾追加,如文件不存在,则创建文件

a+ 读和追加,如文件不存在,则创建

fclose(打开的文件对应的句柄) 关闭打开的文件

fread(打开的文件对应的句柄,读取大小单位是字节) 读取指定大小的文件内容

feof() 检测是否到达了文件的末尾,如果没有到达文件的末尾,返回值是false

fgets() 读取单行数据内容,只有一个参数,如果需要将整个文档都读取出来,则需要使用feof+fgets循环读 while(!feof($file)){echo fgets($file)}

fgetc()读取单个字符数据

file() 将整个文档中数据读取到数组中,一行对应一个单元

file_get_contents() 将整个文档值班费的数据读取到字符串中

file_put_contents(文件名,数据) 写数据,如果文件名不存在,则创建文件

basename() 文件名 dirname()

copy(源文件,目标文件) 拷贝

unlink() unset() 删除文件

命令执行函数,通过php中某些函数去执行系统命令,和系统交互

常用的命令执行函数有:

system()

exec() 执行了但是没有返回值

shell_exec()

echo ‘whoami‘;

passthru()等等

代码执行函数,使用PHP某些函数去执行字符串类型的PHP代码,注意:PHP代码

常用函数有:

eval()

assert() 代码中通;可以不要

preg_replace(/正则表达式/e,替换的字符。被替换的字符串),注意:如果执行代码解析功能

preg_replace("/test/e","system(net user)","test icq");

原文地址:https://www.cnblogs.com/liujizhou/p/11649829.html

时间: 2024-11-06 07:11:00

PHP表单处理、会话管理、文件上传、文件处理、执行函数(10.8 第十六天)的相关文章

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每一份资料的边界 (boundary),用以产生多重信息部份 (message part).而 HTTP 服务器可以抓取 HTTP POST 的信息, 基本内容:1. 每个信息部份都要用 --[BOUNDARY_NAME] 来包装,以分隔出信息的每个部份,而最后要再加上一个 --[BOUNDARY_N

使用django表单,使网页添加上传文件,并分析文件。

开发环境是: apache + python + django+ eclipse(开发环境) 欲达到目的: 在网页上,添加上传文件控件.然后读取csv文件,并分析csv文件. 操作步骤: django 是MVC的设计模式 (模型M,视图V,控制器C) 1.从django的基本模型中,构建自己的模型. 在myforms.py文件中添加如下代码,之后在html显示的表单数据就可以采用这个模型的数据了. from django import forms from django.views.decora

c#代码,模拟form表单发送post请求,上传文件(并带其他参数)

本人对post理解不深,前段时间遇到一个需要用c#代码发送post请求上传文件的业务,于是参考了几篇帖子,加上自身实践写出了如下代码.写的比较low 望各位大大指正^_^. 业务需求: 对方给了一个接口,让传四个参数分别为"modelId.fileContent.updateTime.encrypt" 其中modelId.updateTime.encrypt 都是普通的字符串类型.fileContent则是二进制文件 我实在是不了解post的相关知识,平时只是普通的用法,没有深层看过相

CI支持各种文件上传-文件类型(Linux + window)

$mimes = array( 'hqx' => 'application/mac-binhex40', 'cpt' => 'application/mac-compactpro', 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv'

jQuery插件AjaxFileUpload实现ajax文件上传时老是执行error方法 问题原因

今天在用jQuery插件AjaxFileUpload实现ajax文件上传时,遇到一个问题,如图: 老是执行error,无法执行succes方法,追踪ajaxfileupload.js源码发现: 当执行if(type=="json")    eval("data = "+data);会抛出异常,导致在处理异常的时候将status = "error" 因此一直执行error方法. 上网查询,得知eval函数是用来执行一段js代码,而并不是如我所想的反

SWFUpload多文件上传 文件个数限制 setStats()

使用swfupload仿赶集的图片上传 SWFUpload是一个基于flash与javascript的客户端文件上传组件. handlers.js文件 完成文件入列队(fileQueued) → 完成选择文件(fileDialogComplete) → 开始上传文件(uploadStart) → 上传处理(uploadProgress) → 上传成功(uploadSuccess) → 上传完成(uploadComplete)  → 列队完成(queueComplete) 如上所示,单选文件顺序执

摒弃FORM表单上传图片,异步批量上传照片

之前作图像处理一直在用form表单做图片数据传输, 个人感觉low到爆炸而且用户体验极差,现在介绍一个一部批量上传图片的小技巧,忘帮助他人的同时也警醒自己在代码的编写时不要只顾着方便,也要考虑代码的健壮性个用户体验度. 异步提交照片需要一个CSS文件和相应jqurey文件.如图: HTML具体代码如下 <!DOCTYPE html> {# 加载静态文件 #} {% load static %} <html lang="en"> <head> <

实现文件上传文件的地址的获取手段之一IO流读取

这是为了我方便之后来查询的代码: 该文件上传是使用form表单提交到后台再使用io流读取,获得文件路径:待修改和完善 package cn.edu.web.servlet; import cn.edu.pojo.Course; import cn.edu.service.CourseListService; import cn.edu.service.CourseListServiceImpl; import com.google.gson.Gson; import org.apache.com

ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件

前言: 从开始学习Vue到使用element-ui-admin已经有将近快两年的时间了,在之前的开发中使用element-ui上传组件el-upload都是直接使用文件选取后立即选择上传,今天刚好做了一个和之前类似的文件选择上传的需求,不过这次是需要手动点击按钮把文件上传到服务器中进行数据导入,而且最多只能够选择一个文件进行上传,上传成功后需要对file-list中的文件列表数据进行清空操作,在这里服务端使用的是ASP.NET Core WEB API来进行文件流数据接收和保存. 一.简单概述e

IE8 文件上传文件为空的问题

今天在使用之前做的应用系统时发现原来能使用的文件上传今天突然不能使用了,换了浏览器试了下原来是IE8的问题,firefox.chrome倒是没有这种问题,网上查了下原来又是IE8的问题,真是崩溃了... IE8基于安全的考虑,文件上传只允许鼠标的点击触发文件浏览及上传.如果是通过js触发的文件浏览就会导致上传失败(默认的input[type=file]的样式太差,与现有系统不一致,所以大多系统开发时会使用自定义的浏览按钮通过js调用原input[type=file]的onclick或者oncha