ubuntu 24.04 运行 php 脚本有两条核心路径:命令行直接执行(如 php script.php 或 php -s localhost:8000 用于调试),或通过 web 服务器(apache/nginx)访问;前者依赖 php-cli 和 update-alternatives 管理多版本,后者需 apache 模块或 nginx+php-fpm 配合,且权限、用户一致性和日志排查至关重要。

Ubuntu 24.04 上运行 PHP 脚本,核心就两条路:命令行直接执行(适合调试/脚本任务),或通过 Web 服务器访问(适合网站开发)。选哪条,取决于你当前要做什么——不是“能不能”,而是“该不该用 Web 服务”。
php 命令能直接跑脚本,但得确认它装的是哪个版本
Ubuntu 24.04 默认不自带 php 命令,装完后也未必是你要的版本。运行 php -v 看输出,如果报错或版本不对,说明没装、装错、或多版本共存但未设默认。
- 最简安装(官方源,通常是 PHP 8.3):
sudo apt install php-cli - 想用 PHP 8.2 或 7.4?先加 Ondřej Surý 的 PPA:
sudo add-apt-repository ppa:ondrej/php && sudo apt update,再装php8.2或php7.4 - 装完多个版本后,用
sudo update-alternatives --config php切换默认php命令指向哪个二进制文件 -
php script.php执行时,实际调用的是php命令绑定的版本,和php8.2 script.php是两回事
用 php -S 启个临时服务器,比配 Apache/Nginx 快得多
开发调试时,不需要搭完整 Web 服务。PHP 内置的 CLI 服务器足够用,尤其适合单文件测试或静态路由场景。
- 在脚本所在目录运行:
php -S localhost:8000,它会监听localhost:8000,但默认只服务当前目录下的.php文件 - 如果脚本不在根目录,或需要路由控制,加路由器文件:
php -S localhost:8000 router.php,其中router.php返回true表示交由 PHP 处理,false则返回 404 - 注意:
php -S不解析.htaccess,不支持重写规则,也不处理并发请求——纯开发用途,别上生产 - 浏览器访问
http://localhost:8000/script.php即可,不用改文件位置、不用改权限
Apache 和 Nginx 的 PHP 支持机制完全不同
Apache 安装 libapache2-mod-php 后,模块自动挂载,.php 文件被当作 CGI 脚本直接执行;Nginx 没这功能,必须靠 php-fpm 进程配合 FastCGI 转发——配置稍多,但更可控。
- Apache 方式:装完
sudo apt install apache2 libapache2-mod-php,把文件扔进/var/www/html/,systemctl restart apache2就行 - Nginx 方式:装
sudo apt install nginx php-fpm,然后编辑/etc/nginx/sites-available/default,确保有类似这样的块:location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php-fpm.sock; },再sudo nginx -t && sudo systemctl reload nginx - 关键区别:Apache 下
phpinfo()能直接看到Server API是Apache 2.0 Handler;Nginx 下必须是FPM/FastCGI,否则就是配置漏了 - 权限问题常卡在这里:Nginx 默认以
www-data用户运行,php-fpm默认也用www-data,但如果你改过用户,两个服务用户不一致会导致 502 Bad Gateway
文件权限和路径写错,浏览器里只会显示空白或下载源码
这不是 PHP 报错,是 Web 服务器根本没把请求交给 PHP 解析器。现象是页面空白、弹出下载对话框、或直接显示 <?php echo 'hi'; ?> 原文。
- 检查文件是否真在 Web 根目录下:
ls -l /var/www/html/test.php,路径错一个字母都不行 - 确认文件可读:
sudo chmod 644 /var/www/html/test.php(别用 777) - 确认 Web 服务器用户能读到文件:
sudo chown www-data:www-data /var/www/html/test.php(Apache/Nginx 都默认用这个用户) - 如果是 Nginx + php-fpm,再查
php-fpm是否在运行:systemctl status php-fpm,状态不是active (running)就起不来 - 最后看错误日志:
sudo tail -f /var/log/apache2/error.log或sudo journalctl -u nginx -f,比猜快得多
真正容易被忽略的点:Ubuntu 24.04 默认启用 systemd socket 激活机制,php-fpm 服务可能处于 “inactive (dead)” 状态,但它会在第一个 PHP 请求到达时自动拉起——所以刚配完 Nginx,systemctl status php-fpm 显示 dead 不代表坏了,只要访问一次 .php 文件,它就会活过来。但如果你没触发过请求,日志里也不会有线索。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











