欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-06 12:39:33
...

一.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.此案例基于上一次作业:https://www.php.cn/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.运行结果:
PHP扩展知识:URL相关函数和api接口案例

(二)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.运行结果
PHP扩展知识:URL相关函数和api接口案例