Tôi đã cài đặt một blog WordPress trong hệ thống cục bộ của mình. Nhưng khi tôi cố gắng thêm plugin từ quản trị viên, nó yêu cầu quyền truy cập FTP. Tôi cần cấu hình những gì cho WordPress để có thể tải lên mà không cần FTP?
Tôi đã cài đặt một blog WordPress trong hệ thống cục bộ của mình. Nhưng khi tôi cố gắng thêm plugin từ quản trị viên, nó yêu cầu quyền truy cập FTP. Tôi cần cấu hình những gì cho WordPress để có thể tải lên mà không cần FTP?
Câu trả lời:
Cố gắng thêm mã vào wp-config.php:
define('FS_METHOD', 'direct');
FS_METHOD
là viết tắt FILESYSTEM_METHOD
. Khi bạn xác định chỉ direct
sửa đổi các tệp - hay còn gọi là không sử dụng FTP, thì bạn đang buộc WordPress thử và thay đổi trực tiếp các tệp trên trang web.
Nếu bạn đang sử dụng Ubuntu.
sudo chown -R www-data:www-data PATH_TO_YOUR_WORDPRESS_FOLDER
www-data
xem tại đây: codex.wordpress.org/Hardening_WordPress hoặc tại đây: stackoverflow.com/questions/18352682/…
"Bất cứ khi nào bạn sử dụng bảng điều khiển WordPress để tự động cài đặt, nâng cấp hoặc xóa các plugin, WordPress phải thực hiện các thay đổi đối với tệp trên hệ thống tệp.
Trước khi thực hiện bất kỳ thay đổi nào, trước tiên WordPress sẽ kiểm tra xem liệu nó có quyền truy cập để thao tác trực tiếp hệ thống tệp hay không.
Nếu WordPress không có quyền cần thiết để sửa đổi hệ thống tệp trực tiếp, bạn sẽ được yêu cầu cung cấp thông tin xác thực FTP để WordPress có thể cố gắng thực hiện những gì nó cần thông qua FTP. "
Giải pháp: Để tìm ra người dùng phiên bản apache của bạn đang chạy, hãy tạo một tập lệnh thử nghiệm với nội dung sau:
<?php echo(exec("whoami")); ?>
Đối với tôi, đó là daemon chứ không phải www-data. Sau đó, sửa quyền bằng cách:
sudo chown -R daemon /path/to/your/local/www/folder
<?php echo(exec("id")); ?>
mà thậm chí sẽ cung cấp cho bạn dữ liệu nhóm ngoài user id:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers)
whoami
để xem thông tin tương tự:sudo chown -R `whoami` /path/to/your/local/www/folder
Trên OSX, tôi đã sử dụng những thứ sau và nó hoạt động:
sudo chown -R _www:_www {path to wordpress folder}
_www là người dùng mà PHP chạy trên Mac.
(Bạn cũng có thể cần chmod một số thư mục. Tôi đã làm điều đó đầu tiên và nó không sửa được. Phải đến khi tôi thực hiện lệnh chown thì nó mới hoạt động, vì vậy tôi không chắc đó có phải là lệnh chown không một mình hoặc kết hợp chmod và chown.)
Tôi đã thay đổi quyền sở hữu của thư mục wordpress thành www-data một cách đệ quy và khởi động lại apache.
sudo chown -R www-data:www-data <folderpath>
Nó làm việc như một say mê!
Từ lần truy cập đầu tiên trên Google :
WordPress yêu cầu thông tin đăng nhập FTP của bạn khi nó không thể truy cập trực tiếp vào các tệp. Điều này thường do PHP chạy với tư cách người dùng apache (mod_php hoặc CGI) chứ không phải là người dùng sở hữu các tệp WordPress của bạn.
Điều này khá bình thường trong hầu hết các môi trường lưu trữ được chia sẻ - các tệp được lưu trữ với tư cách người dùng và Apache chạy với tư cách người dùng apache
hoặc httpd
. Đây thực sự là một biện pháp phòng ngừa bảo mật tốt vì vậy việc khai thác và tấn công không thể sửa đổi các tệp được lưu trữ. Bạn có thể phá vỡ điều này bằng cách đặt tất cả các tệp WP thành bảo mật 777, nhưng điều đó có nghĩa là không có bảo mật, vì vậy tôi thực sự khuyên bạn không nên làm như vậy. Chỉ cần sử dụng FTP, đó là cách giải quyết được khuyến nghị tự động với lý do chính đáng.
Đầu tiên hãy chuyển đến thư mục cài đặt của bạn (ví dụ)
cd /Applications/XAMPP/xamppfiles/
Bây giờ chúng tôi sẽ sửa đổi thư mục htdocs của bạn:
sudo chown -R daemon htdocs
Nhập mật khẩu gốc của bạn khi được nhắc, sau đó kết thúc bằng lệnh gọi chmod:
sudo chmod -R g+w htdocs
Tôi đã thực hiện cài đặt cục bộ WordPress trên Ubuntu 14.04 theo các bước được nêu ở đây và chỉ cần chạy:
sudo chown -R www-data:www-data {path_to_your_project_directory}
đã giải quyết vấn đề của tôi với việc tải xuống các plugin. Lý do duy nhất khiến tôi rời bài đăng này ở đây là vì khi tôi truy cập vấn đề của mình, đây là một trong những kết quả đầu tiên và nó dẫn tôi đến giải pháp cho vấn đề của mình.
Hy vọng điều này sẽ giúp ích cho bất cứ ai!
Chúng tôi đã có cùng một vấn đề như một phần của một vấn đề lớn hơn. Giải pháp đề xuất của
define('FS_METHOD', 'direct');
ẩn cửa sổ đó nhưng sau đó chúng tôi vẫn gặp sự cố khi tải chủ đề và nâng cấp, v.v. Nó liên quan đến quyền tuy nhiên trong trường hợp của chúng tôi, chúng tôi đã khắc phục sự cố bằng cách chuyển từ nhà cung cấp hệ điều hành php mod_php sang ứng dụng FastCGI của nhà cung cấp hệ điều hành php an toàn hơn .
Nếu trong quá trình cài đặt plugin, Wordpress hỏi tên máy chủ hoặc chi tiết FTP của bạn. Sau đó làm theo các bước sau:
Đăng nhập vào máy chủ của bạn và điều hướng đến / var / www / html / wordpress / . Mở wp-config.php và thêm dòng này sau khi xác định ('DB_COLLATE')
define('FS_METHOD', 'direct');
Nếu bạn gặp lỗi "Không thể tạo thư mục". Cấp quyền ghi vào thư mục wordpress của bạn trong đệ quy dưới dạng
chmod -R go+w wordpress
GHI CHÚ. Để bảo mật, hãy thu hồi các quyền này sau khi bạn cài đặt một plugin dưới dạng
chmod -R go-w wordpress
Cách dễ nhất để giải quyết vấn đề này là thêm thông tin FTP sau vào 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 là đường dẫn đầy đủ đến thư mục "cơ sở" (ABSPATH) của cài đặt WordPress FTP_CONTENT_DIR là đường dẫn đầy đủ đến thư mục wp-content của cài đặt WordPress. FTP_PLUGIN_DIR là đường dẫn đầy đủ đến thư mục plugin của cài đặt WordPress.
Như đã đề cập bởi Niels, điều này xảy ra do người dùng quy trình máy chủ không thể ghi vào thư mục Wordpress.
Nhưng đây là điều mà nhiều bài báo không giải thích. Đó là chủ sở hữu của quy trình php, không phải quy trình nginx. Nếu bạn cố gắng thay đổi chủ sở hữu nginx, nó sẽ không giải quyết được điều này.
Để giải quyết nó, hãy thử chạy ps aux
để xem người dùng nào sở hữu quy trình php-fpm. Sau đó, kiểm tra xem người dùng đó có phải là người dùng giống như chủ sở hữu của thư mục wordpress hay ít nhất có thể ghi vào đó. Nếu người dùng không thể ghi vào nó, bạn sẽ cần thay đổi quyền và / hoặc quyền sở hữu thư mục; hoặc đặt hai người dùng (chủ sở hữu máy chủ và chủ sở hữu thư mục wordpress) vào một nhóm chung có thể ghi vào thư mục; hoặc thay đổi thuộc tính "người dùng" php.ini thành người dùng có thể ghi vào thư mục.
Có rất nhiều câu trả lời tương tự cho câu hỏi này, nhưng không câu trả lời nào trong số đó hoàn toàn giải đáp được nguyên nhân gốc rễ. Nhận xét của Sebastian Schmid về bài viết gốc chạm vào nó nhưng không đầy đủ. Đây là hoạt động của tôi kể từ ngày 11 tháng 11 năm 2018:
Nguyên nhân gốc rễ
Khi bạn cố gắng tải lên một plugin thông qua giao diện quản trị WordPress, WordPress sẽ thực hiện cuộc gọi đến một hàm có tên là "get_filesystem_method ()" (ref: /wp-admin/includes/file.php:1549 ). Quy trình này sẽ cố gắng ghi một tệp vào vị trí được đề cập (trong trường hợp này là thư mục plugin). Tất nhiên, nó có thể thất bại ngay lập tức nếu quyền đối với tệp không được thiết lập phù hợp để cho phép người dùng WordPress (nghĩ rằng danh tính người dùng thực thi php) ghi tệp vào vị trí được đề cập.
Nếu tệp có thể được tạo, hàm này sau đó sẽ phát hiện chủ sở hữu tệp của tệp tạm thời, cùng với chủ sở hữu tệp của tệp hiện tại của hàm (ref: /wp-admin/includes/file.php:1572 ) và so sánh hai. Nếu chúng khớp thì theo cách nói của WordPress, "WordPress đang tạo tệp với cùng một chủ sở hữu với tệp WordPress, điều này có nghĩa là có thể sửa đổi và tạo tệp mới thông qua PHP" và plugin của bạn được tải lên thành công mà không có lời nhắc FTP Credentials. Nếu chúng không khớp, bạn sẽ nhận được lời nhắc FTP Credentials.
Sửa lỗi
Đảm bảo danh tính đang chạy quy trình php của bạn là chủ sở hữu tệp cho một trong hai:
a) Tất cả các tệp ứng dụng WordPress, hoặc ...
b) Ít nhất là tệp /wp-admin/includes/file.php
Nhận xét cuối cùng
Tôi không quá quan tâm đến việc áp dụng cụ thể quyền sở hữu tệp cho file.php để giải quyết vấn đề này (ít nhất là cảm thấy hơi khó hiểu!). Đối với tôi tại thời điểm này, có vẻ như cơ sở mã WordPress đang nghiêng về việc chúng tôi thực thi quy trình PHP dưới cùng một người dùng chính như chủ sở hữu tệp cho các tệp ứng dụng WordPress. Tôi rất hoan nghênh một số ý kiến từ cộng đồng về điều này.