WordPress fragt nach meinen FTP-Anmeldeinformationen, um Plugins zu installieren


117

Ich habe ein WordPress-Blog in meinem lokalen System installiert. Wenn ich jedoch versuche, Plugins vom Administrator hinzuzufügen, wird nach dem FTP-Zugriff gefragt. Was muss ich konfigurieren, damit WordPress ohne FTP hochladen kann?

Antworten:


300

Versuchen Sie, den Code in wp-config.php hinzuzufügen:

define('FS_METHOD', 'direct');

29
Ich stolpere beim Googeln immer wieder über diese Antwort, daher poste ich hier eine Notiz für mich und andere: Der Code befindet sich in wp-admin / includes / file.php: get_filesystem_method. Wordpress versucht, eine Datei 'wp-content / temp-write-test -' zu erstellen. Time (). Wenn dies fehlschlägt, wird davon ausgegangen, dass Sie nur FTP verwenden können. Dies ist jedoch möglicherweise nicht der Fall, wenn wp-content selbst nicht beschreibbar ist, wp-content / plugins jedoch beispielsweise. Dann funktioniert das Erzwingen von FS_METHOD.
Sebastian Schmid

3
Es funktioniert, aber das Problem ist jetzt, dass nach dem Entpacken des Pakets der Fehler lautet: "Verzeichnis konnte nicht erstellt werden."
Andrew

3
Dies hat mir geholfen, aber nur, weil es mehr Informationen über den Fehler enthüllte. Das Hauptproblem besteht darin, Schreibberechtigungen für das Benutzerkonto zu haben, das das Update ausführt. Dies kann für jeden Systemtyp unterschiedlich sein. (Beachten Sie, dass einige Antworten unten Sie auffordern, Schreibberechtigungen für Daemon, httpd oder Apache festzulegen ...) Es hat mir geholfen, das PHP-Snippet aus einem Kommentar unten zu sehen (<? php echo (exec ("whoami")); ?>) damit ich feststellen kann, welcher Benutzer das Update ausführt. Die hier vorgeschlagene Änderung schien die Herausforderung der FTP-Anmeldeinformationen einfach zu unterdrücken, sodass ich die Fehlermeldungen sehen konnte.
Agentv

Ich benutze Nginx und nicht Apache. Es ist ganz klar , dass PHP-FPM hat das Recht Benutzer / Gruppen - Kombination verwenden (mit dem Trick , beschrieben von @Aboozar Rajabi); Aus irgendeinem Grund schlägt die WP-Prüfung jedoch fehl (jedoch keine Fehler in den Protokollen). Mit dieser Einstellung konnte ich fehlerfrei auf 4.7 upgraden!
Gwyneth Llewelyn

1
Ich habe vor WordPress Devops in anderen Bereichen gemacht, meine beste Vermutung FS_METHODist kurz für FILESYSTEM_METHOD. Wenn Sie festlegen, dass directnur die Dateien geändert werden sollen - auch bekannt als kein FTP -, müssen Sie WordPress zwingen, die Dateien auf der Site direkt zu ändern.
Dylan Pierce

39

Wenn Sie Ubuntu verwenden.

sudo chown -R www-data:www-data PATH_TO_YOUR_WORDPRESS_FOLDER

7
-1 schlechte Idee, dies zu tun, nur wp-Inhalt sollte im Besitz von www-datahier sein: codex.wordpress.org/Hardening_WordPress oder hier: stackoverflow.com/questions/18352682/…
timhc22

Diese Antwort behebt auch den Fehler "Installation fehlgeschlagen: WordPress-Inhaltsverzeichnis (wp-Inhalt) konnte nicht gefunden werden." beim Versuch, ein Plugin über das Dashboard zu installieren.
WindChimes

25

"Immer wenn Sie das WordPress-Kontrollfeld verwenden, um Plugins automatisch zu installieren, zu aktualisieren oder zu löschen, muss WordPress Änderungen an Dateien im Dateisystem vornehmen.

Bevor WordPress Änderungen vornimmt, prüft es zunächst, ob es Zugriff auf die direkte Bearbeitung des Dateisystems hat.

Wenn WordPress nicht über die erforderlichen Berechtigungen verfügt, um das Dateisystem direkt zu ändern, werden Sie nach FTP-Anmeldeinformationen gefragt, damit WordPress versuchen kann, über FTP das zu tun, was es benötigt. "

Lösung: Um herauszufinden, als welcher Benutzer Ihre Apache-Instanz ausgeführt wird, erstellen Sie ein Testskript mit folgendem Inhalt:

<?php echo(exec("whoami")); ?>

Für mich war es Daemon und nicht www-Daten. Korrigieren Sie dann die Berechtigung durch:

sudo chown -R daemon /path/to/your/local/www/folder

3
Vergessen Sie nicht, exec () oder ähnliche vertrauliche Funktionen zu deaktivieren. in Produktion.
Arda

2
Besser noch ist es zu verwenden, <?php echo(exec("id")); ?>die Ihnen sogar Gruppendaten über die Benutzer-ID hinaus liefert:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers)
Gwyneth Llewelyn

Wenn Sie sudo und chown können, können Sie tippen, whoamiso sehen Sie die gleichen Informationen:sudo chown -R `whoami` /path/to/your/local/www/folder
Benji

11

Unter OSX habe ich Folgendes verwendet und es hat funktioniert:

sudo chown -R _www:_www {path to wordpress folder}

_www ist der Benutzer, unter dem PHP auf dem Mac ausgeführt wird.

(Möglicherweise müssen Sie auch einige Ordner ändern. Ich hatte das zuerst getan und es hat es nicht behoben. Erst als ich den Befehl chown ausgeführt habe, hat es funktioniert, daher bin ich mir nicht sicher, ob es der Befehl chown war allein oder eine Kombination aus chmod und chown.)


9

Ich habe den Besitz des WordPress-Ordners rekursiv in www-data geändert und Apache neu gestartet.

sudo chown -R www-data:www-data <folderpath>

Es hat wie ein Zauber funktioniert!


Dies ist wahrscheinlich die richtige Antwort für die meisten Menschen. Ich denke, dies ist das dritte Mal, dass ich einen Ordner erstellt und vergessen habe, zu chownen.
MrMysterious2502

7

Vom ersten Treffer bei Google :

WordPress fragt nach Ihren FTP-Anmeldeinformationen, wenn es nicht direkt auf die Dateien zugreifen kann. Dies wird normalerweise dadurch verursacht, dass PHP als Apache-Benutzer (mod_php oder CGI) ausgeführt wird und nicht als Benutzer, dem Ihre WordPress-Dateien gehören.

Dies ist in den meisten gemeinsam genutzten Hosting-Umgebungen eher normal. Die Dateien werden als Benutzer gespeichert und Apache wird als Benutzer apacheoder ausgeführt httpd. Dies ist eine gute Sicherheitsmaßnahme, sodass Exploits und Hacks gehostete Dateien nicht ändern können. Sie können dies umgehen, indem Sie alle WP-Dateien auf 777-Sicherheit einstellen. Dies bedeutet jedoch keine Sicherheit. Ich würde daher dringend davon abraten. Verwenden Sie einfach FTP, es ist die automatisch empfohlene Problemumgehung mit gutem Grund.


Danke für die Erklärung. Gibt es eine Möglichkeit, den gemeinsam genutzten Server so zu konfigurieren, dass PHP als der richtige Benutzer ausgeführt wird, oder den Eigentümer oder eine andere Lösung zu reparieren?
Maxwell sc

4

Wechseln Sie zuerst in Ihren Installationsordner (zum Beispiel).

cd /Applications/XAMPP/xamppfiles/

Jetzt werden wir Ihr htdocs-Verzeichnis ändern:

sudo chown -R daemon htdocs

Geben Sie Ihr Root-Passwort ein, wenn Sie dazu aufgefordert werden, und beenden Sie es mit einem chmod-Aufruf:

sudo chmod -R g+w htdocs

4

Ich habe eine lokale Installation von WordPress unter Ubuntu 14.04 durchgeführt, indem ich die hier beschriebenen Schritte befolgt und einfach ausgeführt habe:

sudo chown -R www-data:www-data {path_to_your_project_directory}

löste mein Problem mit dem Herunterladen von Plugins. Der einzige Grund, warum ich diesen Beitrag hier verlasse, ist, dass dies eines der ersten Ergebnisse war, als ich mein Problem googelte, und es mich zur Lösung meines Problems führte.

Hoffe, dieser hilft jedem!


3

Wir hatten das gleiche Problem als Teil eines größeren Problems. Die vorgeschlagene Lösung von

define('FS_METHOD', 'direct');

verbirgt dieses Fenster, aber dann hatten wir immer noch Probleme beim Laden von Themen und Upgrades usw. Es hängt mit Berechtigungen zusammen. In unserem Fall haben wir das Problem jedoch behoben, indem wir vom PHP-OS-Anbieter mod_php zur sichereren PHP-OS-Anbieter-FastCGI-Anwendung gewechselt sind .


3

Wenn Wordpress während der Installation eines Plugins nach Ihrem Hostnamen oder Ihren FTP-Details fragt. Befolgen Sie dann diese Schritte:

Melden Sie sich bei Ihrem Server an und navigieren Sie zu / var / www / html / wordpress / . Öffnen Sie wp-config.php und fügen Sie diese Zeile nach define ('DB_COLLATE') hinzu.

define('FS_METHOD', 'direct');

Wenn die Fehlermeldung "Verzeichnis konnte nicht erstellt werden" angezeigt wird. Geben Sie Ihrem WordPress-Verzeichnis Schreibberechtigungen in rekursiver Form

chmod -R go+w wordpress

HINWEIS. Widerrufen Sie diese Berechtigungen aus Sicherheitsgründen, sobald Sie ein Plugin als installiert haben

chmod -R go-w wordpress

2

Der einfachste Weg, um dieses Problem zu lösen, besteht darin, die folgenden FTP-Informationen zu Ihrem hinzuzufügen wp-config.php

define('FS_METHOD', 'direct');
define('FTP_BASE', '/usr/home/username/public_html/my-site.example.com/wordpress/');
define('FTP_CONTENT_DIR', '/usr/home/username/public_html/my-site.example.com/wordpress/wp-content/');
define('FTP_PLUGIN_DIR ', '/usr/home/username/public_html/my-site.example.com/wordpress/wp-content/plugins/');

FTP_BASE ist der vollständige Pfad zum Ordner "base" (ABSPATH) der WordPress-Installation. FTP_CONTENT_DIR ist der vollständige Pfad zum Ordner wp-content der WordPress-Installation. FTP_PLUGIN_DIR ist der vollständige Pfad zum Plugins-Ordner der WordPress-Installation.


FTP ist nicht sicher und daher deaktivieren wir es, daher ist es keine Lösung. Wir verwenden stattdessen SFTP.
Laurence Cope

1

Wie von Niels erwähnt, geschieht dies, weil der Benutzer des Serverprozesses nicht in den Wordpress-Ordner schreiben kann.

Aber hier ist die Sache, die viele Artikel nicht erklären. Es ist der Besitzer des PHP-Prozesses, nicht des Nginx-Prozesses. Wenn Sie versuchen, den Nginx-Besitzer zu ändern, wird dies nicht gelöst.

Versuchen Sie, ps auxdas Problem zu beheben , um festzustellen , welcher Benutzer den php-fpm-Prozess besitzt. Überprüfen Sie dann, ob der Benutzer derselbe Benutzer wie der Eigentümer des WordPress-Ordners ist oder zumindest darauf schreiben kann. Wenn der Benutzer nicht darauf schreiben kann, müssen Sie die Berechtigungen und / oder den Besitz des Ordners ändern. oder ordnen Sie die beiden Benutzer (Serverbesitzer und WordPress-Ordnerbesitzer) einer gemeinsamen Gruppe zu, die in den Ordner schreiben kann. oder ändern Sie die Eigenschaft "user" von php.ini in einen Benutzer, der in den Ordner schreiben kann.


1

Es gibt viele ähnliche Antworten auf diese Frage, aber keine davon berührt die Grundursache vollständig. Sebastian Schmids Kommentar zum ursprünglichen Beitrag berührt ihn, aber nicht vollständig. Hier ist meine Einstellung vom 06.11.2018:

Ursache

Wenn Sie versuchen, ein Plugin über die WordPress-Administrationsoberfläche hochzuladen, ruft WordPress eine Funktion namens "get_filesystem_method ()" auf (ref: /wp-admin/includes/file.php:1549 ). Diese Routine versucht, eine Datei an den betreffenden Speicherort (in diesem Fall das Plugin-Verzeichnis) zu schreiben. Es kann hier natürlich sofort fehlschlagen, wenn die Dateiberechtigungen nicht richtig eingerichtet sind, damit der WordPress-Benutzer (denken Sie an die Benutzeridentität, die das PHP ausführt) die Datei an den betreffenden Speicherort schreiben kann.

Wenn die Datei erstellt werden kann, erkennt diese Funktion den Dateieigentümer der temporären Datei zusammen mit dem Dateieigentümer der aktuellen Datei der Funktion (Ref: /wp-admin/includes/file.php:1572 ) und vergleicht die beiden. Wenn sie dann übereinstimmen, heißt es in WordPress: "WordPress erstellt Dateien als derselbe Eigentümer wie die WordPress-Dateien. Dies bedeutet, dass es sicher ist, neue Dateien über PHP zu ändern und zu erstellen", und Ihr Plugin wird erfolgreich ohne die Eingabeaufforderung für FTP-Anmeldeinformationen hochgeladen. Wenn sie nicht übereinstimmen, erhalten Sie die Eingabeaufforderung FTP-Anmeldeinformationen.

Korrekturen

  1. Stellen Sie sicher, dass das Plugin-Verzeichnis durch die Identität beschreibbar ist, die Ihren PHP-Prozess ausführt.
  2. Stellen Sie sicher, dass die Identität, die Ihren PHP-Prozess ausführt, der Dateieigentümer für Folgendes ist:

    a) Alle WordPress-Anwendungsdateien oder ...
    b) Zumindest die Datei /wp-admin/includes/file.php

Letzte Kommentare

Ich bin nicht besonders daran interessiert, Dateieigentum speziell auf die Datei file.php anzuwenden, um dieses Problem zu umgehen (es fühlt sich gelinde gesagt ein bisschen hackig an!). An diesem Punkt scheint es mir, dass die WordPress-Codebasis dazu neigt, dass wir den PHP-Prozess unter demselben Benutzerprinzip ausführen wie der Dateibesitzer für die WordPress-Anwendungsdateien. Ich würde einige Kommentare der Community dazu begrüßen.


1

Ich hatte das gleiche Problem! Ich habe den folgenden Code in die Datei wp-config.php (in einer beliebigen Zeile) eingefügt und er funktioniert jetzt!

define('FS_METHOD', 'direct');
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.