PHP项目运行核心是环境、路径、配置三要素:需匹配框架要求的PHP版本及扩展,Nginx root必须指向public目录并正确配置PHP处理,storage等目录须赋予Web服务器读写权限,且部署时应在服务器执行composer install并验证.env与权限。

PHP项目能跑起来,核心就三件事:环境装对、代码放对位置、Web服务器认得清入口。其他都是围绕这三点打补丁。
确认PHP版本和扩展是否匹配框架要求
很多500错误或白屏根本不是代码问题,而是PHP版本太低或关键扩展没开。Laravel 10要PHP 8.1+,ThinkPHP 8要PHP 8.0+,用php -v看版本,用php -m查已启用模块。
- 常见必装扩展:
pdo、pdo_mysql、mbstring、curl、openssl、xml、zip - Ubuntu下装PHP 8.1扩展示例:
sudo apt install php8.1-mysql php8.1-mbstring php8.1-xml php8.1-zip - 装完别忘了重启PHP-FPM(如
sudo systemctl restart php8.1-fpm)或Apache(sudo systemctl restart apache2),否则扩展不生效
Nginx配置必须指向public目录而非项目根目录
现代PHP框架(Laravel、ThinkPHP、Symfony等)把index.php统一放在public/下,这是安全设计。如果Nginx的root还设在/var/www/myapp,就会暴露.env、vendor/等敏感路径,甚至直接报403或404。
- 正确写法(Nginx站点配置中):
root /var/www/myapp/public; - 必须包含PHP处理块:
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; } - 改完务必执行
sudo nginx -t验证语法,再sudo systemctl reload nginx,跳过这两步等于白配
权限和用户归属不调对,storage和cache目录会写失败
Web服务器进程(如www-data或nginx用户)必须对storage/、bootstrap/cache/(Laravel)或runtime/(ThinkPHP)有读写权,否则日志写不进、缓存生成不了、页面直接500。
立即学习“PHP免费学习笔记(深入)”;
- Linux下典型命令:
sudo chown -R www-data:www-data /var/www/myapp/storage /var/www/myapp/bootstrap/cache - 目录权限设为
755,文件设为644;但storage这类可写目录,有时需775(尤其当部署用户和Web用户不同组时) - SELinux开启的系统(如CentOS/RHEL)还要额外运行:
sudo setsebool -P httpd_can_network_connect 1,否则cURL、数据库连接也会被拦
composer install不能在本地做,必须在服务器上运行
本地开发时vendor/可能没提交,或者用了--dev依赖,但生产环境不需要。直接把本地vendor/打包传上去,容易因架构(x86 vs ARM)、扩展版本、路径硬编码出问题。
- 上传后进入项目根目录,运行:
composer install --no-dev --optimize-autoloader - 确保
composer已全局安装(which composer能查到),没装就先curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer - 如果提示“failed to open stream: Permission denied”在
vendor/autoload.php,大概率是上一步权限没设好,不是Composer本身的问题
最常被跳过的其实是.env文件里的APP_KEY——Laravel部署后首次访问不生成,就会卡在500;ThinkPHP的runtime/目录若为空且不可写,连错误日志都吐不出来。这些点不手动验证,光靠“配置完了”三个字,上线就是赌运气。



















