WordPress prosi o moje dane uwierzytelniające FTP, aby zainstalować wtyczki


118

Zainstalowałem blog WordPress w moim systemie lokalnym. Ale kiedy próbuję dodać wtyczki od administratora, prosi o dostęp do FTP. Co muszę skonfigurować, aby WordPress mógł przesyłać pliki bez FTP?

Odpowiedzi:


302

Spróbuj dodać kod w wp-config.php:

define('FS_METHOD', 'direct');

29
Ciągle natrafiam na tę odpowiedź podczas googlowania, więc zamieszczam tutaj notatkę dla siebie i innych: Kod znajduje się w wp-admin / include / file.php: get_filesystem_method. Wordpress próbuje utworzyć plik „wp-content / temp-write-test -”. Time (). Jeśli to się nie powiedzie, zakłada się, że możesz używać tylko protokołu FTP. Ale może to nie być prawda, jeśli sama wp-content nie jest zapisywalna, ale na przykład wp-content / plugins. Wtedy wymuszenie FS_METHOD działa.
Sebastian Schmid,

3
działa, ale teraz problem polega na tym, że po rozpakowaniu pakietu pojawia się komunikat o błędzie: „Nie można utworzyć katalogu”.
Andrew

3
Pomogło mi to, ale tylko dlatego, że ujawniło więcej informacji o awarii. Podstawowym problemem jest posiadanie uprawnień do zapisu dla konta użytkownika dokonującego aktualizacji. Dla każdego typu systemu może to być inne. (zauważ, że niektóre odpowiedzi poniżej mówią, aby ustawić prawa zapisu dla demona, httpd lub apache ...) Pomogło mi to zobaczyć fragment PHP z komentarza poniżej (<? php echo (exec ("whoami")); ?>), abym mógł stwierdzić, który użytkownik uruchamia aktualizację. Wprowadzenie sugerowanej tutaj zmiany wydawało się po prostu pomijać wyzwanie poświadczeń FTP, dzięki czemu mogłem zobaczyć komunikaty o błędach.
agentv

Używam nginx, a nie Apache. Jest dość oczywiste, że PHP-FPM nie używać kombinacji prawy użytkownik / grupa (stosując trik opisany przez @Aboozar Rajabi); jednak z jakiegoś powodu sprawdzenie WP kończy się niepowodzeniem (brak błędów w dziennikach). Użycie tego ustawienia umożliwiło mi bezproblemową aktualizację do wersji 4.7!
Gwyneth Llewelyn,

1
Robiłem DevOps w innych obszarach przed WordPressem, moje najlepsze przypuszczenie FS_METHODto skrót od FILESYSTEM_METHOD. Kiedy definiujesz, aby directmodyfikować pliki - inaczej niż przy użyciu protokołu FTP, zmuszasz WordPress do próby zmiany plików bezpośrednio w witrynie.
Dylan Pierce,

40

Jeśli używasz Ubuntu.

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

7
-1 zły pomysł, aby to zrobić, tylko zawartość wp powinna być własnością www-datapatrz tutaj: codex.wordpress.org/Hardening_WordPress lub tutaj: stackoverflow.com/questions/18352682/…
timhc22

Ta odpowiedź rozwiązuje również błąd „Instalacja nie powiodła się: Nie można zlokalizować katalogu treści WordPress (wp-content)”. podczas próby zainstalowania wtyczki z pulpitu nawigacyjnego.
WindChimes

25

„Za każdym razem, gdy używasz panelu sterowania WordPress do automatycznej instalacji, aktualizacji lub usuwania wtyczek, WordPress musi wprowadzić zmiany w plikach w systemie plików.

Przed wprowadzeniem jakichkolwiek zmian WordPress najpierw sprawdza, czy ma dostęp do bezpośredniego manipulowania systemem plików.

Jeśli WordPress nie ma niezbędnych uprawnień do bezpośredniej modyfikacji systemu plików, zostaniesz poproszony o podanie danych uwierzytelniających FTP, aby WordPress mógł spróbować zrobić to, czego potrzebuje, przez FTP ”.

Rozwiązanie: aby dowiedzieć się, z jakim użytkownikiem działa Twoja instancja Apache, utwórz skrypt testowy o następującej treści:

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

Dla mnie był to demon, a nie dane www. Następnie popraw pozwolenie przez:

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

3
Nie zapomnij wyłączyć funkcji exec () lub podobnych wrażliwych funkcji. w produkcji.
Arda

2
Jeszcze lepsze jest użycie, <?php echo(exec("id")); ?>które zapewni nawet dane grupowe poza identyfikatorem użytkownika:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers)
Gwyneth Llewelyn,

Jeśli potrafisz sudo i chown, możesz wpisać, whoamiwięc zobacz te same informacje:sudo chown -R `whoami` /path/to/your/local/www/folder
Benji

11

Na OSX użyłem następujących i zadziałało:

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

_www to użytkownik, na którym działa PHP na komputerze Mac.

(Może być również konieczne chmodowanie niektórych folderów. Zrobiłem to najpierw i nie naprawiłem tego. Dopiero gdy wykonałem polecenie chown, zadziałało, więc nie jestem pewien, czy to było polecenie chown samodzielnie lub połączenie chmod i chown.)


9

Zmieniłem własność folderu wordpress rekurencyjnie na www-data i ponownie uruchomiłem Apache.

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

Zadziałało jak urok!


To prawdopodobnie poprawna odpowiedź dla większości ludzi. Myślę, że to trzeci raz, kiedy utworzyłem folder i zapomniałem o chown.
MrMysterious2502

7

Od pierwszego trafienia w Google :

WordPress prosi o podanie danych logowania FTP, gdy nie może uzyskać bezpośredniego dostępu do plików. Zwykle jest to spowodowane tym, że PHP działa jako użytkownik Apache (mod_php lub CGI), a nie użytkownik, który jest właścicielem twoich plików WordPress.

Jest to raczej normalne w większości współdzielonych środowisk hostingowych - pliki są przechowywane jako użytkownik, a Apache działa jako użytkownik apachelub httpd. W rzeczywistości jest to dobre zabezpieczenie, więc exploity i hacki nie mogą modyfikować hostowanych plików. Możesz to obejść, ustawiając wszystkie pliki WP na zabezpieczenia 777, ale oznacza to brak zabezpieczeń, więc zdecydowanie odradzam to. Po prostu użyj protokołu FTP, jest to automatycznie zalecane obejście z dobrego powodu.


Dziękuję za wyjaśnienie. Czy istnieje sposób na skonfigurowanie serwera współdzielonego, aby uruchamiał PHP jako poprawny użytkownik lub naprawił właściciela lub inne rozwiązanie?
Maxwell sc

5

Jeśli podczas instalacji wtyczki Wordpress zapyta o nazwę hosta lub dane FTP. Następnie wykonaj następujące kroki:

Zaloguj się na swój serwer i przejdź do / var / www / html / wordpress / . Otwórz wp-config.php i dodaj tę linię po define ('DB_COLLATE')

define('FS_METHOD', 'direct');

Jeśli pojawi się błąd „Nie można utworzyć katalogu”. Przyznaj uprawnienia do zapisu w swoim katalogu wordpress rekurencyjnie jako

chmod -R go+w wordpress

UWAGA. Ze względów bezpieczeństwa cofnij te uprawnienia po zainstalowaniu wtyczki jako

chmod -R go-w wordpress

4

Najpierw przejdź do folderu instalacyjnego (na przykład)

cd /Applications/XAMPP/xamppfiles/

Teraz zamierzamy zmodyfikować twój katalog htdocs:

sudo chown -R daemon htdocs

Po wyświetleniu monitu wprowadź hasło roota, a następnie zakończ je wywołaniem chmod:

sudo chmod -R g+w htdocs

4

Zrobiłem lokalną instalację WordPress na Ubuntu 14.04, postępując zgodnie z instrukcjami tutaj opisanymi i po prostu uruchamiając:

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

rozwiązałem mój problem z pobieraniem wtyczek. Jedynym powodem, dla którego zostawiam ten post, jest to, że kiedy wyszukałem w Google mój problem, był to jeden z pierwszych wyników i doprowadził mnie do rozwiązania mojego problemu.

Mam nadzieję, że ten pomoże każdemu!


3

Mieliśmy ten sam problem jako część większego problemu. Sugerowane rozwiązanie

define('FS_METHOD', 'direct');

ukrywa to okno, ale nadal mieliśmy problemy z ładowaniem motywów i uaktualnień itp. Jest to związane z uprawnieniami, jednak w naszym przypadku rozwiązaliśmy problem, przechodząc od dostawcy php OS mod_php do bezpieczniejszej aplikacji dostawcy php OS FastCGI .


2

Najłatwiejszym sposobem rozwiązania tego problemu jest dodanie następujących informacji FTP do pliku 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 to pełna ścieżka do folderu „podstawowego” (ABSPATH) instalacji WordPress. FTP_CONTENT_DIR to pełna ścieżka do folderu wp-content instalacji WordPress. FTP_PLUGIN_DIR to pełna ścieżka do folderu wtyczek instalacji WordPress.


FTP nie jest bezpieczny i jako taki go wyłączamy, więc nie jest to rozwiązanie. Zamiast tego używamy SFTP.
Laurence Cope

1

Jak wspomniał Niels, dzieje się tak, ponieważ użytkownik procesu serwera nie może pisać do folderu Wordpress.

Ale tutaj jest rzecz, której wiele artykułów nie wyjaśnia. Jest właścicielem procesu php, a nie procesu nginx. Jeśli spróbujesz zmienić właściciela nginx, nie rozwiąże to tego problemu.

Aby go rozwiązać, spróbuj uruchomić ps auxi sprawdzić, który użytkownik jest właścicielem procesu php-fpm. Następnie sprawdź, czy użytkownik jest tym samym użytkownikiem, co właściciel folderu wordpress, czy przynajmniej może do niego pisać. Jeśli użytkownik nie może w nim pisać, musisz zmienić uprawnienia i / lub własność folderu; lub umieść dwóch użytkowników (właściciela serwera i właściciela folderu wordpress) we wspólnej grupie, która może pisać do folderu; lub zmień właściwość „user” php.ini na użytkownika, który może pisać do folderu.


1

Istnieje wiele podobnych odpowiedzi na to pytanie, ale żadna z nich nie dotyka w pełni pierwotnej przyczyny. Komentarz Sebastiana Schmida do oryginalnego posta dotyka go, ale nie do końca. Oto moja opinia na dzień 2018-11-06:

Przyczyna

Kiedy spróbujesz załadować wtyczkę przez interfejs administratora WordPress, WordPress wykona wywołanie funkcji o nazwie „get_filesystem_method ()” (ref: /wp-admin/includes/file.php:1549 ). Ta procedura spróbuje zapisać plik w odpowiedniej lokalizacji (w tym przypadku w katalogu wtyczek). Oczywiście może się to natychmiast nie powieść, jeśli uprawnienia do pliku nie są ustawione prawidłowo, aby umożliwić użytkownikowi WordPress (myśląc o tożsamości użytkownika wykonującego php) zapisanie pliku w danej lokalizacji.

Jeśli plik można utworzyć, funkcja ta następnie wykrywa właściciela pliku tymczasowego, wraz z właścicielem pliku bieżącego pliku funkcji (ref: /wp-admin/includes/file.php:1572 ) i porównuje oba. Jeśli pasują do siebie, mówiąc słowami WordPress, „WordPress tworzy pliki jako ten sam właściciel co pliki WordPress, oznacza to, że można bezpiecznie modyfikować i tworzyć nowe pliki za pośrednictwem PHP”, a wtyczka została pomyślnie przesłana bez monitu o poświadczenia FTP. Jeśli nie pasują, pojawi się monit o poświadczenia FTP.

Poprawki

  1. Upewnij się, że katalog wtyczki jest zapisywalny przez tożsamość, na której działa twój proces php.
  2. Upewnij się, że tożsamość, na której działa twój proces php, jest właścicielem pliku:

    a) Wszystkie pliki aplikacji WordPress lub ...
    b) Co najmniej plik /wp-admin/includes/file.php

Uwagi końcowe

Nie jestem przesadnie zainteresowany konkretnym zastosowaniem praw własności do pliku file.php, aby obejść ten problem (wydaje się to co najmniej trochę hakerskie!). Wydaje mi się, że w tym momencie baza kodu WordPress skłania się ku temu, abyśmy wykonywali proces PHP na tej samej zasadzie użytkownika, co właściciel pliku aplikacji WordPress. Z radością powitałbym kilka komentarzy społeczności na ten temat.


1

Miałem ten sam problem! Dodałem poniższy kod w pliku wp-config.php (w dowolnej linii) i już działa!

define('FS_METHOD', 'direct');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.