迁移服务器后 PHP上传文件失败
公司的原来的服务器到期了,然后换到了新的服务器上,程序运行发现上传文件失败。初步判断不是代码的问题,因为代码是复制过来的
然后 我自己 查找这个地方的上传图片的路径
自己写测试代码 测试是否可以在这个文件夹下面 创建文件夹
$dir = iconv("UTF-8", "GBK", "Public/testFiles/sunsijia189");
if (!file_exists($dir)){
try {
$res = mkdir ($dir,0777,true);
} catch(ErrorException $ex) {
echo "Error: " . $ex->getMessage();
}
dump($res);
echo '创建文件夹成功';
} else {
echo '需创建的文件夹已经存在';
}
这个testFiles是软连接
链接到了项目外面 如果实在public下面 创建文件夹 是可以的
链接到外面就不行了
然后 命令行 执行是可以的 浏览器访问这个方法 就不行
然后 就是判断 看看执行用户的差别
命令行是root执行的 浏览器访问 是www执行的
然后查看项目路径
最后 百度到了 open_basedir php授权目录设置
然后 我到我的php.ini里面 查看 发现我这里是没有启用的
然后在交流群里面 咨询
孙思佳:
@暖冬 我这个是因为 执行文件的用户 不一致 导致的 吧
暖冬:
现在不确定了。可以先把public改成777,看看能否创建
深圳-PHP-蓝风:
我个人觉得这个就是两方面的问题,首先是用户权限问题,其次是fpm模式下可操作目录范围的问题
深圳-PHP-蓝风:
你用fpm模式做项目的时候,只需要始终牢记,php进程的用户权限就是/path/to/php/etc/php-fpm.d/www.conf中user和group这两个配置项规定的就可以了
深圳-PHP-蓝风:
至于命令行操作,在没有主动切换用户的情况,用户权限就是当前执行命令的用户所有的权限
孙思佳:
其次是fpm模式下可操作目录范围的问题 我觉得是这个问题
孙思佳:
我现在是在public 项目下面 创建文件夹 就可以
孙思佳:
但是现在是 软链接到了 项目外
孙思佳:
就创建不了了
暖冬:
open_basedir 检查一下有没有设置这个
暖冬:
var_dump(ini_get('open_basedir'))
孙思佳:
[图片]
暖冬:
你设置了这个,所以写不了
孙思佳:
我看这个了呀 我的php.ini 里面没有设置呀
孙思佳:
我感觉也是这个的问题了、
暖冬:
脚本里面设置了吧
孙思佳:
我擦 这个是在哪里设置的呀 我找找
暖冬:
或者是 php-fpm.d/www.conf php_admin_value[open]
暖冬:
你先 ini_set 为空测试一下
深圳-PHP-蓝风:
这个配置一般是在nginx上设置的
孙思佳:
我去找找
暖冬:
All symbolic links are resolved, so it's not possible to avoid this restriction with a symlink.
暖冬:
符号连接会被处理为真实路径,不再 open 范围内就完蛋
暖冬:
我都不设置这个的
孙思佳:
[图片]
孙思佳:
这个吧
孙思佳:
我给屏蔽了 还不行呢
暖冬:
重启了?
深圳-PHP-蓝风:
额,屏蔽了做毛线啊?
孙思佳:
额 不是屏蔽吗
深圳-PHP-蓝风:
不能屏蔽,屏蔽就会用默认值,你应该是把你要操作的那个目录加进去
孙思佳:
哦
然后发现 这个是在nginx里面设置的
我把我的软连接的目录 加上这个授权的目录 里面了 就可以了