Answers:
尝试在wp-config.php中添加代码:
define('FS_METHOD', 'direct');
FS_METHOD
很短的FILESYSTEM_METHOD
。当您定义要direct
-ly修改文件-也就是不使用FTP时,您将迫使WordPress尝试直接更改网站上的文件。
如果您使用的是Ubuntu。
sudo chown -R www-data:www-data PATH_TO_YOUR_WORDPRESS_FOLDER
www-data
:看到这里codex.wordpress.org/Hardening_WordPress:或这里stackoverflow.com/questions/18352682/...
“无论何时使用WordPress控制面板自动安装,升级或删除插件,WordPress都必须对文件系统上的文件进行更改。
在进行任何更改之前,WordPress首先会检查其是否有权直接操纵文件系统。
如果WordPress没有直接修改文件系统所需的权限,则会要求您提供FTP凭据,以便WordPress可以尝试通过FTP进行所需的操作。”
解决方案:为了找出您的apache实例以什么用户身份运行,请创建一个包含以下内容的测试脚本:
<?php echo(exec("whoami")); ?>
对我来说,它是守护程序而不是www-data。然后,通过以下方式修改权限:
sudo chown -R daemon /path/to/your/local/www/folder
<?php echo(exec("id")); ?>
它甚至可以为您提供超出用户ID的组数据:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers)
whoami
因此请参见相同的信息:sudo chown -R `whoami` /path/to/your/local/www/folder
我以递归方式将wordpress文件夹的所有权更改为www-data,然后重新启动了Apache。
sudo chown -R www-data:www-data <folderpath>
它就像一个魅力!
WordPress无法直接访问文件时会要求您提供FTP凭据。这通常是由PHP以apache用户(mod_php或CGI)而不是拥有WordPress文件的用户身份运行引起的。
在大多数共享托管环境中,这是很正常的-文件以用户身份存储,而Apache以user apache
或身份运行httpd
。实际上,这是一个很好的安全预防措施,因此攻击和黑客无法修改托管文件。您可以通过将所有WP文件设置为777安全性来规避此问题,但这意味着没有安全性,因此我强烈建议您这样做。只需使用FTP,这是有充分理由的自动建议的解决方法。
我按照此处概述的步骤在Ubuntu 14.04上本地安装了WordPress,并简单地运行:
sudo chown -R www-data:www-data {path_to_your_project_directory}
通过下载插件解决了我的问题。我在此处留下此帖子的唯一原因是,当我用Google搜索问题时,这是最初的结果之一,它使我找到了解决问题的方法。
希望这对任何人都有帮助!
如果在插件安装期间,Wordpress要求您提供主机名或FTP详细信息。然后,请按照下列步骤操作:
登录到您的服务器,然后导航到/ var / www / html / wordpress /。打开wp-config.php并在define('DB_COLLATE')之后添加此行
define('FS_METHOD', 'direct');
如果出现“无法创建目录”错误。以递归方式向您的wordpress目录授予写权限
chmod -R go+w wordpress
注意。为了安全起见,将插件安装为
chmod -R go-w wordpress
解决此问题的最简单方法是将以下FTP信息添加到您的 wp-config.php
define('FS_METHOD', 'direct');
define('FTP_BASE', '/usr/home/username/public_html/my-site.example.com/wordpress/');
define('FTP_CONTENT_DIR', '/usr/home/username/public_html/my-site.example.com/wordpress/wp-content/');
define('FTP_PLUGIN_DIR ', '/usr/home/username/public_html/my-site.example.com/wordpress/wp-content/plugins/');
FTP_BASE是WordPress安装的“ base”(ABSPATH)文件夹的完整路径FTP_CONTENT_DIR是WordPress安装 的wp-content文件夹的完整路径。 FTP_PLUGIN_DIR是WordPress安装的plugins文件夹的完整路径。
正如Niels所提到的,发生这种情况是因为服务器进程用户无法写入Wordpress文件夹。
但是,很多文章都没有解释这一点。它是php进程的所有者,而不是nginx进程的所有者。如果您尝试更改Nginx所有者,则无法解决此问题。
要解决此问题,请尝试运行ps aux
以查看哪个用户拥有php-fpm进程。然后检查该用户是否与wordpress文件夹的所有者相同,或者至少可以对其进行写操作。如果用户无法写入,则需要更改文件夹的权限和/或所有权;或将两个用户(服务器所有者和wordpress文件夹所有者)放在可以写入该文件夹的公共组中;或将php.ini的“用户”属性更改为可以写入该文件夹的用户。
这个问题有很多类似的答案,但是没有一个能完全找到根本原因。塞巴斯蒂安·施密德(Sebastian Schmid)对原始帖子的评论完全触及了该帖子。这是我截至2018-11-06的看法:
根本原因
当您尝试通过WordPress管理界面上传插件时,WordPress会调用名为“ get_filesystem_method()”的函数(参考:/wp-admin/includes/file.php : 1549)。该例程将尝试将文件写入相关位置(在本例中为插件目录)。如果没有正确设置文件权限以允许WordPress用户(认为执行php的用户身份)将文件写入有问题的位置,它当然会立即失败。
如果可以创建文件,则此函数将检测临时文件的文件所有者以及该函数当前文件的文件所有者(参考:/wp-admin/includes/file.php:1572),然后将两者进行比较。如果它们匹配,那么用WordPress的话来说,“ WordPress与WordPress文件具有相同的所有者创建文件,这意味着可以安全地通过PHP修改和创建新文件”,并且您的插件已成功上传,而没有FTP凭据提示。如果不匹配,则会显示FTP凭据提示。
修正
确保正在运行php进程的身份是以下任一文件的所有者:
a)所有WordPress应用程序文件,或...
b)至少/wp-admin/includes/file.php文件
最后评论
我不太热衷于将文件所有权专门应用于file.php来解决此问题(至少可以说这有点奇怪!)。在我看来,WordPress代码库正倾向于让我们在与WordPress应用程序文件的文件所有者相同的用户主体下执行PHP流程。我欢迎社区对此发表一些评论。