Avertismente ftp_nlist() și ftp_pwd() în WordPress - Soluții și remedieri
Nu sunt sigur când au început aceste avertismente. Am preluat un site existent pentru hosting și am aplicat următoarele bune practice:
- Am actualizat WordPress - de la versiunea 5.3 la 5.4.0 (versiunea curentă WP)
- Am actualizat toate pluginurile - este o listă lungă, așa că nu o voi adăuga aici
- Am schimbat permisiunile și proprietarul fișierelor - totul este deținut de utilizatorul meu (nu Apache) și doar directorul
wp-content
este accesibil pentru scriere de către Apache (cu unele restricții în interior) -> Ghid de securizare WordPress
Ca o notă, utilizatorul și grupul Apache sunt utilizate atât de Apache, cât și de PHP-FPM. Folosim serverul (VM) doar pentru acest site, așa că nu trebuie să abordez provocările de securitate legate de partajarea proceselor.
Cu aceste modificări, am început să primesc următoarele avertismente PHP (Da, am făcut totul în același timp! Îmi pare rău pentru asta):
Avertisment: ftp_nlist() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 402
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 226
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 226
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 681
Avertisment: ftp_nlist() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 402
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 226
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 226
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 681
Avertisment: ftp_nlist() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 402
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 226
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 226
Avertisment: ftp_rmdir() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 381
Avertisment: ftp_nlist() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 402
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 226
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 226
Avertisment: ftp_pwd() așteaptă ca parametrul 1 să fie resursă, null dat în /var/www/html/wp-admin/includes/class-wp-filesystem-ftpext.php pe linia 681
Aceste avertismente apar în fișierul de log PHP-FPM la fiecare apel către server. Dacă setez define( 'WP_DEBUG', true );
, acestea pot fi găsite pe fiecare pagină.
Pași pentru rezolvare
Pot opri aceste avertismente făcând unul dintre următoarele:
- Dezactivarea pluginurilor Swift Framework și Redux Framework.
- Setarea proprietății fișierelor din directorul WordPress către Apache.
Niciuna dintre aceste modificări nu este soluția dorită. Prima strică site-ul, iar a doua creează o problemă de securitate.
Bug WordPress?
Am găsit și problema WordPress 48689 care descrie aceleași erori, dar asociate cu alte pluginuri. Totuși, soluția (if (!defined('FS_METHOD')) define('FS_METHOD', 'direct');
) nu funcționează în cazul meu. Opțiunile rămase de a ascunde avertismentele nu par a fi o idee bună.

La urma urmei, era deja în întrebare!
Context
Ambele plugin-uri sunt legate de tema site-ului meu WordPress (uplift). Nu pot înțelege ce face sau unde, dar când detectează că proprietarul fișierelor nu este utilizatorul care le execută (apache), schimbă metoda de acces la FTP.
Această acțiune nu mi se pare logică, deoarece chiar dacă fac 775 user:apache
(pseudo-cod), nu funcționează (caută proprietarul, nu dacă are permisiuni). Aș putea face 575 apache:user
, dar în acest caz, apache poate rula CHMOD, deci este inutil.
De asemenea, acest lucru se întâmplă în afara wp-content
. Și nu este documentat de plugin-uri sau temă, ceea ce, pentru mine, pare o problemă de securitate. 0 rezultate pentru "owner" și "permission" în documentație.
Soluție
Doar adaugă define('FS_METHOD', 'direct');
.
Cu puțină precauție! Acest lucru trebuie adăugat înainte de require_once( ABSPATH . 'wp-settings.php' );
. De ce? Din nou, nici o idee. Totuși, aceasta este o cerință pentru mai multe configurații, după cum puteți vedea în pagina de documentație Editing wp-config.php.
Atenție
După cum se menționează în acest răspuns, utilizarea FS_METHOD
poate reprezenta un risc de securitate pe hosting partajat. Nu este cazul meu, așa că investigația mea s-a încheiat aici.
Lipsuri
Vă rog să răspundeți la următoarele întrebări (în comentarii sau cu un răspuns, voi accepta răspunsul sau voi completa al meu, după caz):
- Ce face tema uplift? De ce trebuie să verifice proprietarul?
- De ce setarea
FS_METHOD
trebuie încărcată înainte de paginawp-settings.php
? - Care ar fi soluția pentru un scenariu de hosting partajat?

Mulțumesc mult pentru acest articol! Am avut probleme timp de o săptămână din cauza unor erori similare cu cele descrise de tine, care împiedicau actualizările și configurarea unui plugin pe site-ul meu. Am citit de multe ori despre adăugarea "define('FS_METHOD', 'direct');" în fișierul de configurare WordPress pentru a funcționa pe un server Synology (în cazul meu, gazdă) Dar nu citisem încă despre necesitatea de a avea acea linie înainte de "require_once( ABSPATH . 'wp-settings.php' );" În cazul meu, era poziționată chiar după și când am mutat-o cu o linie mai sus, atunci brusc totul a început să funcționeze! Groaznic! Mulțumesc din nou
