php在ubuntu上非开箱即用:仅装php包仅支持cli,需额外安装libapache2-mod-php8.3并启用模块,配置无冲突、权限正确后重启apache才能响应http请求。

php 在 Ubuntu 服务器上不是开箱即用的独立运行环境——它必须和 Web 服务器(如 apache2 或 php-fpm)配合才能处理 HTTP 请求。直接装 php 包只能跑命令行脚本,无法响应网页访问。
为什么 php -v 成功但 http://ip/info.php 404?
这是最常被忽略的前提错误:Ubuntu 官方源安装的 php 默认不自动绑定 Apache。你看到 php -v 输出,只说明 CLI 版本就绪;但 Apache 仍用纯静态方式服务 .php 文件,不调用 PHP 解释器。
- 必须显式安装
libapache2-mod-php8.3(版本号需与 PHP 主版本一致) - 安装后需启用模块:
sudo a2enmod php8.3(不是php) - Apache 配置中不能有冲突的
SetHandler或AddType覆盖规则 -
/var/www/html/info.php文件权限必须为www-data可读(chmod 644即可,无需 755)
php-fpm 和 libapache2-mod-php 到底选哪个?
对绝大多数中小项目,libapache2-mod-php8.3 更简单可靠;php-fpm 是为高并发或 Nginx 场景设计的,用在 Apache 上反而多一层代理开销,且容易因 socket 权限、超时配置出错。
- 用
libapache2-mod-php8.3:一步安装 +systemctl restart apache2即生效 - 用
php8.3-fpm:要额外配ProxyPassMatch或SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost",稍有拼写错误就 503 - 检查是否误启了两个 PHP 模块:
apache2ctl -M | grep php应只输出一行含php8.3的模块
验证 PHP 模块是否真被 Apache 加载?
别只信 php -m,那是 CLI 环境;要确认 Apache 进程实际加载了什么,得看运行时模块列表:
- 执行
sudo apache2ctl -M | grep php,输出应类似:php8.3_module (shared) - 若为空,说明模块没启用或安装错版本(比如装了
php8.3却忘了装libapache2-mod-php8.3) - 若提示
Invalid command 'php_value',是.htaccess里写了 Apache 不识别的指令(新版默认禁用AllowOverride All),临时改/etc/apache2/apache2.conf中对应<directory></directory>块里的AllowOverride为All再试
php8.3 和 libapache2-mod-php8.2 混用)、模块未启用、或 Apache 配置残留旧规则。每次改完记得 sudo systemctl restart apache2,而不是 reload。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











