回答:
wp-config.phpにコードを追加してみてください:
define('FS_METHOD', 'direct');
FS_METHOD
はの略ですFILESYSTEM_METHOD
。direct
FTPを使用しない-ファイルを変更するように定義している場合、WordPressにサイト上のファイルを直接変更するように強制することになります。
Ubuntuを使用している場合。
sudo chown -R www-data:www-data PATH_TO_YOUR_WORDPRESS_FOLDER
www-data
。ここを参照してくださいcodex.wordpress.org/Hardening_WordPress:ここかstackoverflow.com/questions/18352682/...
「WordPressコントロールパネルを使用してプラグインを自動的にインストール、アップグレード、または削除する場合、WordPressはファイルシステム上のファイルを変更する必要があります。
変更を加える前に、WordPressはまずファイルシステムを直接操作するためのアクセス権があるかどうかを確認します。
WordPressがファイルシステムを直接変更するために必要な権限を持っていない場合、WordPressがFTPを介して必要なことを実行できるように、FTP資格情報を要求されます。
解決策:Apacheのインスタンスが実行しているユーザーを確認するには、次の内容のテストスクリプトを作成します。
<?php echo(exec("whoami")); ?>
私にとっては、それはデーモンであり、www-dataではありませんでした。次に、次の方法で権限を修正します。
sudo chown -R daemon /path/to/your/local/www/folder
<?php echo(exec("id")); ?>
としても、ユーザーIDを超えてあなたのグループのデータを提供します:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers)
whoami
。これと同じ情報を参照sudo chown -R `whoami` /path/to/your/local/www/folder
wordpressフォルダーの所有権をwww-dataに再帰的に変更し、Apacheを再起動しました。
sudo chown -R www-data:www-data <folderpath>
それは魅力のように働きました!
WordPressがファイルに直接アクセスできない場合、WordPressはFTP認証情報を要求します。これは通常、WordPressファイルを所有するユーザーではなく、apacheユーザー(mod_phpまたはCGI)として実行されているPHPが原因で発生します。
これはほとんどの共有ホスティング環境ではかなり正常です。ファイルはユーザーとして保存され、Apacheはユーザーapache
またはとして実行されますhttpd
。これは実際には優れたセキュリティ対策であるため、エクスプロイトやハッキングでホストされているファイルを変更することはできません。すべてのWPファイルを777のセキュリティに設定することでこれを回避できますが、これはセキュリティがないことを意味するので、私はそれに対して強くお勧めします。FTPを使用するだけですが、これは適切な理由で自動的に推奨される回避策です。
プラグインのインストール中にWordpressがホスト名またはFTPの詳細を要求する場合。次に、次の手順に従います。
サーバーにログインし、/ var / www / html / wordpress /に移動します。wp-config.phpを開き、define( 'DB_COLLATE')の後にこの行を追加します
define('FS_METHOD', 'direct');
「ディレクトリを作成できませんでした」エラーが発生した場合。再帰的にあなたのワードプレスディレクトリに書き込み権限を与えます
chmod -R go+w wordpress
注意。セキュリティのため、プラグインを次のようにインストールしたら、これらの権限を取り消します
chmod -R go-w wordpress
この問題を解決する最も簡単な方法は、次のFTP情報を 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は、WordPressインストールの「base」(ABSPATH)フォルダーへの完全パスですFTP_CONTENT_DIRは、WordPressインストール のwp-contentフォルダーへの完全パスです。 FTP_PLUGIN_DIRは、WordPressインストールのpluginsフォルダーへの絶対パスです。
Nielsが述べたように、これはサーバープロセスのユーザーがWordpressフォルダーに書き込むことができないために発生します。
しかし、これは多くの記事が説明していないことです。これは、nginxプロセスではなく、phpプロセスの所有者です。nginxの所有者を変更しようとしても、これは解決されません。
これを解決するには、実行ps aux
してphp-fpmプロセスを所有しているユーザーを確認してください。次に、そのユーザーがwordpressフォルダーの所有者と同じユーザーであるか、少なくとも書き込みができることを確認します。ユーザーがフォルダに書き込めない場合は、フォルダのアクセス許可や所有権を変更する必要があります。または、2人のユーザー(サーバーの所有者とワードプレスのフォルダーの所有者)を、フォルダーに書き込むことができる共通のグループに入れます。または、php.iniの "user"プロパティを、フォルダーに書き込み可能なユーザーに変更します。
この質問に対する同様の回答はたくさんありますが、根本的な原因については完全に触れていません。元の投稿に対するSebastian Schmidのコメントはそれに触れていますが、完全には触れていません。2018-11-06の私の見解は次のとおりです。
根本的な原因
WordPress管理インターフェースを介してプラグインをアップロードしようとすると、WordPressは「get_filesystem_method()」という関数を呼び出します(参照:/wp-admin/includes/file.php : 1549)。このルーチンは、問題の場所(この場合はプラグインディレクトリ)にファイルを書き込もうとします。もちろん、WordPressユーザー(phpを実行しているユーザーIDと考えてください)が問題の場所にファイルを書き込むことを許可するファイル権限が設定されていない場合、ここですぐに失敗する可能性があります。
ファイルを作成できる場合、この関数は一時ファイルのファイル所有者と、関数の現在のファイルのファイル所有者を検出します(参照:/wp-admin/includes/file.php : 1572)を検出し、2つを比較します。それらが一致する場合、WordPressの言葉では、「WordPressはWordPressファイルと同じ所有者としてファイルを作成しています。つまり、PHP経由で新しいファイルを変更して作成しても安全です」ということであり、FTP認証情報のプロンプトなしでプラグインが正常にアップロードされます。一致しない場合は、FTP資格情報のプロンプトが表示されます。
修正
PHPプロセスを実行しているIDが次のいずれかのファイル所有者であることを確認します。
a)すべてのWordPressアプリケーションファイル、または...
b)少なくとも/wp-admin/includes/file.phpファイル
最終コメント
この問題を回避するためにfile.phpにファイルの所有権を具体的に適用することにあまり熱心ではありません(控えめに言っても少しハッキーな気がします!)。この時点では、WordPressコードベースは、WordPressアプリケーションファイルのファイル所有者と同じユーザープリンシパルでPHPプロセスを実行するようになっているようです。これについてコミュニティからのコメントを歓迎します。