我在本地系统中安装了一个 WordPress 博客。但是当我尝试从管理员添加插件时,它会要求 FTP 访问。我需要为 WordPress 配置什么才能在没有 FTP 的情况下上传?
16 回答
尝试在 wp-config.php 中添加代码:
define('FS_METHOD', 'direct');
如果您使用的是 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")); ?>
对我来说,它是守护进程而不是 www-data。然后,通过以下方式修复权限:
sudo chown -R daemon /path/to/your/local/www/folder
在 OSX 上,我使用了以下内容,并且效果很好:
sudo chown -R _www:_www {path to wordpress folder}
_www 是在 Mac 上运行 PHP 的用户。
(您可能还需要 chmod 一些文件夹。我先完成了它,但没有修复它。直到我执行 chown 命令才有效,所以我不确定它是否是 chown 命令单独,或 chmod 和 chown 的组合。)
我递归地将wordpress文件夹的所有权更改为www-data并重新启动了apache。
sudo chown -R www-data:www-data <folderpath>
它就像一个魅力!
如果在安装插件期间,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
我按照此处概述的步骤在 Ubuntu 14.04 上进行了 WordPress 本地安装并简单地运行:
sudo chown -R www-data:www-data {path_to_your_project_directory}
解决了我下载插件的问题。我在这里留下这篇文章的唯一原因是因为当我用谷歌搜索我的问题时,这是最初的结果之一,它让我找到了解决问题的方法。
希望这对任何人都有帮助!
当 WordPress 无法直接访问文件时,它会要求您提供 FTP 凭据。这通常是由 PHP 作为 apache 用户(mod_php 或 CGI)而不是拥有 WordPress 文件的用户运行引起的。
这在大多数共享主机环境中是相当正常的——文件以用户身份存储,Apache 以用户身份运行apache
或httpd
. 这实际上是一个很好的安全预防措施,因此漏洞利用和黑客无法修改托管文件。您可以通过将所有 WP 文件设置为 777 安全性来规避此问题,但这意味着没有安全性,因此我强烈建议您不要这样做。只需使用 FTP,这是有充分理由的自动建议解决方法。
这个问题有很多类似的回答,但没有一个完全触及根本原因。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 进程的身份写入。
确保运行您的 php 进程的身份是以下任一文件的所有者:
a) 所有 WordPress 应用程序文件,或...
b) 至少 /wp-admin/includes/file.php 文件
最后的评论
我并不太热衷于将文件所有权专门应用于 file.php 以解决此问题(至少可以说感觉有点 hacky!)。在我看来,WordPress 代码库倾向于让我们在与 WordPress 应用程序文件的文件所有者相同的用户主体下执行 PHP 进程。我欢迎社区对此发表一些意见。
解决此问题的最简单方法是将以下 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 安装的插件文件夹的完整路径。
作为更大问题的一部分,我们遇到了同样的问题。建议的解决方案
define('FS_METHOD', 'direct');
隐藏该窗口,但我们仍然在加载主题和升级等方面遇到问题。它与权限有关,但在我们的案例中,我们通过从php OS 供应商 mod_php移动到更安全的php OS 供应商 FastCGI 应用程序来解决问题。
首先移动到您的安装文件夹(例如)
cd /Applications/XAMPP/xamppfiles/
现在我们要修改您的 htdocs 目录:
sudo chown -R daemon htdocs
出现提示时输入您的 root 密码,然后使用 chmod 调用完成:
sudo chmod -R g+w htdocs
我面临同样的问题!我已经在 wp-config.php 文件(任何行)中添加了下面的代码,它现在可以工作了!
define('FS_METHOD', 'direct');
正如 Niels 所说,发生这种情况是因为服务器进程用户无法写入 Wordpress 文件夹。
但这是很多文章没有解释的事情。它是 php 进程的所有者,而不是 nginx 进程。如果您尝试更改 nginx 所有者,它不会解决这个问题。
要解决它,请尝试运行ps aux
以查看哪个用户拥有 php-fpm 进程。然后检查用户是否与 wordpress 文件夹的所有者相同,或者至少可以写入。如果用户无法写入,您需要更改文件夹的权限和/或所有权;或者将两个用户(服务器所有者和 wordpress 文件夹所有者)放在一个可以写入文件夹的公共组中;或将 php.ini "user" 属性更改为可以写入文件夹的用户。
对我来说,为了能够使用 Ubuntu 在我的本地主机上工作,解决的过程是:(
当然,您必须用您的用户替换 myUser,whoami
如果您不知道,请向您展示)
将自己包含在 www-data 组中(无需 sudo 即可访问和编辑文件):
sudo usermod -aG www-data myUser
将自己和该组设置为文件所有者:
sudo chown -R myUser:www-data /var/www/html
为组设置主要权限(组也必须写):
sudo find . -type f -exec chmod 664 {} \; sudo find . -type d -exec chmod 775 {} \;
然后在 config.php 上添加这一行
define('FS_METHOD', 'direct');
define('FS_METHOD', 'direct');
将此添加到 wp-config.php
如果问题仍然存在,您可以尝试将插件文件夹的权限设置为 755 或者在 linux 中您可以通过此命令进行设置
Chmod -R 755