将fopen/fwrite操作转换为WP_FILESYSTEM

时间:2013-10-27 作者:Scott B

在下面的函数中,我试图将fopen/fwrite/fclose方法转换为首选的WP\\u文件系统方法。使用注释掉的脚本块,一切都能正常工作,但是,WP\\u文件系统方法总是返回错误块。

知道我做错了什么吗?

function so_doHtaccess(){
if ( !current_user_can( \'manage_options\' ) ) return;

    if ( file_exists( get_home_path() . ".htaccess" ) ) {
        $htaccess_file = get_home_path() . ".htaccess";
        $htaccessnew   = get_option(\'my_updated_htaccess\');

/*
        if ( is_writeable( $htaccess_file ) ) {
            $f = fopen( $htaccess_file, \'w+\' );
            fwrite( $f, $htaccessnew );
            fclose( $f );
        }
*/
            WP_Filesystem();
            global $wp_filesystem;

            $f = $wp_filesystem->get_contents($htaccess_file);

            if ( ! $wp_filesystem->put_contents( $f, $htaccessnew, 0644) ) {
                echo "There was an error saving the htaccess file. As a result no changes were made";die;
            }

    }

return;

}
当I var\\u dump($wp\\u filesystem)时,它会产生:

object(WP_Filesystem_Direct)#358 (4) { 
["verbose"]=> bool(false) ["cache"]=> array(0) { } 
["method"]=> string(6) "direct" 
["errors"]=> object(WP_Error)#361 (2) { 
    ["errors"]=> array(0) { } 
    ["error_data"]=> array(0) { } 
} }

2 个回复
SO网友:Otto

get\\u contents函数返回文件的内容,而不是文件句柄。在此之后将put\\u内容与$f一起使用是不正确的。

尝试$wp_filesystem->put_contents( $htaccess_file, $htaccessnew, FS_CHMOD_FILE ) 相反

此外,在WP\\u文件系统中使用诸如“get\\u home\\u path”之类的东西并不一定安全。远程路径可能与本地路径不匹配。您需要执行以下操作:

$homedir = $wp_filesystem->abspath();

获取另一个文件系统上的等效ABSPATH。

SO网友:s_ha_dum

我认为问题在于登录凭据。您的代码假定已设置凭据,但您没有采取任何措施来确保这一点。var_dump($f) 并查看是否有错误对象$f->errors. 也就是说,请执行以下操作:

$f = $wp_filesystem->get_contents($htaccess_file);
var_dump($wp_filesystem);
如果您确实有一个错误对象,那么您需要重写您需要的代码request_filesystem_credential() 如果尚未设置。

结束

相关推荐

$wp_FILESYSTEM返回空。依赖关系是什么?

我需要获取对$wp\\u filesystem对象的引用。在下面的测试中,var\\u dump($wp\\u filesystem)返回NULL。要正确设置$wp\\U文件系统,还需要哪些其他文件?我一直在期待,因为它在文件中调用。php,加载该文件就足以加载该对象。<?php require(\'../../../wp-blog-header.php\'); require(\'../../../wp-admin/includes/file.php\'); $m