Wordpress要求我的FTP凭据来安装插件

sas*_*nth 104 ftp wordpress

我在本地系统中安装了一个Wordpress博客.但是当我尝试从管理员添加插件时,它要求FTP访问.我需要为Wordpress配置什么才能在没有FTP的情况下上传?

nic*_*kle 278

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

define('FS_METHOD', 'direct');
Run Code Online (Sandbox Code Playgroud)

  • 谷歌搜索时我一直磕磕绊绊地回答这个问题,所以我在这里为自己和其他人发布了一条说明:代码在wp-admin/includes/file.php:get_filesystem_method.Wordpress尝试创建一个文件'wp-content/temp-write-test - '.time().如果失败,则假定您只能使用FTP.但这可能不是真的,如果wp-content本身不可写,但例如wp-content/plugins就是.然后,强制FS_METHOD工作. (24认同)
  • 它的工作原理但现在的问题是在解压缩包后错误说:"无法创建目录." (3认同)
  • 这对我有所帮助,但这只是因为它暴露了有关失败的更多信息.核心问题是对正在执行更新的用户帐户具有写权限.对于每种类型的系统,这可能是不同的.(注意下面的一些答案告诉你为守护进程,httpd或apache设置写权限...)它帮助我从下面的注释中看到PHP片段(<?php echo(exec("whoami")); ?>)以便我可以告诉用户正在运行更新.在此处建议进行更改似乎只是简单地抑制了FTP凭据质询,因此我可以看到错误消息. (2认同)
  • 这对我在托管的 Godaddy 帐户上有效,该帐户神秘地开始执行此操作。更糟糕的是,尽管尝试费力地运行另一个工作站点,但所有权限似乎都完好无损。再次检查工作站点的日志后,我注意到“直接”设置在那里......看来至少有一个我的插件、调整等意外地删除了该行。 (2认同)

Nan*_*mar 33

如果您使用的是Ubuntu.

sudo chown -R www-data:www-data PATH_TO_YOUR_WORDPRESS_FOLDER
Run Code Online (Sandbox Code Playgroud)

  • -1这样做的坏主意,只有wp-content应该由`www-data`拥有,请看这里:http://codex.wordpress.org/Hardening_WordPress或者这里:http://stackoverflow.com/questions/18352682/正确的文件的权限换WordPress的 (6认同)
  • 这非常有效。我很确定在这种情况下出于安全目的这不是一个坏主意,因为OP询问**本地**安装,对吧? (2认同)

Abo*_*abi 18

"无论何时使用WordPress控制面板自动安装,升级或删除插件,WordPress都必须对文件系统上的文件进行更改.

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

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

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

<?php echo(exec("whoami")); ?>
Run Code Online (Sandbox Code Playgroud)

对我来说,它是守护进程,而不是www-data.然后,通过以下方式修复权限:

sudo chown -R daemon /path/to/your/local/www/folder
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记禁用exec()或类似的敏感函数.在生产中. (3认同)
  • 更好的是使用`<?php echo(exec("id")); 甚至会为你提供超出用户id的组数据:`uid = 5018(web27)gid = 5012(client7)groups = 5012(client7),5002(sshusers)` (2认同)

Mat*_*ard 13

对于这个问题有很多类似的回答,但没有一个完全触及根本原因。塞巴斯蒂安·施密德 (Sebastian Schmid)对原始帖子的评论涉及到这一点,但并不全面。以下是我截至 2018 年 11 月 6 日的看法:

根本原因

当您尝试通过 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 凭据提示。

修复

  1. 确保插件目录可由运行 php 进程的身份写入。
  2. 确保运行 php 进程的身份是以下任一文件的所有者:

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

最终意见

我不太热衷于专门将文件所有权应用于 file.php 来解决这个问题(至少可以说,这感觉有点黑客!)。在我看来,WordPress 代码库目前倾向于让我们在与 WordPress 应用程序文件的文件所有者相同的用户主体下执行 PHP 进程。我欢迎社区对此提出一些评论。


Ken*_*nny 10

在OSX上,我使用了以下内容,它起作用了:

sudo chown -R _www:_www {path to wordpress folder}
Run Code Online (Sandbox Code Playgroud)

_www是PHP在Mac上运行的用户.

(你可能还需要chmod一些文件夹.我先完成了它并且它没有修复它.直到我执行chown命令它才有效,所以我不确定它是否是chown命令单独,或chmod和chown的组合.)


Kaw*_*iKx 9

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

sudo chown -R www-data:www-data <folderpath>
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力!


Hir*_*hel 8

我按照此处列出的步骤在 Ubuntu 14.04 上本地安装了 WordPress,然后简单地运行:

sudo chown -R www-data:www-data {path_to_your_project_directory}
Run Code Online (Sandbox Code Playgroud)

解决了我下载插件的问题。我把这篇文章留在这里的唯一原因是,当我用谷歌搜索我的问题时,这是第一个结果,它让我找到了我的问题的解决方案。

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


Gio*_*ruz 8

对我来说,解决的过程是:( 当然,您必须用您的用户替换 myUser,whoami如果您不知道,请向您展示)


Nie*_*jes 7

从谷歌的第一次打击:

当WordPress无法直接访问文件时,会询问您的FTP凭据.这通常是由作为apache用户(mod_php或CGI)运行的PHP而不是拥有WordPress文件的用户引起的.

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


Abh*_*ore 7

如果在安装插件期间,Wordpress 会询问您的主机名或 FTP 详细信息。然后按照以下步骤操作:

登录到您的服务器并导航到/var/www/html/wordpress/。打开 wp-config.php 并在 define('DB_COLLATE') 之后添加这一行

define('FS_METHOD', 'direct');
Run Code Online (Sandbox Code Playgroud)

如果您收到“无法创建目录”错误。以递归方式为您的 wordpress 目录授予写权限

chmod -R go+w wordpress
Run Code Online (Sandbox Code Playgroud)

笔记。为了安全起见,一旦您将插件安装为

chmod -R go-w wordpress
Run Code Online (Sandbox Code Playgroud)


Pur*_*iya 5

解决此问题最简单的方法是将以下 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/');
Run Code Online (Sandbox Code Playgroud)

FTP_BASE是 WordPress 安装的“base”(ABSPATH) 文件夹的完整路径 FTP_CONTENT_DIR是 WordPress 安装的 wp-content 文件夹的完整路径。 FTP_PLUGIN_DIR是 WordPress 安装的插件文件夹的完整路径。


mal*_*lta 5

我们遇到了同样的问题,这是一个更大问题的一部分。建议的解决方案

define('FS_METHOD', 'direct');
Run Code Online (Sandbox Code Playgroud)

隐藏该窗口,但我们在加载主题和升级等方面仍然遇到问题。它与权限有关,但在我们的例子中,我们通过从php 操作系统供应商 mod_php迁移到更安全的php 操作系统供应商 FastCGI 应用程序来解决该问题。