博主信息
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
博文
145
粉丝
7
评论
7
访问量
97918
积分:0
P豆:296

PHP扩展知识:URL相关函数和api接口案例

2021年03月10日 17:18:56阅读数:748博客 / 李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰/ PHP学习

一.URL相关函数知识点

1.一般URL的组成:

  • 协议:http或者https等等
  • 域名(ip地址)
  • 端口:默认80;https默认443
  • 文件路径
  • 真正访问的文件
  • PATH_INFO
  • ?查询参数:多个参数之间通过&连接,空格用加号+
  • #锚点信息

2.常见获取URL信息的函数

  • $_SERVER['SERVER_NAME'] 获取当前脚本运行在服务的域名:主机名
  • $_SERVER['REQUEST_URI'] URI 用来指定要访问的页面。例如
    “/index.html”。
  • $_SERVER['PHP_SELF'] 获得当前执行脚本文件名:包含路径
  • $_SERVER['SCRIPT_NAME'] 包含当前脚本的路径。
  • $_SERVER['PATH_INFO'] 包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息
  • $_SERVER['QUERY_STRING'] 获取当前请求的查询字符串

3.URL相关的函数;

  • urlencode("str")urldecode("url"):URL地址的编码和解码
  • parse_str("query_string",$arr);把查询字母串解析成一个关联数组给$arr;
  • http_build_query("关联数组");把一个关联数组转换成查询自负床格式
  • parse_url('url');:解析URL并返回成一个关联数组

4.其他常用url相关的常用函数

  • explode("分隔符","字符串"):把字符串分割成数组;
  • ucfirst("字符串"):把字符串首字母大写
  • array_filter($arr):过滤数组中的空值
  • call_user_func_array([obj,func],[参数...]);异步调用函数
  • __NAMESPACE__:空间名魔术常量;

5.其他函数:

  • file_exist(“文件路径名字”):判断文件是否存在
  • file_put_contents(“文件名”,”写入内容”,FILE_APPEND);把内容追加写入文件
  • PHP_EOL:换行常量

二.PHP发起http请求:curl函数的使用

1.$curl=curl_init();初始化请求会话
2.curl_setopt($curl,”参数类型常量”,参数值);设置请求会话配置项;参数类型常量如下

  • CURLOPT_URL:请求url
  • CURLOPT_HTTPGET:设置请求类型GET;值为true|flase;
  • CURLOPT_HEADER:设置请求头信息:flase;
  • CURLOPT_RETURNTRANSFER:设置指只返回结果,不输出;true;

3.$res=curl_exec($curl);执行请求返回结果
4.curl_close($curl);关闭请求会话;


三.案例实战:

(一)处理url地址中控制器访问与参数解析的类

1.此案例基于上一次作业://m.sbmmt.com/blog/detail/26607.html
增加url地址解析类

  1. <?php
  2. use app\Models\StaffsModel;
  3. use core\View;
  4. include __DIR__."/vendor/autoload.php";
  5. // echo "OK";
  6. class Route
  7. {
  8. private $classname="";
  9. private $func="";
  10. private $params=[];
  11. public $model=null;
  12. public $view=null;
  13. // private $class=null;
  14. public function __construct(StaffsModel $model,View $view){
  15. $this->model=$model;
  16. $this->view=$view;
  17. $this->execute();
  18. }
  19. //通过url地址信息获取控制器和函数名,并获取参数;
  20. public function purl(){
  21. if($_SERVER["PATH_INFO"]){
  22. $PI= $_SERVER["PATH_INFO"];
  23. $PI=ltrim($PI,'/');
  24. $controller=ucfirst(strstr($PI,'/',true));
  25. $func=ltrim(strstr($PI,"/"),"/");
  26. // echo $func,$controller;
  27. $this->classname="app\\Controllers\\".$controller;
  28. $this->func=$func;
  29. }
  30. if($_SERVER["QUERY_STRING"]){
  31. $p=$_SERVER["QUERY_STRING"];
  32. parse_str($p,$params);
  33. // print_r($params);
  34. $this->params=array_filter($params);
  35. }
  36. }
  37. public function execute(){
  38. $this->purl();
  39. //以变量名实列化类时:变量值必须具备完整命名空间
  40. $obj=new $this->classname ($this->model,$this->view);
  41. return call_user_func_array([$obj,$this->func],$this->params);
  42. // echo $this->classname,"<br>".$this->func,"<br>".print_r($this->params,true);
  43. }
  44. }

2.入口文件

  1. include __DIR__."/Route.php";
  2. include __DIR__."/vendor/autoload.php";
  3. $model=new StaffsModel();
  4. $view=new View("app/View/staffs");
  5. new Route($model,$view);

3.运行结果:

(二)api接口的调用实战

1.代码

  1. <?php
  2. $url="http://v.juhe.cn/joke/content/text.php?";
  3. $key="b82ad6748770b5130d49f61a7e12bae0";
  4. $page=1;
  5. $pagesize=5;
  6. $time=time();
  7. $query=http_build_query(["key"=>$key,"page"=>$page,"pagesize"=>$pagesize]);
  8. // echo "<pre>".$url.$query;
  9. $curl=curl_init();
  10. curl_setopt($curl,CURLOPT_URL,$url.$query);
  11. curl_setopt($curl,CURLOPT_HTTPGET,true);
  12. curl_setopt($curl,CURLOPT_HEADER,false);
  13. curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
  14. $res=curl_exec($curl);
  15. curl_close($curl);
  16. // var_dump($curl);
  17. $data=json_decode($res,true);//把json数据类型转换成数组
  18. ?>
  19. <!DOCTYPE html>
  20. <html lang="en">
  21. <head>
  22. <meta charset="UTF-8">
  23. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  24. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  25. <title>api-5个小笑话</title>
  26. </head>
  27. <body>
  28. <?php if($data["error_code"]===0):?>
  29. <?php foreach($data["result"]["data"] as $row):?>
  30. <h3><?= $row["updatetime"]?></h3>
  31. <p><?= $row["content"]?></p>
  32. <hr>
  33. <?php endforeach ?>
  34. <?php else:?>
  35. <p><?=$data["reason"]?></p>
  36. <?php endif ?>
  37. </body>
  38. </html>

2.运行结果

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论