PHP 网络编程介绍
PHP 学习资料
PHP 学习资料
PHP 学习资料
在当今数字化时代,网络编程是开发各类应用必不可少的技能。PHP 作为一门广泛应用于 Web 开发的编程语言,同样具备强大的网络编程能力。接下来,我们将深入探讨 PHP 中网络连接的建立、Socket 编程、HTTP 请求与响应等网络相关的操作。
一、网络连接的建立
在 PHP 中建立网络连接,主要是通过使用内置的函数来实现与远程服务器的通信。最常见的是使用fsockopen函数,它可以打开一个网络连接或者 Unix 套接字连接。
<?php
// 建立到远程服务器的TCP连接,这里以连接百度为例
$host = 'www.baidu.com';
$port = 80;
$timeout = 5;
$socket = fsockopen($host, $port, $errno, $errstr, $timeout);if (!$socket) {echo "连接失败: ". $errstr. " (". $errno. ")". "<br>";
} else {echo "成功连接到 ". $host. ":". $port. "<br>";// 这里可以进行后续的数据发送和接收操作fclose($socket);
}
?>
在上述代码中,fsockopen函数的第一个参数是目标主机名,第二个参数是端口号,$errno
和$errstr
用于获取连接错误的相关信息,$timeout
指定连接超时时间。如果连接成功,就可以进一步进行数据交互,最后使用fclose函数关闭连接。
二、Socket 编程
Socket 是一种网络通信机制,它允许不同主机之间进行数据传输。PHP 提供了丰富的函数来支持 Socket 编程,包括创建 Socket、绑定地址、监听连接、接受连接和发送 / 接收数据等操作。
(一)创建 Socket
使用socket_create函数创建一个 Socket。
<?php
// 创建一个TCP类型的Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {echo "Socket创建失败: ". socket_strerror(socket_last_error()). "<br>";
} else {echo "Socket创建成功<br>";
}
?>
socket_create函数的第一个参数AF_INET表示使用 IPv4 地址族,SOCK_STREAM表示使用 TCP 协议,SOL_TCP表示协议类型为 TCP。
(二)绑定地址和端口
使用socket_bind函数将 Socket 绑定到指定的地址和端口。
<?php
$host = '127.0.0.1';
$port = 12345;
if (socket_bind($socket, $host, $port) === false) {echo "绑定失败: ". socket_strerror(socket_last_error($socket)). "<br>";
} else {echo "绑定到 ". $host. ":". $port. " 成功<br>";
}
?>
(三)监听连接
使用socket_listen函数监听指定 Socket 上的连接请求。
<?php
if (socket_listen($socket, 5) === false) {echo "监听失败: ". socket_strerror(socket_last_error($socket)). "<br>";
} else {echo "正在监听连接...<br>";
}
?>
第二个参数5表示最大允许的等待连接数。
(四)接受连接
使用socket_accept函数接受客户端的连接请求。
<?php
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {echo "接受连接失败: ". socket_strerror(socket_last_error($socket)). "<br>";
} else {echo "接受客户端连接成功<br>";// 这里可以进行与客户端的数据交互socket_close($clientSocket);
}
?>
(五)发送和接收数据
使用socket_write函数向客户端发送数据,socket_read函数从客户端接收数据。
<?php
// 向客户端发送数据
$message = "Hello, client!";
if (socket_write($clientSocket, $message, strlen($message)) === false) {echo "发送数据失败: ". socket_strerror(socket_last_error($clientSocket)). "<br>";
} else {echo "数据发送成功<br>";
}// 从客户端接收数据
$buffer = socket_read($clientSocket, 1024);
if ($buffer === false) {echo "接收数据失败: ". socket_strerror(socket_last_error($clientSocket)). "<br>";
} else {echo "接收到的数据: ". $buffer. "<br>";
}
?>
三、HTTP 请求与响应
在 PHP 中进行 HTTP 请求与响应操作,除了前面提到的使用fsockopen函数手动构建 HTTP 请求外,还可以使用更方便的file_get_contents函数(结合stream_context_create函数设置请求头)或者curl扩展。
(一)使用 file_get_contents 和 stream_context_create
<?php
$url = 'http://example.com';
$options = array('http' => array('header' => "Content-type: application/x-www-form-urlencoded\r\n",'method' => 'POST','content' => http_build_query(array('key1' => 'value1', 'key2' => 'value2')))
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === false) {echo "请求失败<br>";
} else {echo "响应内容: ". $result. "<br>";
}
?>
在这个例子中,stream_context_create函数创建了一个包含 HTTP 请求头和请求方法、请求数据的上下文,file_get_contents函数使用这个上下文来发送 HTTP 请求并获取响应内容。
(二)使用 curl 扩展
<?php
$url = 'http://example.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 如果是POST请求,还需要设置以下参数
// curl_setopt($ch, CURLOPT_POST, true);
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('key1' => 'value1', 'key2' => 'value2')));
$result = curl_exec($ch);
if ($result === false) {echo "请求失败: ". curl_error($ch). "<br>";
} else {echo "响应内容: ". $result. "<br>";
}
curl_close($ch);
?>
curl扩展提供了更丰富的选项来控制 HTTP 请求,如设置请求头、认证信息、代理等。CURLOPT_RETURNTRANSFER设置为true表示将响应内容作为字符串返回,而不是直接输出。
通过掌握这些 PHP 网络编程的基础知识和操作,开发者能够构建出与远程服务器进行高效通信的应用程序,实现数据的传输、接收和处理。在实际项目中,还需要根据具体的业务需求和网络环境,进一步优化网络编程代码,确保通信的稳定性和安全性。如果在实践过程中遇到如高并发网络连接处理、网络安全加密等问题,欢迎随时告诉我,我们一起探讨解决方案。
相关文章:
PHP 网络编程介绍
PHP 学习资料 PHP 学习资料 PHP 学习资料 在当今数字化时代,网络编程是开发各类应用必不可少的技能。PHP 作为一门广泛应用于 Web 开发的编程语言,同样具备强大的网络编程能力。接下来,我们将深入探讨 PHP 中网络连接的建立、Socket 编程、…...

【C语言】C语言 食堂自动化管理系统(源码+数据文件)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【C语言】C语言 食堂自动化管理系统(源…...
mybatis存储过程返回list
在MyBatis中,要想通过调用存储过程返回一个List集合,你需要在Mapper接口中定义一个方法,并使用Param注解来传递存储过程的参数。同时,你需要在Mapper XML文件中配置相应的<select>标签,并指定statementType"…...

【vue】nodejs版本管理利器:nvm
nvm(Node Version Manager)即 Node 版本管理器,是一个用于在系统中轻松安装、管理和切换不同版本 Node.js 的工具。 在实际开发中,不同的项目可能基于不同版本的 Node.js 构建。比如一个旧项目依赖于 Node.js 12.x 版本的特定功能…...
负载测试工具有哪些?
Apache JMeter Apache JMeter 是一款开源的性能测试工具,主要用于对 Web 应用程序进行功能、负载和压力测试。JMeter 支持多种协议和技术,包括 HTTP, HTTPS, FTP 和 WebSocket 等。通过模拟大量并发用户访问来评估应用程序的表现1。 jmeter -n -t testp…...

路由基础 | 路由引入实验 | 不同路由引入方式存在的问题
注:本文为 “路由基础 | 路由表 | 路由引入” 相关文章合辑。 未整理去重。 路由基本概念 1—— 路由表信息、路由进表以及转发流程、最长掩码匹配原则 静下心来敲木鱼已于 2023-11-26 14:06:22 修改 什么是路由 路由就是指导报文转发的路径信息,可以…...

网络安全不分家 网络安全不涉及什么
何为网络安全 信息安全是指系统的硬件、软件及其信息受到保护,并持续正常运行和服务。信息安全的实质是保护信息系统和信息资源免受各种威胁、干扰和破坏,即保证信息的安全性。 网络安全是指利用网络技术、管理和控制等措施,保证网络系统和…...

智能编程助手功能革新与价值重塑之:GitHub Copilot
引言: GitHub Copilot 的最新更新为开发者带来了显著变化,其中 Agent Mode 功能尤为引人注目。该模式能够自动识别并修复代码错误、自动生成终端命令,并具备多级任务推理能力,这使得开发者在开发复杂功能时,可大幅减少…...
wordpress企业官网建站的常用功能
WordPress 是一个功能强大的内容管理系统(CMS),广泛用于企业官网的建设。以下是企业官网建站中常用的 WordPress 功能: 1. 页面管理 自定义页面模板:企业官网通常需要多种页面布局,如首页、关于我们、产品展示、联系我们等。Wor…...
讯方·智汇云校华为官方授权培训机构
1.官方授权 讯方智汇云校是华为领先级授权培训机构(华为授权培训合作伙伴(HALP)体系,分为认证、优选、领先三个等级,领先级是HALP最高级),代表着华为对培训合作伙伴在专业能力、师资队伍、合作…...

C语言中的文件
文章目录 文件1. 流1.1 文件缓冲1.2 标准流1.3 文本文件和二进制文件 2. 打开/关闭文件2.1 fopen2.2 fclose 3. 读写文件3.1 fgetc & fputc3.2 fgets & futs3.3 fscanf & fprintf3.4 fread & fwrite 4. 文件定位5. 错误处理5.1 errno 文件 1. 流 在 C 语言中…...

利用分治策略优化快速排序
1. 基本思想 分治快速排序(Quick Sort)是一种基于分治法的排序算法,采用递归的方式将一个数组分割成小的子数组,并通过交换元素来使得每个子数组元素按照特定顺序排列,最终将整个数组排序。 快速排序的基本步骤&#…...

前端工程化的具体实现细节
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

数据分析--数据清洗
一、数据清洗的重要性:数据质量决定分析成败 1.1 真实案例警示 电商平台事故:2019年某电商大促期间,因价格数据未清洗导致错误标价,产生3000万元损失医疗数据分析:未清洗的异常血压值(如300mmHgÿ…...

✨1.HTML、CSS 和 JavaScript 是什么?
✨✨ HTML、CSS 和 JavaScript 是构建网页的三大核心技术,它们相互协作,让网页呈现出丰富的内容、精美的样式和交互功能。以下为你详细介绍: 🦋1. HTML(超文本标记语言) 定义:HTML 是一种用于描…...

QT--常用对话框
文章目录 前言一、颜色对话框颜色对话框代码解析 二、文本对话框文本对话框代码解析 三、输入对话框1.整型输入对话框2.浮点数输入对话框3.条目对话框 四、提示对话框1.提问对话框2.消息对话框3.警告对话框4.关键对话框 五、进度对话框六、向导对话框总结 前言 今天介绍几种标…...
基于 Ollama 工具的 LLM 大语言模型如何部署,以 DeepSeek 14B 本地部署为例
简简单单 Online zuozuo :本心、输入输出、结果 文章目录 基于 Ollama 工具的 LLM 大语言模型如何部署,以 DeepSeek 14B 本地部署为例前言下载 Ollama实际部署所需的硬件要求设置 LLM 使用 GPU ,发挥 100% GPU 性能Ollama 大模型管理命令大模型的实际运行资源消耗基于 Ollam…...

图的最小生成树算法: Prim算法和Kruskal算法(C++)
上一节我们学习了最短路径算法, 这一节来学习最小生成树. 最小生成树(Minimum Spanning Tree, MST)算法是图论中的一种重要算法, 主要用于在加权无向图中找到一棵生成树, 使得这棵树包含图中的所有顶点, 并且所有边的权重之和最小. 这样的树被称为最小生成树. 最小生成树广泛应…...

WPS的AI助手进化跟踪(灵犀+插件)
Ver V0.0 250216: 如何给WPS安装插件用以支持其他大模型LLM V0.1 250217: WPS的灵犀AI现在是DeepSeek R1(可能是全参数671B) 前言 WPS也有内置的AI,叫灵犀,之前应是自已的LLM模型,只能说是属于“能用,有好过无”,所…...

我用AI做数据分析之数据清洗
我用AI做数据分析之数据清洗 AI与数据分析的融合效果怎样? 这里描述自己在使用AI进行数据分析(数据清洗)过程中的几个小故事: 1. 变量名的翻译 有一个项目是某医生自己收集的数据,变量名使用的是中文,分…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...