web-dev-qa-db-ja.com

$ wp_filesystemはNULLを返します。依存関係は何ですか?

$ wp_filesystemオブジェクトへの参照を取得する必要があります。以下のテストでは、var_dump($ wp_filesystem)はNULLを返します。 $ wp_filesystemを正しく設定するために必要な追加ファイルは何ですか?

File.phpで呼び出されてから、そのファイルをロードすればオブジェクトをロードするのに十分であると私は期待していました。

<?php
require('../../../wp-blog-header.php');
require('../../../wp-admin/includes/file.php');

$mytest = somefunction();

function somefunction() {
  global $wp_filesystem;
  var_dump($wp_filesystem);

  return;
}
?>

更新:WP_Filesystem()を直接呼び出してそれを作成できることを発見しました。そのためZipはうまく抽出されました。今の問題はZipArchiveメソッドのようにZipファイルが削除されるのではなく宛先フォルダにコピーされることです。

require('../../../wp-blog-header.php');
require('../../../wp-admin/includes/file.php');

function openZip($file_to_open) { 
    global $target;  
    global $wp_filesystem;
    if(class_exists('ZipArchive'))
    {
        $Zip = new ZipArchive();  
        $x = $Zip->open($file_to_open);  
        if($x === true) 
        {  
            $Zip->extractTo($target);  
            $Zip->close();                
            unlink($file_to_open);  
        } else {  
            die("There was a problem. Please try again!");  
        }
    }
    else
    {
    WP_Filesystem();
    $my_dirs = ''; //What should this be? I'm already passing he $target directory
    _unzip_file_pclzip($file_to_open, $target, $my_dirs);
    }
} 
1
Scott B

$wp_filesystemは、ファイルシステム「factory」が実行された後の(自動)設定されたファイルシステムオブジェクトのインスタンスを含むグローバル変数です。

(設定するために)グローバル変数を「オーバー」してファクトリを実行するには、WP_Filesystem()関数を呼び出します。これは、推測するものです codexで文書化されていません 。少なくとも docblockにはいくつかの情報が含まれています で、ソースコードを読み取ることができます(それがオプションの場合)。

とにかく、/wp-admin/includesディレクトリからfile.phpを要求した後、コードに関数呼び出しを追加してみます。おそらくこれですでに問題は解決しています。

組み込みのものよりも優れた(より良い)ファイルシステムの抽象化を探しているなら、 SPLのファイルシステムオブジェクト がPHPの一部であると考えてください。

3
hakre