Php与Web交互

简单是可靠的先决条件
——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>";

运行结果

运行结果.PNG
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;
     }
}

运行结果如下图所示

表单验证.PNG

总结

其实Php与Web的交互还有很多,但是在这里仅仅大概介绍一下,以后用到的时候再具体说。
还有,非常痛苦的一件事情PhpStorm可能用的自己内置的网络服务器,好多效果并没有实现,比如文件上传,账号密码为空的Js弹窗,好迷茫,根本无从下少,有大神可以教给我怎么解决这个问题么?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,523评论 25 708
  • 好文章要让更多的人知道!!本文转载自:开源社区原文链接:https://www.kysq.com/article/...
    php_bruce阅读 1,177评论 1 28
  • 01 这辈子,我只给父亲过过一个半父亲节,所以,留下我一辈子的遗憾与后悔。 大三,我给父亲买过一次礼物以后,后来的...
    西瓜甜甜啦阅读 468评论 22 32