简单是可靠的先决条件
——Edsger Dijkstra
本篇文章主要知识点
- Php与Web交互基本
- 文件上传
- 表单验证
交互基本
1.变量
为什么提到变量,这个变量可不是简单的自定义变量,他是Php里获取服务器信息,请求信息的方法,通常把这些信息称为EGPCS(environment ,get , post , cookies,server)
这些变量不仅在函数定义中是可见的,而且是全局的
2.服务器信息
$_SRVER[]数组包含大量跟服务器有关的信息,不过在这里介绍不完全部的,所以写一段代码,简单概括几种常用的
echo "当前服务器IP地址:".$_SERVER['SERVER_ADDR']."<br>";
echo "当前主机名:".$_SERVER['SERVER_NAME']."<br>";
echo "客户端IP地址:".$_SERVER['REMOTE_ADDR']."<br>";
echo "客户端端口:".$_SERVER['REMOTE_PORT']."<br>";
echo "服务器目录:".$_SERVER['DOCUMENT_ROOT']."<br>";
运行结果
3.表单处理
客户端可以使用两种方法向服务器传表单数据:GET和POST,采用哪种方法是由表单标签<form>中的method属性所指定的
一个GET请求,需要把表单参数编码成URL,成为查询字符串
而一个POST请求,则通过请求HTTP主体来传递表单参数,不需要考虑URL
HTTP规范指出,GET请求是幂等的,也就是说,一个对于特定URL的GET请求,与对应于这一特定URL的两个或者多个GET请求是一样的,因此Web浏览器可以把GET请求响应的页面缓存起来,因为这个页面不管响应多少次,响应页面是不变的,而POST请求不具有幂等性,他们无法被缓存,每次刷新都要重新发送表单数据
4.自处理页面
所谓自处理页面,就是一个Php页面能同时用来生成表单和处理表单,实现这个功能能有两种方法
第一种:判断method方法,如果是POST获取处理表单,如果GET直接输出
第二种:通过isset()函数判断指定的参数是否被创建,如果存在则执行处理,否则生成
文件上传
在Php中上传文件最大的问题是对超大文件的处理,对此,Php有两种方法避免此种情况,软性限制和硬性限制
在Php.ini文件中可以对上传文件进行限制,包括是否支持上传,上传文件默认目录,上传文件大小,指令执行时间,指令分配的内存空间
修改后需要重新启动Apache服务器,才能生效
在表单中,在文件域之前添加一个名称为MAX_FILE_SIZE的隐藏域,通过他的值来实现软限制
Php使用is_uploaded_file()来判断文件是否是通过HTTP POST上传的,如果是就返回true,可以继续上传,否则就不能继续
下面来实现一个文件上传的功能
<div id="one">
<span>文件上传测试</span>
<form action="" method="post" enctype="multipart/form-data">
<!--这里我们创建一个隐藏的域,用来保存我们的限制大小-->
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
<input type="file" name="text">
<input type="submit" name="sub" value="上传">
</form>
<span>
<!--开始Php逻辑-->
<?php
//判读是否是执行了提交
if(isset($_POST['sub'])){
//判断文件夹是否存在,如果不存在就创建
if(!is_dir("images")){
mkdir("images");
}
$file = $_FILES['text']; //获取表单提交的文件名称
//产生错误
if($_FILES['text']["error"]>0){
echo "上传错误";
//1,2,3,4都是固定值,每一个值代表一个错误
switch ($_FILES['text']['error']){
case 1:echo "文件大小超出配置文件限制值";break;
case 2:echo "文件大小超出表单限制值";reak;
case 3:echo"文件不全";break;
case 4:echo"没有文件";break;
}
}else{
if(is_uploaded_file($file['tmp_name'])){
$flotime = time();
$str = substr($file['name'],-4,4);
$path = "iamges/".$flotime.$str;
if(move_uploaded_file($file['tmp_name'],$path)){
echo "上传成功:".$flotime.$str;
}
}
}
}
?>
</span>
</div>
表单验证
表单验证用来检测表单信息是否填写正确
<form id="form1" name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<input name="user" type="text" size="16">
<input name="password" type="password" size="16">
<input type="submit" name="Submit" value="登录">
</form>
<?php
/**
* Created by PhpStorm.
* User: surine
* Date: 2017/7/27
* Time: 17:56
*/
//判断是否点击了按钮
if(isset($_POST['Submit'])){
//获取值
$user = $_POST['user'];
$pswd = $_POST['password'];
if(empty($user)||empty($pswd)){
echo "<script>alert('用户名不能为空');
window.location.herf = 'Input.php';<script>";
}else{
echo "用户名".$user."密码".$pswd;
}
}
运行结果如下图所示
总结
其实Php与Web的交互还有很多,但是在这里仅仅大概介绍一下,以后用到的时候再具体说。
还有,非常痛苦的一件事情PhpStorm可能用的自己内置的网络服务器,好多效果并没有实现,比如文件上传,账号密码为空的Js弹窗,好迷茫,根本无从下少,有大神可以教给我怎么解决这个问题么?