PHP 命令速查表 - PHP 常用命令与 Composer 管理大全

这套速查给写 PHP 应用、尤其是基于 Composer 的框架(Laravel、Slim 等)或负责其部署的开发者。它覆盖从 CLI 跑脚本、用内置服务器本地起站点,到 Composer 装依赖、重生成 autoload、核某扩展有没有加载,以及用 php -l 在提交前拦下语法错误。与一条条罗列 php 命令不同,这里按"本地搭起来→装依赖→排查扩展→上线前检查"的流程组织。读完应能独立跑起一个 Composer 项目、同步 autoload,并把它过一遍 lint。

编程语言·共 36 条命令·最后更新 2026-07-21
phpcomposercli

CLI 运行 8

php script.php
直接执行指定脚本,是 PHP CLI 跑批处理、定时任务或脚本验证的入口
php -a
进入交互式 shell,可边输入边求值,适合快速试表达式
php -S localhost:8000
启动内置开发服务器,无需 Nginx/Apache 即可本地访问站点
php -S localhost:8000 -t public/
指定文档根目录为 public/,配合入口文件做前端控制器
php -l script.php
php -l 只做语法检查不执行,成功输出 No syntax errors,适合在 CI 或提交前快速拦错误
php -r "echo phpinfo();"
以单行代码模式执行,不用建文件即可临时测试某个函数或输出
php -i
等同在代码里调 phpinfo(),输出 PHP 版本、配置与扩展的完整诊断信息
php -m
列出当前已加载的扩展模块,确认某扩展是否编译加载进了 CLI

Composer 依赖管理 10

composer init
引导式初始化 composer.json,填名称、作者与依赖后生成项目描述与 autoload 配置
composer install
按 composer.lock 精确安装依赖,团队环境保持一致、可复现,部署时优先用它
composer update
根据 composer.json 约束解析最新版本并同步刷新 lock 文件,别在生产随意跑
composer require vendor/package
安装新依赖并写入 composer.json 的 require,再自动生成 autoload
composer remove vendor/package
卸载依赖并同时从 composer.json 移除对应 require 声明
composer dump-autoload
不重装依赖,只按当前 composer.json 重新生成 PSR-4/类映射的 autoload 文件,新增类后通常需要它
composer dump-autoload -o
以优化模式生成类映射,加载更快,作为生产环境部署的收尾步骤
composer show
列出已安装的包及其版本,定位项目到底用了哪套依赖
composer outdated
对比远端点出版本偏旧、可升级的依赖,做版本治理参考
composer self-update
把 Composer 自身升级到最新版,再处理新版本警告

扩展与配置 6

php --ini
查看加载的 ini 文件路径
php -d memory_limit=256M script.php
临时设置内存限制
php -d display_errors=1 script.php
开启错误显示
pecl install extension
安装 PECL 扩展
pecl uninstall extension
卸载扩展
php -r "echo PHP_VERSION;"
查看 PHP 版本

Laravel 常用命令 8

php artisan serve
启动 Laravel 开发服务器
php artisan migrate
执行数据库迁移
php artisan migrate:fresh
回滚所有迁移并重新执行
php artisan make:model Post -mcr
创建模型+迁移+控制器
php artisan route:list
列出所有路由
php artisan config:cache
缓存配置(生产用)
php artisan queue:work
启动队列 worker
php artisan tinker
进入交互式 REPL

性能分析 4

php -d xdebug.mode=profile script.php
Xdebug 性能分析
php -d opcache.enable_cli=1 script.php
CLI 启用 OPcache
strace -p <pid>
跟踪 PHP 进程系统调用
php -r "echo memory_get_peak_usage();"
查看峰值内存

命令示例

用 php -l 在提交前拦下语法错误

php -l script.php

它不执行代码,所以静态方法和配置读取里的问题查不出来,只能拦语法层面的错误。CI 里可以对目录批量跑,先本地过了再提交能省一轮流水线时间。

输出

No syntax errors detected in script.php

确认扩展是否真的被加载

php -m php --ini

扩展不在 php -m 里时,先看 Scan 目录下的 ini 是否写了启用语句——装了但未启用是最常见的「装不上」现象。Web 与 CLI 用的 ini 不同,本地 php -m 通过不代表线上 PHP-FPM 也有。

输出

[PHP Modules]
ctype
curl
dom
json
mbstring
openssl
pdo_mysql
tokenizer

Configuration File (php.ini) Path: /etc/php/8.3/cli
Loaded Configuration File: /etc/php/8.3/cli/php.ini
Scan for additional .ini files in: /etc/php/8.3/cli/conf.d

部署收尾:优化模式重建 autoload

composer install composer dump-autoload -o composer show

install 保证版本与 lock 一致,-o 生成确定的类映射减少运行时查找。composer show 列出的实际版本可以和 composer.json 的约束对照,确认线上装的确实是预期那套。

输出

Loading composer repositories and package information
Installing dependencies from lock file (including require-dev)
Generating optimized autoload files
  1 package you are using is looking for funding.

monolog/monolog            3.6.0     Structured logging
symfony/console         6.4.7     Symfony Console Component

Laravel:先看清路由与积压,再决定是否迁移

php artisan route:list php artisan migrate

route:list 能确认路由确实注册上了,404 时先看这里而不是怀疑控制器。migrate 的输出只有 Migrated 才算成功;生产上不要用 migrate:fresh,它会回滚全部迁移。

输出

GET    / ............................................ posts › index
POST   /posts ....................................... posts › store
GET    /posts/{post} ............................... posts › show

  Migrating: 2026_09_12_000000_create_posts_table
  Migrated:  2026_09_12_000000_create_posts_table

常见坑与注意事项

  • php -S 是单进程开发服务器,并发请求会排队甚至超时,只能用于本地;线上必须走 Nginx + PHP-FPM。
  • composer update 会改写 composer.lock 并连带升级无关依赖,部署脚本或 CI 里用 install 而非 update,否则线上版本会随时间漂移。
  • php -d 设置的参数只对本次进程生效(如 memory_limit),不会写进任何配置文件,别指望调试时的临时放宽被保留下来。
  • php -i 会输出完整配置路径与扩展信息,属于诊断输出,不要留在用户可见的响应或日志里。
  • php artisan queue:work 以前台方式运行,长时间无人值守要交给进程管理器托管,否则终端一关队列就停了。

提示

  • 生产环境务必执行 composer dump-autoload -o 优化性能。
  • php -S 仅用于开发,生产请用 Nginx + PHP-FPM。
  • Laravel 生产环境要缓存配置、路由和视图:config:cache、route:cache、view:cache。

常见问题

composer install 和 composer update 什么时候用哪个?

看你要不要改依赖版本。composer install 严格按 composer.lock 里锁定的版本装,团队每个人和每次部署拿到的都是同一套依赖,这是可复现的前提;composer update 会忽略 lock、按 composer.json 的约束去解析当前能拿到的较新版本并刷新 lock 文件。只改了业务代码就用 install,只有主动升级依赖时才用 update,否则一次无关的 update 会把无关包也带上去。

为什么新增一个类之后页面报 class not found?

因为 autoload 的类映射没重新生成。Composer 的 PSR-4 映射在 vendor 目录里以缓存文件形式存在,新增类时旧的映射里没有这条记录,于是自动加载找不到它。跑一次 composer dump-autoload 重建映射即可,不用重装依赖。生产部署时用 composer dump-autoload -o 走优化模式,把 PSR-4 规则扫描成一份确定的类映射表,减少运行时的文件查找。

php -l 只能检查语法,那它还有什么用?

它快,而且足够挡住一大类线上事故。php -l 只解析不执行,成功时输出 No syntax errors,因此可以在 CI 里对整个目录做扫描,几十毫秒就能覆盖所有文件,不必启动应用。而需要真跑一遍才能暴露的问题——扩展没加载、配置读错、依赖缺失——由 php -m 和 php -i 分别确认。合理的分工是:语法用 -l,扩展与配置用 -m/-i,运行时行为才实际执行脚本。

php -m 里没有需要的扩展,怎么确认它到底装没装?

php -m 列出的是当前这个 CLI 二进制实际加载的扩展,先用它确认「没加载」而不是「没安装」——扩展文件存在但未启用的情况很常见。php -m 没有就再看 php -i 的输出,其中包含 extension_dir 指向的目录路径和已加载 ini 列表,用 php --ini 能直接看到 ini 的搜索路径和优先级。确认目录里没有对应扩展文件时才需要 pecl install 装上;装了仍不出现,就说明它没被写进 ini,需要启用后再验证。

php -S 内置服务器能拿来部署线上吗?

不能。php -S 是单进程的开发服务器,设计目的是让你不装 Nginx/Apache 就能本地起站点看效果,它一次只处理一个请求、没有并发处理能力,也没有超时与访问控制。要指定文档根目录时用 php -S localhost:8000 -t public/,把入口文件放在 public/ 下配合前端控制器,这样和生产的目录布局保持一致;上线仍应交给 Nginx + PHP-FPM 这类真正能并发处理请求的服务。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们