WordPress要求我的FTP凭据以安装插件


117

我在本地系统中安装了WordPress博客。但是,当我尝试从管理员添加插件时,它要求进行FTP访问。我需要配置什么才能使WordPress无需FTP即可上传?

Answers:


300

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

define('FS_METHOD', 'direct');

29
在谷歌搜索时,我一直在upon绊绊地回答这个问题,因此我在这里为自己和其他人发布了一个注释:该代码在wp-admin / includes / file.php:get_filesystem_method中。WordPress尝试创建文件“ wp-content / temp-write-test-”。time()。如果失败,则假定您只能使用FTP。但是,如果wp-content本身不可写,但例如wp-content / plugins是可写的,则可能不正确。然后,强制FS_METHOD工作。
塞巴斯蒂安·施密德

3
它可以正常工作,但是现在的问题是打开软件包的包装后,错误提示:“无法创建目录”。
安德鲁

3
这对我有所帮助,但这仅仅是因为它公开了有关失败的更多信息。核心问题是对正在执行更新的用户帐户具有写权限。对于每种类型的系统,这可能会有所不同。(请注意,下面的一些答案告诉您设置守护程序,httpd或apache的写权限...)它帮助我从下面的注释(<?php echo(exec(“ whoami”)))中查看了PHP代码段。 ?>),这样我就可以知道哪个用户正在运行更新。进行此处建议的更改似乎只是抑制了FTP凭据挑战,因此我可以看到错误消息。
agentv

我使用的是nginx,而不是Apache。很明显,PHP-FPM 确实使用了正确的用户/组组合(使用@Aboozar Rajabi描述的技巧);但是,由于某种原因,WP检查失败(尽管日志没有错误)。使用此设置可以让我完美升级到4.7!
Gwyneth Llewelyn

1
我一直在做其他方面的DEVOPS的WordPress之前,我最好的猜测是FS_METHOD很短的FILESYSTEM_METHOD。当您定义要direct-ly修改文件-也就是不使用FTP时,您将迫使WordPress尝试直接更改网站上的文件。
Dylan Pierce


25

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

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

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

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

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

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

sudo chown -R daemon /path/to/your/local/www/folder

3
不要忘记禁用exec()或类似的敏感函数。在生产中。
阿达(Arda)

2
最好还是使用<?php echo(exec("id")); ?>它甚至可以为您提供超出用户ID的组数据:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers)
Gwyneth Llewelyn

如果可以sudo和chown,则可以键入,whoami因此请参见相同的信息:sudo chown -R `whoami` /path/to/your/local/www/folder
Benji

11

在OSX上,我使用了以下命令,并且可以正常工作:

sudo chown -R _www:_www {path to wordpress folder}

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

(您可能还需要对chmod进行chmod设置。我首先完成了该操作,但并没有修复它。直到我执行chown命令后它才起作用,所以我不确定是否是chown命令。单独或chmod和chown的组合。)


9

我以递归方式将wordpress文件夹的所有权更改为www-data,然后重新启动了Apache。

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

它就像一个魅力!


对于大多数人来说,这是正确的答案。我认为这是我第三次创建文件夹而忘记了穿衣服。
MrMysterious2502 '17

7

从Google的第一个热门歌曲开始

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

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


感谢您的解释。是否可以将共享服务器配置为以正确的用户身份运行PHP或修复所有者或其他解决方案?
Maxwell sc

4

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

cd /Applications/XAMPP/xamppfiles/

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

sudo chown -R daemon htdocs

在出现提示时输入您的root密码,然后通过chmod调用结束密码:

sudo chmod -R g+w htdocs

4

我按照此处概述的步骤在Ubuntu 14.04上本地安装了WordPress,并简单地运行:

sudo chown -R www-data:www-data {path_to_your_project_directory}

通过下载插件解决了我的问题。我在此处留下此帖子的唯一原因是,当我用Google搜索问题时,这是最初的结果之一,它使我找到了解决问题的方法。

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


3

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

define('FS_METHOD', 'direct');

隐藏该窗口,但随后在加载主题和升级等方面仍然存在问题。它与权限相关,但是在我们的案例中,我们通过从 php OS供应商mod_php迁移到更安全的php OS供应商FastCGI应用程序来。


3

如果在插件安装期间,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

2

解决此问题的最简单方法是将以下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文件夹的完整路径。


FTP不安全,因此我们将其禁用,因此它不是解决方案。我们改用SFTP。
劳伦斯·科普

1

正如Niels所提到的,发生这种情况是因为服务器进程用户无法写入Wordpress文件夹。

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

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


1

这个问题有很多类似的答案,但是没有一个能完全找到根本原因。塞巴斯蒂安·施密德(Sebastian Schmid)对原始帖子评论完全触及了该帖子。这是我截至2018-11-06的看法:

根本原因

当您尝试通过WordPress管理界面上传插件时,WordPress会调用名为“ get_filesystem_method()”的函数(参考:/wp-admin/includes/file.php : 1549)。该例程将尝试将文件写入相关位置(在本例中为插件目录)。如果没有正确设置文件权限以允许WordPress用户(认为执行php的用户身份)将文件写入有问题的位置,它当然会立即失败。

如果可以创建文件,则此函数将检测临时文件的文件所有者以及该函数当前文件的文件所有者(参考:/wp-admin/includes/file.php1572),然后将两者进行比较。如果它们匹配,那么用WordPress的话来说,“ WordPress与WordPress文件具有相同的所有者创建文件,这意味着可以安全地通过PHP修改和创建新文件”,并且您的插件已成功上传,而没有FTP凭据提示。如果不匹配,则会显示FTP凭据提示。

修正

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

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

最后评论

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


1

我面临着同样的问题!我已经在wp-config.php文件中(在任何行中)添加了以下代码,并且现在可以正常工作!

define('FS_METHOD', 'direct');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.