WordPress meminta kredensial FTP saya untuk menginstal plugin

118

Saya memasang blog WordPress di sistem lokal saya. Tetapi ketika saya mencoba menambahkan plugin dari admin itu meminta akses FTP. Apa yang perlu saya konfigurasikan agar WordPress dapat mengunggah tanpa FTP?

sasi kanth
sumber

Jawaban:

303

Coba tambahkan kode di wp-config.php:

define('FS_METHOD', 'direct');
nikel
sumber
29
Saya terus menemukan jawaban ini saat googling, jadi saya memposting catatan di sini untuk diri saya sendiri dan orang lain: Kode ada di wp-admin / include / file.php: get_filesystem_method. Wordpress mencoba membuat file 'wp-content / temp-write-test -'. Time (). Jika gagal, diasumsikan bahwa Anda hanya dapat menggunakan FTP. Tetapi ini mungkin tidak benar, jika wp-content itu sendiri tidak dapat ditulis, tetapi sebagai contoh wp-content / plugins adalah. Kemudian, memaksa FS_METHOD berfungsi.
Sebastian Schmid
3
itu berfungsi tetapi masalahnya sekarang adalah setelah membongkar paket kesalahan mengatakan: "Tidak dapat membuat direktori."
Andrew
3
Ini membantu saya, tetapi hanya karena itu mengungkap lebih banyak informasi tentang kegagalan tersebut. Masalah utamanya adalah memiliki izin menulis untuk akun pengguna yang melakukan pembaruan. Untuk setiap jenis sistem, ini bisa berbeda. (perhatikan bahwa beberapa jawaban di bawah memberitahu Anda untuk mengatur izin menulis untuk daemon, atau httpd, atau apache ...) Ini membantu saya untuk melihat potongan PHP dari komentar di bawah (<? php echo (exec ("whoami")); ?>) sehingga saya dapat mengetahui pengguna mana yang menjalankan pembaruan. Membuat perubahan yang disarankan di sini sepertinya hanya menekan tantangan kredensial FTP sehingga saya bisa melihat pesan kesalahan.
agentv
Saya menggunakan nginx, dan bukan Apache. Cukup jelas bahwa PHP-FPM memang menggunakan kombinasi pengguna / grup yang tepat (menggunakan trik yang dijelaskan oleh @Aboozar Rajabi); namun, untuk beberapa alasan, pemeriksaan WP gagal (tidak ada kesalahan pada log). Menggunakan pengaturan ini memungkinkan saya untuk meningkatkan ke 4.7 dengan sempurna!
Gwyneth Llewelyn
1
Saya telah melakukan devops di area lain sebelum WordPress, tebakan terbaik saya FS_METHODsingkatnya FILESYSTEM_METHOD. Saat Anda menentukan untuk direct-modifikasi file - alias tidak menggunakan FTP, Anda memaksa WordPress untuk mencoba dan mengubah file di situs secara langsung.
Dylan Pierce
40

Jika Anda menggunakan Ubuntu.

sudo chown -R www-data:www-data PATH_TO_YOUR_WORDPRESS_FOLDER
Nanhe Kumar
sumber
7
-1 ide buruk untuk melakukan ini, hanya wp-konten yang harus dimiliki oleh www-datalihat di sini: codex.wordpress.org/Hardening_WordPress atau di sini: stackoverflow.com/questions/18352682/…
timhc22
Jawaban ini juga memperbaiki kesalahan "Penginstalan gagal: Tidak dapat menemukan direktori konten WordPress (wp-content)." saat mencoba memasang plugin dari Dasbor.
WindChimes
25

"Setiap kali Anda menggunakan panel kontrol WordPress untuk menginstal, mengupgrade, atau menghapus plugin secara otomatis, WordPress harus membuat perubahan pada file di sistem file.

Sebelum membuat perubahan apa pun, WordPress terlebih dahulu memeriksa apakah ia memiliki akses untuk memanipulasi sistem file secara langsung atau tidak.

Jika WordPress tidak memiliki izin yang diperlukan untuk mengubah sistem file secara langsung, Anda akan dimintai kredensial FTP sehingga WordPress dapat mencoba melakukan apa yang diperlukan melalui FTP. "

Solusi: Untuk mengetahui pengguna apa contoh apache Anda berjalan, buat skrip pengujian dengan konten berikut:

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

Bagi saya, itu daemon dan bukan www-data. Kemudian, perbaiki izin dengan:

sudo chown -R daemon /path/to/your/local/www/folder
Aboozar Rajabi
sumber
3
Jangan lupa untuk menonaktifkan exec () atau fungsi sensitif serupa. dalam produksi.
Arda
2
Lebih baik lagi menggunakan <?php echo(exec("id")); ?>yang bahkan akan memberi Anda data grup di luar id pengguna:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers)
Gwyneth Llewelyn
Jika Anda dapat sudo dan chown Anda dapat mengetik whoamijadi lihat info yang sama:sudo chown -R `whoami` /path/to/your/local/www/folder
Benji
11

Di OSX, saya menggunakan yang berikut ini, dan berhasil:

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

_www adalah pengguna yang menjalankan PHP di Mac.

(Anda mungkin juga perlu mengubah beberapa folder juga. Saya telah melakukannya terlebih dahulu dan itu tidak memperbaikinya. Baru setelah saya melakukan perintah chown yang berhasil, jadi saya tidak yakin apakah itu perintah chown sendiri, atau kombinasi chmod dan chown.)

Kenny
sumber
9

Saya mengubah kepemilikan folder wordpress menjadi www-data secara rekursif dan memulai ulang apache.

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

Ini bekerja seperti pesona!

KawaiKx
sumber
Ini mungkin jawaban yang benar bagi kebanyakan orang. Saya pikir ini adalah ketiga kalinya saya membuat folder dan lupa chown.
MrMysterious2502
7

Dari hit pertama di Google :

WordPress meminta kredensial FTP Anda jika tidak dapat mengakses file secara langsung. Hal ini biasanya disebabkan oleh PHP yang berjalan sebagai pengguna apache (mod_php atau CGI) daripada pengguna yang memiliki file WordPress Anda.

Ini agak normal di sebagian besar lingkungan hosting bersama - file disimpan sebagai pengguna, dan Apache berjalan sebagai pengguna apacheatau httpd. Ini sebenarnya adalah tindakan pencegahan keamanan yang baik sehingga eksploitasi dan peretasan tidak dapat mengubah file yang dihosting. Anda dapat menghindari ini dengan mengatur semua file WP ke keamanan 777, tetapi itu berarti tidak ada keamanan, jadi saya sangat menyarankan untuk tidak melakukannya. Cukup gunakan FTP, ini adalah solusi yang disarankan secara otomatis dengan alasan yang bagus.

Niels Keurentjes
sumber
Terima kasih untuk penjelasannya. Apakah ada cara untuk mengkonfigurasi server bersama untuk menjalankan PHP sebagai pengguna yang benar atau memperbaiki pemilik atau solusi lain?
Maxwell sc
5

Jika selama instalasi plugin, Wordpress menanyakan nama host atau detail FTP Anda. Kemudian ikuti langkah-langkah berikut:

Login ke server Anda dan arahkan ke / var / www / html / wordpress / . Buka wp-config.php dan tambahkan baris ini setelah define ('DB_COLLATE')

define('FS_METHOD', 'direct');

Jika Anda mendapatkan kesalahan "Tidak dapat membuat direktori". Berikan izin menulis ke direktori wordpress Anda secara rekursif sebagai

chmod -R go+w wordpress

CATATAN. Demi keamanan, cabut izin ini setelah Anda memasang plugin sebagai

chmod -R go-w wordpress
Abhishek Rathore
sumber
4

Pindah pertama ke folder instalasi Anda (misalnya)

cd /Applications/XAMPP/xamppfiles/

Sekarang kita akan mengubah direktori htdocs Anda:

sudo chown -R daemon htdocs

Masukkan kata sandi root Anda saat diminta, lalu selesaikan dengan panggilan chmod:

sudo chmod -R g+w htdocs
Benja Garrido
sumber
4

Saya melakukan penginstalan lokal WordPress di Ubuntu 14.04 mengikuti langkah-langkah yang diuraikan di sini dan hanya menjalankan:

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

memecahkan masalah saya dengan mengunduh plugin. Satu-satunya alasan saya meninggalkan posting ini di sini adalah karena ketika saya mencari masalah saya di Google, ini adalah salah satu hasil pertama dan itu membawa saya ke solusi untuk masalah saya.

Semoga yang ini bisa membantu siapa pun!

Hiren Gohel
sumber
3

Kami memiliki masalah yang sama sebagai bagian dari masalah yang lebih besar. Solusi yang disarankan dari

define('FS_METHOD', 'direct');

menyembunyikan jendela itu tetapi kemudian kami masih memiliki masalah dengan memuat tema dan peningkatan dll. Ini terkait dengan izin namun dalam kasus kami, kami memperbaiki masalah dengan berpindah dari vendor php OS mod_php ke aplikasi FastCGI vendor OS php yang lebih aman .

Malta
sumber
2

Cara termudah untuk mengatasi masalah ini adalah menambahkan informasi FTP berikut ke file 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 adalah path lengkap ke folder "base" (ABSPATH) dari instalasi WordPress FTP_CONTENT_DIR adalah path lengkap ke folder wp-content dari instalasi WordPress. FTP_PLUGIN_DIR adalah jalur lengkap ke folder plugin dari instalasi WordPress.

Purvik Dhorajiya
sumber
FTP tidak aman dan karena itu kami menonaktifkannya, jadi ini bukan solusi. Kami menggunakan SFTP sebagai gantinya.
Laurence Cope
1

Seperti yang disebutkan oleh Niels, ini terjadi karena pengguna proses server tidak dapat menulis ke folder Wordpress.

Tapi inilah hal yang tidak dijelaskan oleh banyak artikel. Ini adalah pemilik proses php, bukan proses nginx. Jika Anda mencoba mengubah pemilik nginx, ini tidak akan menyelesaikan masalah ini.

Untuk mengatasinya, coba jalankan ps auxuntuk melihat pengguna mana yang memiliki proses php-fpm. Kemudian periksa apakah pengguna tersebut adalah pengguna yang sama dengan pemilik folder wordpress, atau setidaknya dapat menulis ke sana. Jika pengguna tidak dapat menulis padanya, Anda harus mengubah izin dan / atau kepemilikan folder; atau letakkan dua pengguna (pemilik server dan pemilik folder wordpress) dalam satu grup umum yang dapat menulis ke folder; atau ubah properti "pengguna" php.ini menjadi pengguna yang dapat menulis ke folder.

mahemoff
sumber
1

Ada banyak tanggapan serupa untuk pertanyaan ini, tetapi tidak satupun dari mereka sepenuhnya menyentuh akar penyebabnya. Sebastian SchmidKomentar postingan asli menyentuhnya tetapi tidak sepenuhnya. Inilah pendapat saya pada 2018-11-06:

Penyebab utama

Ketika Anda mencoba mengunggah plugin melalui antarmuka admin WordPress, WordPress akan memanggil fungsi yang disebut "get_filesystem_method ()" (ref: /wp-admin/includes/file.php:1549 ). Rutin ini akan mencoba menulis file ke lokasi yang dimaksud (dalam hal ini direktori plugin). Ini tentu saja bisa langsung gagal di sini jika izin file tidak diatur dengan benar untuk mengizinkan pengguna WordPress (pikirkan identitas pengguna yang menjalankan php) untuk menulis file ke lokasi yang dimaksud.

Jika file dapat dibuat, fungsi ini kemudian mendeteksi pemilik file dari file sementara, bersama dengan pemilik file dari file fungsi saat ini (ref: /wp-admin/includes/file.php:1572 ) dan membandingkan keduanya. Jika cocok maka, dalam kata-kata WordPress, "WordPress membuat file sebagai pemilik yang sama dengan file WordPress, ini berarti aman untuk mengubah & membuat file baru melalui PHP" dan plugin Anda berhasil diunggah tanpa perintah Kredensial FTP. Jika tidak cocok, Anda akan mendapatkan prompt Kredensial FTP.

Perbaikan

  1. Pastikan direktori plugin dapat ditulis oleh identitas yang menjalankan proses php Anda.
  2. Pastikan identitas yang menjalankan proses php Anda adalah pemilik file untuk:

    a) Semua file aplikasi WordPress, atau ...
    b) Setidaknya file /wp-admin/includes/file.php

Komentar Terakhir

Saya tidak terlalu tertarik untuk secara khusus menerapkan kepemilikan file ke file.php untuk mengatasi masalah ini (rasanya agak hacky untuk sedikitnya!). Menurut saya, pada titik ini basis kode WordPress cenderung meminta kami menjalankan proses PHP di bawah prinsip pengguna yang sama dengan pemilik file untuk file aplikasi WordPress. Saya akan menerima beberapa komentar dari komunitas tentang ini.

Matt Woodward
sumber
1

Saya menghadapi masalah yang sama! Saya telah menambahkan kode di bawah ini dalam file wp-config.php (di baris mana saja) dan itu berfungsi sekarang!

define('FS_METHOD', 'direct');
erovere
sumber