VM Ubuntu本地服务器无法读取Windows共享创建的PHP文件返回空白页求助
解决Ubuntu VM无法读取Windows共享文件夹中PHP文件的问题
这种情况我之前帮同事排查过好几次,核心问题基本都绕不开权限、挂载配置或者文件格式这几个点,咱们一步步来定位解决:
1. 先排查文件与挂载权限
Windows共享挂载到Linux后,权限映射经常会出问题——web服务器(Apache/Nginx)的运行用户一般是www-data,如果共享文件夹里的PHP文件不属于这个用户,或者没有读取权限,就会返回空白页。
- 先临时测试权限:执行
chmod 644 /path/to/your/php/file.php,然后刷新网页。如果能正常显示here,那肯定是权限的锅。 - 接下来要修正挂载权限:如果是用Samba挂载的,挂载时要指定
uid=www-data,gid=www-data参数,让共享目录下的文件默认归www-data所有。比如完整挂载命令:
如果想开机自动挂载,把这个配置写到sudo mount -t cifs //你的Windows主机IP/共享名 /mnt/share -o username=Windows用户名,password=Windows密码,uid=www-data,gid=www-data,file_mode=0644,dir_mode=0755/etc/fstab里就行。
2. 检查AppArmor的访问限制
Ubuntu默认启用AppArmor,它会限制程序的访问范围,可能阻止了web服务器读取共享文件夹的内容。
- 先临时关闭AppArmor测试:
sudo systemctl stop apparmor,然后再访问PHP页面。如果能显示了,就说明是AppArmor的问题。 - 接下来要给web服务器添加允许访问共享目录的规则:编辑对应的AppArmor配置文件(比如Apache的是
/etc/apparmor.d/usr.sbin.apache2,Nginx的是/etc/apparmor.d/usr.sbin.nginx),在文件里添加一行:
然后重新加载规则:/mnt/share/** r,sudo systemctl reload apparmor。
3. 排查文件格式问题
Windows创建的文件用的是CRLF换行符,还可能带UTF-8 BOM头,虽然PHP大多能兼容,但偶尔也会导致解析异常返回空白。
- 用
file /path/to/your/file.php查看文件信息,如果显示with CRLF line terminators或者UTF-8 Unicode (with BOM),就需要调整格式:- 用vim打开文件,执行
:set nobomb去掉BOM头,再执行:set ff=unix把换行符改成Linux格式,最后:wq保存。
- 用vim打开文件,执行
4. 查看错误日志找精准线索
如果上面的方法都没解决,直接看错误日志是最有效的:
- Apache的错误日志路径:
/var/log/apache2/error.log - 如果用Nginx+PHP-FPM,看PHP-FPM的日志:
/var/log/phpX.X-fpm.log(把X.X换成你的PHP版本,比如php7.4-fpm.log) - 日志里会明确写清是权限拒绝、文件无法读取还是PHP解析错误,照着提示修就行。
内容的提问来源于stack exchange,提问作者sayou
相关产品推荐
相关产品推荐

