Ce trebuie să trec pentru $needed_dirs când apelez _unzip_file_pclzip (PclZip)?

1 feb. 2011, 17:26:53
Vizualizări: 180
Voturi: 0

Încerc să creez o metodă alternativă pentru când ZipArchive nu este disponibil. Vreau să folosesc funcția _unzip_file_pclzip() din wp-admin/includes/file.php

Totuși, nu sunt sigur ce se așteaptă pentru argumentul $needed_dirs.

Folderul meu țintă pentru arhiva zip va fi folderul "styles" din tema mea, deci calea ar fi "wp-content/themes/mytheme/styles/"

Este asta ceea ce se așteaptă pentru $needed_dirs?

function openZip($file_to_open) { 
    global $wp_filesystem;//necesar dacă _unzip_file_pclzip este folosit direct
    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("A apărut o problemă. Te rugăm să încerci din nou!");  
        }
    }
    else
    {
        $needed_dirs = array();
        _unzip_file_pclzip($file_to_open, $target, $needed_dirs);
    }
} 
0
Toate răspunsurile la întrebare 1
3

@Scott B Nu am testat acest script, luat din includes/file.php -> linia 559

_unzip_file_pclzip presupune că WP_Filesystem() a fost deja apelat, deci trebuie să setați global $wp_filesystem

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

// Determină orice director părinte necesar (din directorul de upgrade)
if ( ! $wp_filesystem->is_dir($target) ) { //Facem verificarea părinților doar dacă nu există copii
    $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) ) // Sărim dacă seamănă cu o literă de unitate Windows.
            continue;

        if ( ! $wp_filesystem->is_dir($dir) )
            $needed_dirs[] = $dir;
        else
             break; // Un director există, prin urmare, nu mai este nevoie să verificăm nivelurile de mai jos
    }
}
1 feb. 2011 18:14:31
Comentarii

Am adăugat global la codul întrebării mele. Totuși, nu sunt sigur ce să transmit pentru $needed_dirs. Spui că pot să transmit doar un array gol?

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

Primesc eroarea > Call to a member function mkdir() on a non-object in C:\xampplite\htdocs\mysite\wp-admin\includes\file.php on line 703... Ai vreo idee?

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

Din câte pot să-mi dau seama, problema constă în faptul că variabila $wp_filesystem nu este indexată. Când folosesc var_dump($wp_filesystem), returnează NULL. Deci asta invalidează apelul către $wp_filesystem->mkdir()

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