【PHP小课堂】PHP中的网络组件相关函数

PHP中的网络组件相关函数

作为一门以 WEB 开发为主战场的编程语言来说,PHP 即使是在目前这个大环境下,依然也是 WEB 领域的头号玩家。我们在网络相关的功能中也提供了许多方便好用的函数组件,而且它们都是不需要安装扩展就能够使用的。今天,我们就来学习了解一下。

获取服务器相关信息

首先就是获取一些服务器相关信息的能力。主要包括 DNS 以及 IP 相关的功能函数的使用。

主机 DNS 信息

var_dump(checkdnsrr("www.baidu.com", "A")); // bool(true)

var_dump(checkdnsrr("max.baidu.com", "A")); // bool(false)

var_dump(checkdnsrr("mail.baidu.com")); // bool(true)

通过这个 checkdnsrr() 函数,我们可以获取某个域名的解析情况。它的第二个参数默认是 MX ,也就是邮件域名的解析,当然我们也可以指定 A 、TXT 这些解析内容。返回的就是是否有这个解析,也就是 true 或者 false 的结果。

$mxhosts = [];
getmxrr("baidu.com", $mxhosts);
var_dump($mxhosts);
// array(5) {
//     [0]=>
//     string(15) "mx.n.shifen.com"
//     [1]=>
//     string(14) "mx50.baidu.com"
//     [2]=>
//     string(13) "mx1.baidu.com"
//     [3]=>
//     string(14) "jpmx.baidu.com"
//     [4]=>
//     string(19) "mx.maillb.baidu.com"
//   }

var_dump(dns_get_record("baidu.com"));
// array(5) {
//     [0]=>
//     array(6) {
//       ["host"]=>
//       string(9) "baidu.com"
//       ["class"]=>
//       string(2) "IN"
//       ["ttl"]=>
//       int(4502)
//       ["type"]=>
//       string(2) "MX"
// …………………………
// …………………………
// …………………………
// …………………………

通过 getmxrr() 函数,可以获得这个域名下面的所有 MX 解析记录情况。dns_get_record() 则是获取域名的解析信息数组,它的内容会更加的详细清晰一些。

主机 IP 信息

一般要查看某个域名的解析对应 IP ,我们可以通过系统的 PING 命令来快速查看,而在 PHP 中,也有对应的函数可以获得某个域名指向的主机 IP 信息。

var_dump(gethostbyname("www.baidu.com")); // string(15) "183.232.231.174"
var_dump(gethostbyaddr("183.232.231.174")); // string(9) "localhost"

var_dump(gethostbynamel("www.baidu.com"));
// array(2) {
//     [0]=>
//     string(15) "183.232.231.174"
//     [1]=>
//     string(15) "183.232.231.172"
//   }

gethostbyname() 是根据域名可以获得域名指向的主机的 IP 地址,当然对于百度来说,这个可能是它的一个分发的站点IP。而 gethostbyaddr() 则是根据 IP 地址获得域名信息,这个功能相对来说没那么好用,比如我这里返回的都是 localhost 。

gethostbynamel() 函数获取到的是对应域名的所有指向的 IP 地址,可以看到返回的是两个 IP 地址。

另外,我们也可以获得本机的主机名。

var_dump(gethostname()); // string(27) "zhangyuedeMacBook-Pro.local"

这个函数是不需要任何参数的,直接返回的就是当前运行脚本的本机信息。

IP 地址转换

对于 IP 地址转换,也就是将 IP 地址转换成十进制的数字类型。

var_dump(ip2long('127.0.0.1')); // int(2130706433)
var_dump(long2ip(2130706433)); // string(9) "127.0.0.1"

ip2long() 是从 IP 地址转换为长整型,而 long2ip() 就是反过来,从长整型转换为 IP 地址格式。

协议端口相关信息

首先我们来看一下协议编号。

var_dump(getprotobyname("tcp")); // int(6)
var_dump(getprotobynumber(6)); // string(3) "tcp"

getprotobyname() 用于根据协议名来获取协议的编号,而 getprotobynumber() 也是它的反函数,从协议编号获得协议名称。

$services = array('http', 'ftp', 'ssh', 'telnet', 'imap',
'smtp', 'nicname', 'gopher', 'finger', 'pop3', 'www');

foreach ($services as $service) {
    $port = getservbyname($service, 'tcp');
    echo $service . ": " . $port, PHP_EOL;
}
// http: 80
// ftp: 21
// ssh: 22
// telnet: 23
// imap: 143
// smtp: 25
// nicname: 43
// gopher: 70
// finger: 79
// pop3: 110
// www: 80

var_dump(getservbyport(80, 'tcp')); // string(4) "http"

同样地,getservbyname() 是根据协议的名称获取它的默认端口号,而 getservbyport() 则是根据端口号和网络层协议名称来获得应用层的协议信息。这两个函数都是和应用层的这些服务器软件默认端口号相关的。

返回数据信息

接下来,我们来看一些和请求响应数据有关的函数。要使用这些函数的话,就需要启动应用服务了,也就是我们需要使用浏览器来访问了。这里,我们就简单地使用 php -S 来直接启动简易服务器进行测试。

状态码设置

这里的状态码主要指的就是响应的状态码。默认情况下,我们正常输出就是 200 ,在这里,我们将状态码改为 404 。

// 获取当前状态码,并设置新的状态码
var_dump(http_response_code(404)); //  int(200)

//获取新的状态码
var_dump(http_response_code()); //  int(404)

当然,这样的修改并不会影响我们的输出,但是在浏览器中查看请求的时候,对应的这个请求就会变红了,因为状态码是有问题的 404 状态码了。http_response_code() 的返回值是当前的状态码,如果给了参数的话,就会设置成新的状态码。

头信息设置

头信息设置的函数 header() 相信大家还是比较常用的。比如现在做前后端分离的应用时,使用 CROS 来解决跨域问题的时候多少都会用到这个函数。所以它不是我们今天学习的重点,我们今天要了解的东西是另外一些和头信息相关的函数。

header("Test1: Info1");
header("Test2: Info2");
header("Test3: Info3");

header_remove("Test2");

var_dump(headers_list());
// array(3) {
//     [0]=>
//     string(23) "X-Powered-By: PHP/7.3.9"
//     [1]=>
//     string(12) "Test1: Info1"
//     [2]=>
//     string(12) "Test3: Info3"
//   }

使用 header() 函数设置了头信息之后,如果不想要了,那么我们可以通过 header_remove() 来删除之前定义的头信息内容。而 headers_list() 则会显示我们或者 PHP 程序中额外添加的头信息内容,比如 X-Powered-By 这个信息是默认情况下 php -S 这个简单服务器命令自带的一个头信息。

d956a0d00e68a01683fe0db6d054c937.png

两种不同的 Cookie 函数

cookie 相关操作的函数其实也不用多介绍,但是其实是有两种设置 cookie 的函数的。

setcookie("CK_TEST1", "Cookie1=?---&&f");
setrawcookie("CK_TEST1", "Cookie2=?---&&f");

知道它们两个的区别吗?就像下图所示的一样,setcookie() 会默认对数据内容进行 urlencode() 编码,而 setrawcookie() 就像它的名称一样,设置的数据是原始的形式。

d1b94ff1e4a83c30ca9495b264bc9419.png

总结

在官方文档中的网络相关的扩展函数就是这些了,当然,还有一个大头我们没有介绍,那就是 socket 相关的内容。这方面的内容我们将在后面专门学习 socket 相关的系列文章中再进行详细的学习说明。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/03/source/2.PHP%E4%B8%AD%E7%9A%84%E7%BD%91%E7%BB%9C%E7%BB%84%E4%BB%B6%E7%9B%B8%E5%85%B3%E5%87%BD%E6%95%B0.php

参考文档:

https://www.php.net/manual/zh/book.network.php

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/657630.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3学习(二)

前言 上一篇分享了vue的基础指令,这篇记录下vue3的核心内容,也是自己的学习笔记,可能有些核心还不全,大佬请略过。 一、核心内容 分享这个之前,先声明下,我这里是用的脚手架的写法,分享的讲解截…

【放球问题】920. 播放列表的数量

本文涉及知识点 【组合数学 隔板法 容斥原理】放球问题 本题同解 【动态规划】【组合数学】【C算法】920播放列表的数量 LeetCode 920. 播放列表的数量 你的音乐播放器里有 n 首不同的歌,在旅途中,你计划听 goal 首歌(不一定不同&#x…

[ C++ ] 类和对象( 下 )

初始化列表 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟 一个放在括号中的初始值或表达式。 class Date { public: Date(int year, int month, int day): _year(year), _month(month), _d…

Next-Admin,一款基于Nextjs开发的开箱即用的中后台管理系统(全剧终)

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的 Next-Admin 项目的最新更新。 这次更新是1.0版本最后一次更新,也根据用户反馈的问题做了一些优化&am…

展望跨境智慧银行在全球化金融服务中的发展趋势和机遇

一、引言 随着全球经济的不断融合和金融科技的迅猛发展,跨境智慧银行作为连接不同国家和地区金融市场的桥梁,正逐渐展现出其独特的魅力和潜力。跨境支付与结算作为跨境智慧银行的核心业务之一,随着全球化的深入发展和国际贸易的日益频繁,其业务场景也愈发丰富和复杂。本文…

从了解到掌握 Spark 计算框架(一)Spark 简介与基础概念

文章目录 什么是 Spark?核心特点 Spark 对比 MapReduceSpark 编程模型RDDDataFrameDataset Spark 运行模式Spark 生态 什么是 Spark? Spark 是一个基于内存的分布式计算框架,最初由加州大学伯克利分校的 AMPLab 开发,后来捐赠给了…

【代码随想录】【算法训练营】【第21天】 [530]二叉搜索树的最小绝对差 [501]二叉搜索树的众数 [236]二叉树的最近公共祖先

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 21,天气不错的周二~ 题目详情 [530] 二叉搜索树的最小绝对差 题目描述 530 二叉搜索树的最小绝对差 解题思路 前提:二叉搜索树 思路:根据二叉搜索树的中…

李廉洋:5.29黄金早盘2365-2345区间,今日行情走势分析及策略。

黄金消息面分析:当前美国存在一个令人担忧且未被充分关注的问题:房地产行业低迷、高利率和抵押贷款利率、租金高涨以及美联储的紧缩政策构成了一个恶性循环。由于高房价和高抵押贷款利率,美国住房经济活动远低于两年前的水平。为了让该行业好…

Post Microsoft Build and AI Day 上海开发者日

点击蓝字 关注我们 编辑:Alan Wang 排版:Rani Sun 这个六一怎么过?来微软 Reactor,一起过儿童节吧! 6月1日,Microsoft Azure & Microsoft Reactor 面向大小朋友特别推出六一特辑,「Post Mic…

【原创】java+springboot+mysql日程管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

Mac | Mac 移动硬盘无法分区问题

现象问题 电脑配置:MacBook Pro M1,系统 Sonoma Mac 系统新升级了 Sonoma,结果出现各种问题。外接屏幕居然不能旋转 90 ,查了一下是Sonoma系统导致的,以及莫名发热的问题。想着要么回退一下系统算了,于是网…

基于tensorflow的咖啡豆识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、前期工作 1. 设置GPU import tensorflow as tfgpus tf.config.list_physical_devices("GPU")if gpus:tf.config.experimental.set_memory_gr…

Redhat9 LAMP安全配置方案及测试

目录 数据库主机 安装Mariadb数据库服务 设置mariadb开机自动启动 Php主机 部署Apache服务器 设置apache服务开机自启 安装php 安装 phpMyAdmin 打开测试机 更新软件包列表: 首先,确保你的软件包列表是最新的。打开终端并输入以下命令&#xf…

电脑如何远程访问?

【天联】的使用场景 电脑远程访问在现代科技的发展中扮演了重要的角色。对于企业和个人用户来说,远程访问的便利性提供了许多机会和可能性。作为一种高效的工具,【天联】具有广泛的应用场景,可以实现异地统一管理、协同办公以及远程数据采集…

咖啡看书休闲时光404错误页面源码

源码介绍 咖啡看书休闲时光404错误页面源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 源码效果 源码下载 咖啡看书…

WEB安全:Content Security Policy (CSP) 详解

Content Security Policy (CSP) 是一种强大的网页安全机制,用于防止跨站脚本 (XSS) 和其他注入攻击。通过设置一系列的内容安全策略,CSP 可以限制网页可以加载的资源,从而保护用户数据和网站的安全性。 什么是 XSS 攻击? 跨站脚本攻击 (XSS) 是一种常见的安全漏洞,攻击者…

2024年JAVA、C++、Pyhton学哪种语言更容易进国央企?

对于不同编程语言在进入国有企业的观点大体是正确的,不过在实际选择时还需考虑一些因素。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给个评论222,私信…

“2024南京智博会”共同探索智能科技产业创新发展新路径

随着全球数字化浪潮的深入推进,智慧城市、物联网与大数据等领域的发展成为推动经济社会发展的重要力量。在这样的背景下,2024南京国际智慧城市、物联网、大数据博览会(南京智博会)的举办,无疑为国内外企业提供了一个绝…

如何成为一名合格的JAVA程序员?

如何成为一名称职的Java编程人员?你一定不能错过的两本书。 第一本《Java核心技术速学版(第3版)》! 1.经典Java作品《Java核心技术》的速学版本,降低学习门槛,帮助读者更容易学习Java,更快地把…

基于ssm的微信小程序的居民健康监测系统

采用技术 基于ssm的微信小程序的居民健康监测系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringMVCMyBatis 工具:IDEA/Ecilpse、Navicat、Maven 页面展示效果 后端页面 用户信息管理 健康科普管理 公告管理 论坛…