新闻详情

新闻详情

首页 / 资讯中心 / 详情

一个 `.php` 文件从你敲下命令到屏幕上输出结果,中间经历了哪些步骤?

发布时间:2026/9/26 12:46:49来源:尧图网络
一个 `.php` 文件从你敲下命令到屏幕上输出结果,中间经历了哪些步骤?
场景命令行执行php test.phpCLI模式不是网页访问区分FPM前提系统环境已经安装PHP解释器并且把php可执行文件加入环境变量PATH根因PHP本身是解释型语言不是直接CPU执行。敲下php命令后操作系统、PHP内核、Zend引擎依次完成找到程序、读取源码、词法语法分析、编译成中间字节码、Zend虚拟机执行字节码最终输出字符到终端屏幕。完整分步拆解步骤1Shell接收你输入的命令php test.php你在终端敲回车shellbash/zsh/cmd读取整行字符串。Shell拆分命令程序名php参数test.php在系统PATH环境变量目录中搜索找到php这个可执行二进制程序php-cli操作系统调用系统调用fork创建新进程exec加载php-cli程序启动PHP进程。步骤2PHP内核启动接收参数定位目标php文件PHP进程启动初始化内核、加载php.ini配置加载扩展mysqli、json等、设置内存上限、错误等级。读取传入参数test.php判断文件名是否存在、是否可读文件不存在直接抛出No such file or directory报错。打开文件通过操作系统read系统调用把test.php源码文本读取到内存。源码此时仍然是纯文本字符串?php ... ?。步骤3词法分析Lex 词法扫描Zend引擎的词法分析器扫描源码字符流。把连续文本切割成Token标记关键字if、echo、变量$a、数字、字符串、分号、括号。简单理解把文章切成一个个词语剔除空格、注释。遇到语法字符错误这一步就报词法错误。步骤4语法分析Yacc 语法解析拿到Token流按照PHP语法规则构建抽象语法树 AST。AST是树形结构代表代码逻辑哪一段是表达式、哪一段是分支、哪一段是函数调用。这一步会检查语法少写分号、括号不匹配在这里抛出语法解析错误。步骤5编译AST → Zend 字节码opcodeZend引擎遍历AST翻译成Opcode操作码。Opcode是Zend虚拟机能识别的指令类似Java的bytecode不是机器码不能直接交给CPU运行。开启opcache之后会把编译好的Opcode缓存下次执行直接跳过词法语法编译直接拿缓存字节码提升速度。本次第一次执行无缓存。步骤6Zend虚拟机执行OpcodeZend VM逐条解释执行Opcode开辟内存创建变量、数组、对象运算、函数调用遇到echo这类输出指令不会直接写屏幕先交给PHP内核输出缓冲区output buffer代码过程中执行IO操作读文件、数据库连接会发起对应的操作系统系统调用。步骤7输出缓冲区刷新操作系统输出到终端echo输出内容先写入PHP输出缓冲区。脚本执行结束自动刷新buffer。PHP调用操作系统write系统调用把文本数据写入标准输出stdout。操作系统内核把stdout的数据交给终端程序终端渲染字符在显示器屏幕展示文字结果。步骤8脚本执行完毕资源回收进程退出释放变量内存关闭打开的文件、数据库连接PHP做垃圾回收GC回收无引用对象PHP进程退出操作系统回收进程占用内存、文件描述符等资源。【区分补充】如果是浏览器访问 http://xxx/test.phpFPM模式和CLI不一样浏览器发起HTTP请求 → Nginx/Apache接收请求Web服务器识别后缀.php转发请求给PHP-FPMFPM子进程接收请求读取php源码同样走词法→语法→AST→Opcode→Zend VM执行echo输出内容组装成HTTP响应报文回传给Nginx再返回浏览器浏览器渲染页面。误区澄清误区1PHP源码直接翻译成CPU机器码执行。纠正PHP是Zend虚拟机解释Opcode不是直接编译成机器码。只有HHVM这类JIT模式才会把Opcode动态编译成机器码。误区2echo直接写屏幕。纠正echo写入PHP输出缓冲区脚本结束才一次性输出减少系统调用次数。一句话总结Shell找到php-cli程序创建进程PHP读取php源码经过词法切Token、语法生成AST编译成Zend字节码虚拟机执行指令输出内容写入缓冲区刷新后通过系统调用输出到终端执行结束释放资源进程退出。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

风储深度调峰优化调度:Matlab建模与求解实战 2026/9/26 13:40:19

风储深度调峰优化调度:Matlab建模与求解实战

做电力系统仿真的朋友,估计都遇到过这种需求:导师或者领导丢来一句话,“风储深度调峰模型,你用 Matlab 给我跑一下,最好能出图”。风储深度调峰模型,说白了就是把风电和储能当作调节资源,参与电…

阅读更多 →
AI自我迭代RSI技术解析:从数据生成到GPU训练闭环实践 2026/9/26 13:40:19

AI自我迭代RSI技术解析:从数据生成到GPU训练闭环实践

1. 从一条内部消息说起:AI自我迭代到底在说什么前几天圈子里炸了锅,一张据称是OpenAI内部流出的截图在各个技术群疯传,核心信息就一句话:AI已经开始参与训练下一代AI模型,而且效果比预期好得多。紧接着就是奥特曼在公开…

阅读更多 →
Codos虚拟首席AI官:访谈驱动自动化,从需求采集到任务编排 2026/9/26 13:40:19

Codos虚拟首席AI官:访谈驱动自动化,从需求采集到任务编排

1. 从“员工访谈”切入:Codos 到底想解决什么问题第一次看到“Codos:首个虚拟首席AI官,员工访谈驱动自动化”这个标题,我脑子里冒出来的第一个念头是:终于有人把“访谈”这件事从咨询公司的PPT里拽出来,塞进…

阅读更多 →
OpenAI内部曝光:AI自己造AI的递归自我改进与算力约束 2026/9/26 13:40:19

OpenAI内部曝光:AI自己造AI的递归自我改进与算力约束

1. 这条热搜到底在说什么 先把标题拆开看。"OpenAI内部曝光"——注意,是内部,不是官方发布,这类消息通常来自离职员工爆料、内部备忘录泄露或者监管文件里的只言片语。"AI开始自己造AI"——这句话是整个标题里信息密度最…

阅读更多 →
Claude Code模板化实战:构建可复用的AI编程助手规则体系 2026/9/26 13:40:19

Claude Code模板化实战:构建可复用的AI编程助手规则体系

1. 从“写规则”到“建模板”:Claude Code 模板化的真正意义聊一个我最近在 Claude Code 上花了不少时间折腾的方向:claude-code-templates。刚开始接触这个主题时,我以为模板就是把 CLAUDE.md 写长一点、写详细一点,让模型能“记…

阅读更多 →
Qwen-4 72B原生多模态大模型实战:情感分析、目标检测与视频理解全解析 2026/9/26 13:40:12

Qwen-4 72B原生多模态大模型实战:情感分析、目标检测与视频理解全解析

1. 多模态旗舰模型的核心能力拆解1.1 从标题看这次发布到底意味着什么Qwen-4 72B 这个型号一出来,我第一反应是去看它的参数规模和模态覆盖范围。72B 这个量级在开源社区里属于“旗舰级”,不是那种跑在单卡消费级显卡上的玩具模型,而是需要多…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉