Conversia operațiunilor fopen/fwrite în WP_filesystem

27 oct. 2013, 18:47:08
Vizualizări: 4.13K
Voturi: 1

În funcția de mai jos, încerc să convertesc metodele fopen/fwrite/fclose la metodele preferate WP_filesystem. Totul funcționează conform așteptărilor folosind blocul de script comentat, însă metodele WP_filesystem returnează întotdeauna blocul de eroare.

Aveți idei ce fac greșit?

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 "A apărut o eroare la salvarea fișierului htaccess. Ca urmare, nu au fost efectuate modificări";die;
            }

    }

return;

}

Când folosesc var_dump($wp_filesystem) rezultatul este:

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
Comentarii

ce ai făcut pentru depanare?

Chip Bennett Chip Bennett
27 oct. 2013 18:53:45

Am confirmat că primesc rezultatele așteptate până la apelul put_contents() (afișând rezultatele pe ecran). Aș aprecia orice sugestii ai.

Scott B Scott B
27 oct. 2013 19:07:40
Toate răspunsurile la întrebare 2
0

Funcția get_contents returnează conținutul fișierului, nu un handler de fișier. Utilizarea put_contents cu $f după aceea este incorectă.

Încearcă $wp_filesystem->put_contents( $htaccess_file, $htaccessnew, FS_CHMOD_FILE ) în schimb.

De asemenea, nu este neapărat sigur să folosești funcții precum "get_home_path" și altele asemenea cu WP_Filesystem. Calea de pe sistemul remote poate să nu corespundă cu cea locală. Va trebui să faci ceva de genul:

$homedir = $wp_filesystem->abspath();

Pentru a obține echivalentul ABSPATH pe celălalt sistem de fișiere.

27 oct. 2013 22:48:33
1

Mă aștept ca problema să fie cu datele de autentificare. Codul tău presupune că acestea sunt setate, dar nu ai făcut nimic pentru a te asigura de acest lucru. var_dump($f) și verifică dacă ai un obiect de eroare la $f->errors. Adică, fă asta:

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

Dacă ai un obiect de eroare, va trebui să rescrii codul tău astfel încât să request_filesystem_credential() dacă acestea nu sunt deja setate.

27 oct. 2013 19:28:46
Comentarii

Mulțumesc pentru pont. Am actualizat întrebarea mea cu rezultatele var_dump.

Scott B Scott B
27 oct. 2013 19:52:30