即使www-data具有写入权限,也无法安装插件

时间:2013-08-05 作者:Petrus Theron

我的WordPress路径中的所有文件都由myuser:www-data Apache作为www数据运行。所有文件和文件夹都具有组写入权限,例如。-rw-rw----, 但当我尝试安装插件时,会不断提示我输入FTP详细信息。

如果我选择了www数据用户的路径,插件的安装和删除工作将按预期进行,但随后myuser无法编辑文件。我可以将myuser添加到www数据组,但之后myuser可以访问所有其他站点。

我的文件如下:

chown -R myuser:www-data wordpress-folder/*
和chmod\'ed如下:

find wordpress-folder/ -type d -exec chmod 755 {} \\;
find wordpress-folder/ -type f -exec chmod 644 {} \\;
如果我的文件属于www数据组,并且是组可写的,那么WordPress肯定能够安装插件。为什么WordPress不能安装插件?

以下是的输出ls -la 在我的插件文件夹中:

total 48
drwxrwx---  9 myuser www-data 4096 Aug  5 01:26 .
drwxrwx---  6 myuser www-data 4096 Aug  5 01:51 ..
drwxrwx---  6 myuser www-data 4096 Jul 10 16:27 disqus-comment-system
-rw-rw----  1 myuser www-data 6148 Jul 10 15:37 .DS_Store
drwxrwx---  7 myuser www-data 4096 Jul 10 16:30 gravityforms
-rw-rw----  1 myuser www-data   30 Jul 10 15:37 index.php
drwxrwx---  3 myuser www-data 4096 Jul 10 16:30 lime-export
drwxrwx---  6 myuser www-data 4096 Aug  1 11:17 mp6
drwxrwx---  6 myuser www-data 4096 Aug  5 01:26 rewrite
drwxrwx--- 10 myuser www-data 4096 Jul 10 16:38 wordpress-seo
drwxrwx---  7 myuser www-data 4096 Jul 24 17:14 wp-minify

3 个回复
SO网友:bradt

如果将以下内容添加到wp配置中。php文件它将强制WordPress使用“直接”文件系统方法:

define( \'FS_METHOD\', \'direct\' );

SO网友:Jesse

我想,我以前也回答过类似的问题。OP声称已正确设置所有文件权限,但仍要求提供ftp凭据。

嗯,这很奇怪。但我认为,这仍然是关于许可的问题。

Wordpress将编写一个临时文件,并通过以下方式比较文件所有者getmyuid() == @fileowner($temp_file_name).

如果是真的,它将直接安装插件,而不询问ftp详细信息。

有关更多详细信息,wp-admin/includes/file.phpget_filesystem_method 作用

因此,我建议您在wordpress安装的根文件夹中编写一个独立的php脚本以进行检查。

1、写入临时文件

2、检查临时文件的所有者

$dir = dirname(__FILE__);

$temp_file = $dir.\'/wp-content/\'.time();
$temp_handle = fopen($temp_file, \'w\');
if ( $temp_handle ) {
    if ( getmyuid() == fileowner($temp_file) ){
        echo \'file owner correct\';
    }

    fclose($temp_handle);
    unlink($temp_file);
}else{
    echo \'cant write file\';
}

SO网友:Mladen Petrovic

简单的解决方法是在wp config中添加FTP凭据。php文件,如下所示:

define( \'FTP_USER\', \'username\' );
define( \'FTP_PASS\', \'password\' );
define( \'FTP_HOST\', \'ftp.example.org:21\' );
但问题可能与您使用不同的PHP进程而不是SUPPP托管有关。

结束