在使用WordPress的过程中会遇到“安装失败:无法创建WordPress目录”,这是一个比较普遍的WordPress错误,但不用担心,阅读完本文,你就可以自行解决。
1.错误出现的场景与原因
有3个常见的出现 "安装失败。无法创建目录"错误的场景。分别为:
- 使用WordPress仪表板安装插件或主题
- 更新或改变某个插件或主题的设置
- 将文件上传到服务器的wp-content目录
该问题多数情况下主要是由不正确的网站配置和设置引起的,导致了文件权限问题。如果权限不足,WordPress就无法为插件或主题创建目录。少数情况下,也会因为磁盘配额限制引发"安装失败。无法创建目录"错误。
2.错误与不推荐的做法
搜索修复该问题的方法,会得到很多“答案”。要么已过时且脱离实际,要么作者压根就没实际部署过。既然是权限引起的问题,那修复权限就好,4个错误及不推荐的做法。
从iptables、VPS安全组/列表查看是否存在端口受限等问题,属于弱智“答案”,能访问、可登录是安装、配置、更新插件或文件的前提,端口没放行的话,何来访问,无脑凑数的“答案”本文不做置评。
当Wordpress没有权限创建文件(包括目录,linux下一切皆文件)时,因为web服务和ftp服务是两码事,wordpress会按照配置文件的设置会尝试FTP方式登录后创建。就是下面的对话框。但是,小伙伴们根本就没有创建过FTP/SFTP服务,在安装部署wordpress时也没有任何有关FTP服务的交互。因此,推荐配置FTP/SFTP服务并修改配置文件的方法是不被推荐的做法,Web走不通、新开FTP,等同于搁置老问题、增加新服务。
这是一种极不推荐的做法,尽管可以在插件安装完成后再行将网站主目录或指定目录权限修改回默认的755或644。
chmod -R 777 /path/to/your/directory
极不推荐的不仅因为安全方面的原因,还在于不见得能解决问题。上述命令无非是赋予属主、属主组、其他用户对目标目录的读、写与执行权限,“-R”参数指定对目录下的所有文件与子目录进行相同的权限变更。但是,系统如果明确进程用户不能对某一目录/文件进行写操作,我们可以理解为这条针对php进程用户的“规则”优先级更高,和所有的系统访问控制规则一样,重叠的deny和allow规则,一般是匹配deny策略,尤其是当该进程(譬如php运行在容器中,容器由docker调起)独立、隔离运行的情况下,否则隔离运行就失去了意义。
无脑指示“chmod -R 777”的,务必绝交。在服务器遇到权限问题确需修改目录权限的情况下,请将文件的所有权更改为运行应用程序的用户,并将文件的权限设置为644,将目录的权限设置为755,而不是递归地将权限设置为777。假设您的服务器上有一个PHP应用程序以用户“www”身份运行、目标目录为/var/www,要设置正确的权限,可执行以下操作:
chown -R www: /var/www find /var/www -type d -exec chmod 755 {} \; find /var/www -type f -exec chmod 644 {} \;
Wordpress用户的运行环境多为LNMP或LAMP,有可能Nginx/Apache进程用户与PHP进程用户相同,也有可能不同,这一切取决于你通过什么方式、使用哪种工具搭建的运行环境,比如宝塔/Aapanel搭建的环境,都是Nginx和PHP进程的用户都是www,不是www-data,也不是nginx或php。
作为对比,1panel应用商店创建的镜像加载后,nginx和php容器进程用户则分别为root和1000。对,你没有看错,php容器进程用户就是个叫1000的家伙。为什么会这样?老E建议去问下开发者咋想的。
我们知道,Wordpress是基于php、而不是基于Nginx/Apache的框架,Nginx/Apache可以随意选择搭配,但你不能把php替换为node.js,wordpress中执行文件增删查改的实际就是php程序,去看Nginx/Apache进程用户有什么意义吗?!
3.正确修复权限问题
很快就2024了,Wordpress中出现的权限问题如果需要上述方式才能得以修复,一定不会如此流行。Wordpress之所以流行当然有很多原因、优点,但问题修复也会是用户选择的因素。要修复权限问题,仅3个步骤即可:
第一步,使用如下命令确定php进程用户。假定使用1panel在应用商店安装、创建的php运行环境,默认就是1000。
ps aux | grep php
第二步,使用如下命令改变属主并确保属主对目标目录具有读、写权限。注意将尖括号包裹的内容替换为php进程用户和实际目标目录,一般情况下,wordpress的目标安装、运行目录为网站目录之下的index或wordpress目录。
chown -R <1000:1000> </path/to/your/directory>
最后,在wordpress配置文件(wp-config.php)最后添加一行并保存。
define('FS_METHOD', 'direct');
如果使用了面板,上述步骤都可以在面板中完成,无论宝塔/aapanel还是1panel。
参照以上教程,你应该可以自行解决遇到的因无法创建目录导致的插件安装失败问题了。最后需要说明的是,因权限设置导致插件安装失败,不应理解为Wordpress的问题,应该归咎于安装方法、部署工具的问题,因为整个LNMP/LAMP的各组件和Wordpress本身都已经很成熟了。
文章评论