迁移服务器后 PHP上传文件失败

公司的原来的服务器到期了,然后换到了新的服务器上,程序运行发现上传文件失败。初步判断不是代码的问题,因为代码是复制过来的

迁移服务器后 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是软连接

迁移服务器后 PHP上传文件失败

链接到了项目外面   如果实在public下面 创建文件夹 是可以的

 

链接到外面就不行了

 

然后  命令行  执行是可以的   浏览器访问这个方法 就不行

迁移服务器后 PHP上传文件失败

 

 

然后  就是判断  看看执行用户的差别

 

命令行是root执行的    浏览器访问  是www执行的

 

然后查看项目路径   

 

最后  百度到了   open_basedir php授权目录设置

 

迁移服务器后 PHP上传文件失败

迁移服务器后 PHP上传文件失败

然后 我到我的php.ini里面 查看   发现我这里是没有启用的

迁移服务器后 PHP上传文件失败

 

然后在交流群里面  咨询

 

孙思佳:

@暖冬 我这个是因为  执行文件的用户  不一致 导致的 吧   

 

暖冬:

现在不确定了。可以先把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里面设置的

 

迁移服务器后 PHP上传文件失败

我把我的软连接的目录  加上这个授权的目录 里面了  就可以了