最近想把媒体库换到别的磁盘上,因为默认系统盘容量太小了。
理应来说是很简单的操作,在主题的function.php中修改或添加有关'upload_dir'的代码块就可以了
add_filter('upload_dir', function(dirs) {dirs['basedir'] = '/data/www/uploads'; // 绝对路径
dirs['baseurl'] = 'https://yourdomain.com/uploads'; // 访问URL
returndirs;
});
但是wp总是报错,提示没有权限写入文件,即使把目标文件夹权限设定为最高的"777"还是不行。
找了很久才发现是php中还有一层"open_basedir"限制,这限制了web服务器只能访问已设定的特定文件夹。通常在php.ini,php-fpm.conf或者nginx配置文件中找到字段"open_basedir="修改后面的内容。
但是这些配置文件中默认是没有添加这些限制的,也就是web服务器默认可以访问这台服务器上所有有权限的内容。而且即使在php.ini中填写open_basedir内容,也不会生效,如果你有同样的问题,请往下看。
如果你和我一样使用了lnmp一键包安装了基础服务,,或者其他一键包,那么可能会在nginx/conf/fastcgi.conf出现fastcgi_param PHP_ADMIN_VALUE
这一行,推测PHP_ADMIN_VALUE常量会覆盖php.ini的配置。删除这一行,然后在nginx.conf中对应的server块的
include enable-php.conf;
下添加
fastcgi_param PHP_ADMIN_VALUE "open_basedir="
自定义open_basedir内容。
也可以在php.ini的末尾添加open_basedir=
来修改。
虽然删除了PHP_ADMIN_VALUE常量以确保open_basedir已经没有在任何地方被设置,这样放开了web服务器php的权限,但是既来之则安之,尽量收缩权限保证安全.
Comments | 1 条评论
该评论为私密评论