¿Qué debo pasar para $needed_dirs al llamar a _unzip_file_pclzip (también conocido como PclZip)?

1 feb 2011, 17:26:53
Vistas: 180
Votos: 0

Estoy intentando crear un método alternativo cuando ZipArchive no está presente. Quiero usar la función _unzip_file_pclzip() que se encuentra en wp-admin/includes/file.php

Sin embargo, no estoy seguro de qué se espera para el argumento $needed_dirs.

Mi carpeta de destino para el zip será la carpeta "styles" dentro de mi carpeta de tema, por lo que la ruta sería "wp-content/themes/mitema/styles/"

¿Es eso lo que se espera para $needed_dirs?

function openZip($file_to_open) { 
    global $wp_filesystem;//requerido si _unzip_file_pclzip se usa directamente
    global $target;  
    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("Hubo un problema. ¡Por favor intenta de nuevo!");  
        }
    }
    else
    {
        $needed_dirs = array();
        _unzip_file_pclzip($file_to_open, $target, $needed_dirs);
    }
} 
0
Todas las respuestas a la pregunta 1
3

@Scott B No he probado este script, tomado de includes/file.php -> línea 559

_unzip_file_pclzip asume que WP_Filesystem() ya ha sido llamado, así que necesitas configurar global $wp_filesystem

global $wp_filesystem;
$needed_dirs = array();
$target = trailingslashit($target);

// Determinar los directorios padres necesarios (del directorio de actualización)
if ( ! $wp_filesystem->is_dir($target) ) { // Solo hacerlo para padres si no existen hijos
    $path = preg_split('![/\\\]!', untrailingslashit($target));
    for ( $i = count($path); $i >= 0; $i-- ) {
        if ( empty($path[$i]) )
            continue;

        $dir = implode('/', array_slice($path, 0, $i+1) );
        if ( preg_match('!^[a-z]:$!i', $dir) ) // Saltar si parece una letra de unidad de Windows.
            continue;

        if ( ! $wp_filesystem->is_dir($dir) )
            $needed_dirs[] = $dir;
        else
             break; // Existe una carpeta, por lo tanto, no necesitamos verificar los niveles inferiores
    }
}
1 feb 2011 18:14:31
Comentarios

He agregado el global a mi código de pregunta. Todavía no estoy seguro de qué pasar para $needed_dirs. ¿Estás diciendo que puedo pasar simplemente un array vacío?

Scott B Scott B
1 feb 2011 18:42:59

Estoy recibiendo el error > Call to a member function mkdir() on a non-object in C:\xampplite\htdocs\mysite\wp-admin\includes\file.php on line 703... ¿Alguna idea?

Scott B Scott B
1 feb 2011 18:47:22

Por lo que puedo ver, el problema radica en que la variable $wp_filesystem no se está indexando. Cuando hago var_dump($wp_filesystem), está devolviendo NULL. Así que eso está invalidando la llamada a $wp_filesystem->mkdir()

Scott B Scott B
1 feb 2011 20:56:53