我在本地系统中安装了一个WordPress博客。但是当我尝试从管理员添加插件时,它会要求FTP访问。我需要为WordPress配置什么才能在没有FTP的情况下上传?
尝试在wp-config.php中添加代码:
define('FS_METHOD', 'direct');
解决此问题的最简单方法是将以下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“user”属性更改为可以写入该文件夹的用户。
对这个问题有很多类似的回答,但没有一个完全触及根本原因。 Sebastian Schmid's评论原始帖子接触但未完全。这是我对2018-11-06的看法:
根本原因
当您尝试通过WordPress管理界面上传插件时,WordPress将调用一个名为“get_filesystem_method()”的函数(参考:/wp-admin/includes/file.php:1549)。此例程将尝试将文件写入相关位置(在本例中为插件目录)。如果没有设置文件权限以允许WordPress用户(认为执行php的用户身份)将文件写入相关位置,它当然可以立即失败。
如果可以创建文件,则此函数会检测临时文件的文件所有者以及函数当前文件的文件所有者(ref:/wp-admin/includes/file.php:1572)并比较这两者。如果它们匹配,那么用WordPress的话来说,“WordPress正在创建与WordPress文件相同的所有者文件,这意味着通过PHP修改和创建新文件是安全的”,并且您的插件在没有FTP凭据提示的情况下成功上传。如果它们不匹配,则会显示FTP凭据提示。
修复
最后评论
我并不过分热衷于专门将文件所有权应用到file.php来解决这个问题(至少可以说它有点笨拙!)。在我看来,WordPress代码库倾向于让我们在与WordPress应用程序文件的文件所有者相同的用户主体下执行PHP进程。我欢迎社区就此发表一些意见。
我遇到了同样的问题!我已经在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是PHP在Mac上运行的用户。
(你可能还需要chmod一些文件夹。我先完成了它并且没有修复它。直到我执行了chown命令它才有效,所以我不确定它是否是chown命令单独,或chmod和chown的组合。)
我递归地将wordpress文件夹的所有权更改为www-data并重新启动了apache。
sudo chown -R www-data:www-data <folderpath>
它就像一个魅力!
当WordPress无法直接访问文件时,会询问您的FTP凭据。这通常是由作为apache用户(mod_php或CGI)运行的PHP而不是拥有WordPress文件的用户引起的。
这在大多数共享托管环境中都很正常 - 文件存储为用户,Apache以用户apache
或httpd
运行。这实际上是一个很好的安全预防措施,因此漏洞和黑客无法修改托管文件。您可以通过将所有WP文件设置为777安全性来避免这种情况,但这意味着没有安全性,因此我强烈建议不要这样做。只需使用FTP,这是自动建议的解决方法,有充分的理由。
首先移动到您的安装文件夹(例如)
cd /Applications/XAMPP/xamppfiles/
现在我们要修改你的htdocs目录:
sudo chown -R daemon htdocs
在出现提示时输入您的root密码,然后使用chmod调用完成:
sudo chmod -R g+w htdocs
作为更大问题的一部分,我们遇到了同样的问题。建议的解决方案
define('FS_METHOD', 'direct');
隐藏该窗口,但我们仍然遇到加载主题和升级等问题。它与权限有关但是在我们的案例中我们通过从php OS供应商mod_php转移到更安全的php OS供应商FastCGI应用程序来解决问题。
我按照here概述的步骤在Ubuntu 14.04上本地安装了WordPress并运行:
sudo chown -R www-data:www-data {path_to_your_project_directory}
通过下载插件解决了我的问题。我离开这篇文章的唯一原因是因为当我搜索我的问题时,这是第一个结果之一,它引导我解决我的问题。
希望这个对任何人都有帮助!