web-dev-qa-db-fra.com

$ wp_filesystem retourne NULL. Quelles sont les dépendances?

J'ai besoin d'obtenir une référence à l'objet $ wp_filesystem. Dans le test ci-dessous, var_dump ($ wp_filesystem) renvoie NULL. Quels fichiers supplémentaires sont nécessaires pour configurer correctement $ wp_filesystem?

Je m'attendais à ce que, depuis son appel dans file.php, le chargement de ce fichier serait suffisant pour charger l'objet.

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

$mytest = somefunction();

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

  return;
}
?>

UPDATE: J'ai découvert que je pouvais appeler WP_Filesystem () directement pour le créer. Le fichier Zip a donc été correctement extrait. Le problème est que le fichier Zip est copié dans le dossier de destination plutôt que supprimé comme le fait ma méthode ZipArchive .

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 est une variable globale contenant l'instance de l'objet système de fichiers configuré (automatiquement) après l'exécution du système de fichiers "fabrique".

Pour exécuter la fabrique "sur" la variable globale (afin de la définir), appelez simplement la fonction WP_Filesystem() qui est, devinez quoi, non documentée en codex . Au moins le docblock contient des informations et vous pouvez lire le code source (si c'est une option pour vous).

Quoi qu'il en soit, je voudrais essayer d'ajouter un appel de fonction à votre code après avoir requis le fichier.php à partir du répertoire /wp-admin/includes. Cela résout probablement déjà votre problème.

Si vous recherchez une (meilleure) abstraction du système de fichiers que/à côté de celle intégrée, considérez les objets système de SPL qui fait déjà partie de PHP.

3
hakre