Avertismente ftp_nlist() și ftp_pwd() în WordPress - Soluții și remedieri

3 mai 2020, 19:52:59
Vizualizări: 16.3K
Voturi: 7

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:

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ă.

1
Comentarii

cu WordPress actualizându-se automat acum, este încă o idee bună să păstrezi fișierele blocate pentru utilizatorul tău și departe de utilizatorul www-data?

wruckie wruckie
18 mar. 2022 20:31:58
Toate răspunsurile la întrebare 1
3
20

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):

  1. Ce face tema uplift? De ce trebuie să verifice proprietarul?
  2. De ce setarea FS_METHOD trebuie încărcată înainte de pagina wp-settings.php?
  3. Care ar fi soluția pentru un scenariu de hosting partajat?
3 mai 2020 19:52:59
Comentarii

A funcționat exact cum este descris mai sus. Mulțumesc!

flangofas flangofas
1 dec. 2020 22:32:06

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

Gab Gab
25 iul. 2022 22:45:31

Mulțumesc, omule! Mi-ai scutit multă frustrare! Am început să primesc această eroare după ce am schimbat hostingul.

BenVida BenVida
25 apr. 2024 07:59:38