升级PHP至7.2.3后,Laravel5.6使用PHP内置Web服务器无法加载静态资源
我之前在Windows环境下升级PHP后也碰到过一模一样的静态资源加载问题,结合Laravel 5.6的特性和PHP 7.2在Windows下的表现,给你几个实用的排查和解决方向:
检查静态资源的路径与权限
先确认public目录下的css、js文件确实存在,且文件路径和你模板中引用的完全一致(注意Windows系统本身不区分大小写,但PHP内置服务器偶尔会对路径大小写敏感,比如模板里写的/css/style.css,实际文件是/css/Style.css就可能加载失败)。另外,右键检查文件属性的“安全”选项卡,确保当前用户有读取这些文件的权限。排查PHP配置的路径限制
打开PHP的php.ini配置文件,查找open_basedir项。如果这个配置被设置了特定路径,而你的Laravel项目根目录(包含public子目录)不在允许范围内,就会导致静态资源无法被读取。你可以直接注释掉这个配置(在前面加;),或者把项目路径添加到允许列表中,保存后重启PHP内置服务器再测试。清除Laravel的缓存文件
版本升级后,旧的缓存配置可能会干扰资源加载。执行以下命令清除各类缓存:php artisan cache:clear php artisan config:clear php artisan view:clear清除完成后,重新启动
php artisan serve或者php -S命令,再尝试访问静态资源。使用Laravel的资源URL生成辅助函数
确保你在Blade模板中是用asset()辅助函数来生成静态资源的URL,比如:<link rel="stylesheet" href="{{ asset('css/app.css') }}"> <script src="{{ asset('js/app.js') }}"></script>手动写死的相对路径可能会因为路由前缀、服务器根目录设置等问题出错,
asset()会自动根据当前请求的根URL生成正确的资源路径,避免路径错误。更换端口或重置内置服务器
有时候PHP内置服务器的进程残留或者端口冲突会导致静态文件处理异常。你可以尝试更换端口启动:php artisan serve --port=8080 # 或者 php -S localhost:8080 -t public另外,你可以暂时重命名
public目录下的.htaccess文件(比如改成.htaccess.bak),因为虽然PHP内置服务器不依赖Apache的.htaccess规则,但Laravel默认的.htaccess如果有错误,也可能间接影响资源加载。如果重命名后静态资源能访问,再排查.htaccess里的规则问题。
内容的提问来源于stack exchange,提问作者caldicot

