WordPress询问我的FTP凭据以安装插件

WordPress询问我的FTP凭据以安装插件,wordpress,ftp,Wordpress,Ftp,我在本地系统中安装了WordPress博客。但当我尝试从管理员添加插件时,它要求FTP访问。要使WordPress能够在没有FTP的情况下上载,我需要配置什么 WordPress在无法访问文件时要求您提供FTP凭据 直接的。这通常是由作为apache用户运行的PHP引起的 (mod_php或CGI)而不是拥有WordPress文件的用户 这在大多数共享托管环境中是很正常的-文件以用户身份存储,Apache以用户身份运行Apache或httpd。这实际上是一个很好的安全预防措施,因此漏洞攻击和黑客

我在本地系统中安装了WordPress博客。但当我尝试从管理员添加插件时,它要求FTP访问。要使WordPress能够在没有FTP的情况下上载,我需要配置什么

WordPress在无法访问文件时要求您提供FTP凭据 直接的。这通常是由作为apache用户运行的PHP引起的 (mod_php或CGI)而不是拥有WordPress文件的用户


这在大多数共享托管环境中是很正常的-文件以用户身份存储,Apache以用户身份运行
Apache
httpd
。这实际上是一个很好的安全预防措施,因此漏洞攻击和黑客无法修改托管文件。您可以通过将所有WP文件设置为777安全性来规避此问题,但这意味着安全性,因此我强烈建议不要这样做。只需使用FTP,这是自动建议的解决方法,有充分的理由。

尝试在wp-config.php中添加代码:

define('FS_METHOD', 'direct');

在OSX上,我使用了以下方法,并且效果良好:

sudo chown -R _www:_www {path to wordpress folder}
_www是PHP在Mac上运行的用户


(您可能还需要chmod一些文件夹。我先这么做了,但它没有修复。直到我执行chown命令,它才起作用,所以我不确定它是单独的chown命令,还是chmod和chown的组合。)

如Niels所述,这是因为服务器进程用户无法写入Wordpress文件夹

但有一件事很多文章都没有解释。它是php进程的所有者,而不是nginx进程。如果您试图更改nginx所有者,则无法解决此问题


要解决此问题,请尝试运行
ps aux
,查看哪个用户拥有php fpm进程。然后检查用户是否与wordpress文件夹的所有者是同一用户,或者至少可以对其进行写入。如果用户无法写入,则需要更改文件夹的权限和/或所有权;或者将两个用户(服务器所有者和wordpress文件夹所有者)放在一个可以写入文件夹的公共组中;或者将php.ini“user”属性更改为可以写入文件夹的用户。

如果您使用的是Ubuntu

sudo chown -R www-data:www-data PATH_TO_YOUR_WORDPRESS_FOLDER
每当您使用WordPress控制面板自动安装、升级或删除插件时,WordPress必须更改文件系统上的文件

在进行任何更改之前,WordPress首先检查是否有权直接操作文件系统

如果WordPress没有直接修改文件系统所需的权限,系统将要求您提供FTP凭据,以便WordPress可以尝试通过FTP执行所需的操作。”

解决方案: 为了找出您的apache实例运行的用户身份,请创建一个包含以下内容的测试脚本:

<?php echo(exec("whoami")); ?>

首先移动到安装文件夹(例如)

现在我们要修改您的htdocs目录:

sudo chown -R daemon htdocs
出现提示时输入root密码,然后通过chmod调用完成:

sudo chmod -R g+w htdocs

我递归地将wordpress文件夹的所有权更改为www数据,并重新启动了apache

sudo chown -R www-data:www-data <folderpath>
sudo chown-R www数据:www数据

它就像一个符咒

解决此问题的最简单方法是将以下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\u CONTENT\u DIR是WordPress安装的wp CONTENT文件夹的完整路径。
FTP\u PLUGIN\u DIR是WordPress安装的plugins文件夹的完整路径。

我们遇到了与更大问题相同的问题。建议的解决方案

define('FS_METHOD', 'direct');

隐藏该窗口,但我们在加载主题和升级等方面仍然存在问题。这与权限有关,但在我们的案例中,我们通过从php操作系统供应商mod_php移动到更安全的php操作系统供应商FastCGI应用程序来解决问题。我在Ubuntu 14.04上本地安装了WordPress遵循概述的步骤并简单运行:

sudo chown -R www-data:www-data {path_to_your_project_directory}
通过下载插件解决了我的问题。我离开这里的唯一原因是因为当我在谷歌上搜索我的问题时,这是第一个结果之一,它引导我找到了问题的解决方案


希望这个对任何人都有帮助

对这个问题有很多类似的回答,但没有一个完全触及根本原因。对原始帖子的评论涉及到了这一点,但并不是全部。以下是我自2018年11月6日起的看法:

根本原因

当您尝试通过WordPress管理界面上传插件时,WordPress将调用一个名为“get_filesystem_method()”(ref:)的函数。此例程将尝试将文件写入相关位置(在本例中为插件目录)。当然,如果文件权限设置不正确,无法允许WordPress用户(想想执行php的用户标识)将文件写入所讨论的位置,那么它可能会立即失败

如果可以创建该文件,则该函数将检测临时文件的文件所有者以及该函数当前文件(ref:)的文件所有者,并将两者进行比较。如果它们匹配,用WordPress的话说,“WordPress正在创建与WordPress文件拥有者相同的文件,这意味着通过PHP修改和创建新文件是安全的”,并且您的插件在没有FTP凭据提示的情况下成功上载。如果它们不匹配,则会出现FTP凭据提示

修复

  • 确保插件目录可由运行php进程的标识写入
  • 确保运行php进程的标识是以下任一项的文件所有者:

    a) 所有WordPress应用程序文件,或
    b) 至少是/wp admin/includes/file.php文件

  • 最终评论

    我不太热衷于将文件所有权具体应用到file.php来工作
    define('FS_METHOD', 'direct');
    
    sudo chown -R www-data:www-data {path_to_your_project_directory}
    
    define('FS_METHOD', 'direct');
    
    define('FS_METHOD', 'direct');
    
    chmod -R go+w wordpress
    
    chmod -R go-w wordpress