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弹窗,好迷茫,根本无从下少,有大神可以教给我怎么解决这个问题么?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

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