WordPress ขอข้อมูลรับรอง FTP ของฉันเพื่อติดตั้งปลั๊กอิน


118

ฉันติดตั้งบล็อก WordPress ในระบบภายในของฉัน แต่เมื่อฉันพยายามเพิ่มปลั๊กอินจากผู้ดูแลระบบมันขอการเข้าถึง FTP ฉันต้องกำหนดค่าอะไรเพื่อให้ WordPress สามารถอัปโหลดโดยไม่ใช้ FTP ได้

คำตอบ:


303

ลองเพิ่มโค้ดใน wp-config.php:

define('FS_METHOD', 'direct');

29
ฉันมักจะสะดุดกับคำตอบนี้ในขณะที่ googling ดังนั้นฉันจึงโพสต์ข้อความไว้ที่นี่สำหรับตัวเองและคนอื่น ๆ : Code อยู่ใน wp-admin / includes / file.php: get_filesystem_method Wordpress พยายามสร้างไฟล์ 'wp-content / temp-write-test -'. time () หากล้มเหลวถือว่าคุณสามารถใช้ FTP ได้เท่านั้น แต่สิ่งนี้อาจไม่เป็นความจริงหาก wp-content ไม่สามารถเขียนได้ แต่ตัวอย่างเช่น wp-content / plugins คือ จากนั้นบังคับให้ FS_METHOD ทำงาน
Sebastian Schmid

3
มันใช้งานได้ แต่ปัญหาตอนนี้คือหลังจากแกะแพ็คเกจแล้วข้อผิดพลาดแจ้งว่า: "ไม่สามารถสร้างไดเร็กทอรี"
Andrew

3
สิ่งนี้ช่วยฉันได้ แต่เพียงเพราะมันเปิดเผยข้อมูลเพิ่มเติมเกี่ยวกับความล้มเหลว ปัญหาหลักคือการมีสิทธิ์ในการเขียนสำหรับบัญชีผู้ใช้ที่ทำการอัปเดต สำหรับระบบทุกประเภทสิ่งนี้อาจแตกต่างกัน (สังเกตว่าคำตอบด้านล่างบอกให้คุณตั้งค่าสิทธิ์การเขียนสำหรับ daemon หรือ httpd หรือ apache ... ) มันช่วยให้ฉันเห็นตัวอย่าง PHP จากความคิดเห็นด้านล่าง (<? php echo (exec ("whoami")); ?>) เพื่อให้ฉันสามารถบอกได้ว่าผู้ใช้กำลังเรียกใช้การอัปเดตใด การเปลี่ยนแปลงที่แนะนำในที่นี้ดูเหมือนจะเป็นการระงับการท้าทายข้อมูลรับรอง FTP ดังนั้นฉันจึงเห็นข้อความแสดงข้อผิดพลาด
agentv

ฉันใช้ nginx ไม่ใช่ Apache มันค่อนข้างชัดเจนว่า PHP-FPM ไม่ใช้สิทธิการรวมกันผู้ใช้ / กลุ่ม (โดยใช้เคล็ดลับการอธิบายโดย @Aboozar Rajabi); อย่างไรก็ตามด้วยเหตุผลบางประการการตรวจสอบ WP ล้มเหลว (ไม่มีข้อผิดพลาดในบันทึก) การใช้การตั้งค่านี้ทำให้ฉันสามารถอัปเกรดเป็น 4.7 ได้อย่างไม่มีที่ติ!
Gwyneth Llewelyn

1
ฉันได้ทำ DevOps ในพื้นที่อื่น ๆ ก่อนที่จะ WordPress, เดาที่ดีที่สุดของฉันคือสั้นสำหรับFS_METHOD FILESYSTEM_METHODเมื่อคุณกำหนดdirectแก้ไขไฟล์ - หรือที่เรียกว่าไม่ใช้ FTP แสดงว่าคุณกำลังบังคับให้ WordPress ลองและแก้ไขไฟล์บนไซต์โดยตรง
Dylan Pierce

40

หากคุณใช้ Ubuntu

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

7
-1 ความคิดที่ไม่ดีในการทำสิ่งนี้ควรเป็นเจ้าของเนื้อหา wp เท่านั้นโดยwww-dataดูที่นี่: codex.wordpress.org/Hardening_WordPressหรือที่นี่: stackoverflow.com/questions/18352682/…
timhc22

คำตอบนี้ยังช่วยแก้ไขข้อผิดพลาด "การติดตั้งล้มเหลว: ไม่พบไดเร็กทอรีเนื้อหา WordPress (wp-content)" เมื่อพยายามติดตั้งปลั๊กอินจากแดชบอร์ด
WindChimes

25

"เมื่อใดก็ตามที่คุณใช้แผงควบคุมของ WordPress เพื่อติดตั้งอัปเกรดหรือลบปลั๊กอินโดยอัตโนมัติ WordPress จะต้องทำการเปลี่ยนแปลงไฟล์ในระบบไฟล์

ก่อนทำการเปลี่ยนแปลงใด ๆ WordPress จะตรวจสอบก่อนว่ามีการเข้าถึงเพื่อจัดการระบบไฟล์โดยตรงหรือไม่

หาก WordPress ไม่มีสิทธิ์ที่จำเป็นในการแก้ไขระบบไฟล์โดยตรงคุณจะถูกขอข้อมูลรับรอง FTP เพื่อให้ WordPress สามารถลองทำสิ่งที่ต้องการผ่าน FTP ได้ "

วิธีแก้ไข: หากต้องการทราบว่าผู้ใช้อินสแตนซ์ apache ของคุณใช้งานเป็นอย่างไรให้สร้างสคริปต์ทดสอบที่มีเนื้อหาต่อไปนี้:

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

สำหรับฉันมันเป็น daemon ไม่ใช่ www-data จากนั้นแก้ไขการอนุญาตโดย:

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

3
อย่าลืมปิดการใช้งาน exec () หรือฟังก์ชันที่ละเอียดอ่อนที่คล้ายกัน ในการผลิต
Arda

2
ยังดีกว่าคือการใช้<?php echo(exec("id")); ?>ซึ่งจะให้ข้อมูลกลุ่มนอกเหนือจากรหัสผู้ใช้:uid=5018(web27) gid=5012(client7) groups=5012(client7),5002(sshusers)
Gwyneth Llewelyn

หากคุณสามารถ sudo และ chown ได้คุณสามารถพิมพ์ได้whoamiดังนั้นดูข้อมูลเดียวกัน:sudo chown -R `whoami` /path/to/your/local/www/folder
Benji

11

บน OSX ฉันใช้สิ่งต่อไปนี้และใช้งานได้:

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

_www คือผู้ใช้ที่ PHP ทำงานภายใต้เครื่อง Mac

(คุณอาจต้อง chmod บางโฟลเดอร์ด้วยฉันทำก่อนแล้ว แต่ก็ไม่ได้แก้ไขมันยังไม่ได้จนกว่าฉันจะใช้คำสั่ง chown จึงใช้ได้ดังนั้นฉันไม่แน่ใจว่ามันเป็นคำสั่ง chown หรือไม่ คนเดียวหรือรวมกันของ chmod และ chown)


9

ฉันเปลี่ยนความเป็นเจ้าของโฟลเดอร์ wordpress เป็น www-data แบบเรียกซ้ำและรีสตาร์ท apache

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

มันใช้งานได้อย่างมีเสน่ห์!


นี่เป็นคำตอบที่ถูกต้องสำหรับคนส่วนใหญ่ ฉันคิดว่านี่เป็นครั้งที่สามที่ฉันสร้างโฟลเดอร์และลืมที่จะเปิด
MrMysterious2502

7

จากการเข้าชมครั้งแรกใน Google :

WordPress ขอข้อมูลรับรอง FTP ของคุณเมื่อไม่สามารถเข้าถึงไฟล์ได้โดยตรง ซึ่งมักเกิดจาก PHP ทำงานในฐานะผู้ใช้ apache (mod_php หรือ CGI) แทนที่จะเป็นผู้ใช้ที่เป็นเจ้าของไฟล์ WordPress ของคุณ

นี้ค่อนข้างปกติในส่วนที่ใช้ร่วมกันในสภาพแวดล้อมที่โฮสติ้ง - ไฟล์จะถูกเก็บไว้เป็นผู้ใช้และ Apache ทำงานเป็นผู้ใช้หรือapache httpdนี่เป็นข้อควรระวังด้านความปลอดภัยที่ดีดังนั้นการใช้ประโยชน์และการแฮ็กจึงไม่สามารถแก้ไขไฟล์ที่โฮสต์ได้ คุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยตั้งค่าไฟล์ WP ทั้งหมดเป็น 777 ความปลอดภัย แต่นั่นหมายความว่าไม่มีความปลอดภัยดังนั้นฉันขอแนะนำอย่างยิ่ง เพียงใช้ FTP ซึ่งเป็นวิธีแก้ปัญหาที่แนะนำโดยอัตโนมัติพร้อมเหตุผลที่ดี


ขอบคุณสำหรับคำอธิบาย มีวิธีกำหนดค่าเซิร์ฟเวอร์ที่ใช้ร่วมกันเพื่อเรียกใช้ PHP ในฐานะผู้ใช้ที่ถูกต้องหรือแก้ไขเจ้าของหรือวิธีอื่นหรือไม่?
Maxwell sc

5

หากในระหว่างการติดตั้งปลั๊กอิน Wordpress จะขอชื่อโฮสต์หรือรายละเอียด FTP ของคุณ จากนั้นทำตามขั้นตอนเหล่านี้:

เข้าสู่ระบบไปยังเซิร์ฟเวอร์ของคุณและนำทางไปยัง/ var / www / html / WordPress / เปิด wp-config.php และเพิ่มบรรทัดนี้หลังจากกำหนด ('DB_COLLATE')

define('FS_METHOD', 'direct');

หากคุณได้รับข้อผิดพลาด "ไม่สามารถสร้างไดเรกทอรี" ให้สิทธิ์การเขียนไปยังไดเร็กทอรี wordpress ของคุณแบบเรียกซ้ำเป็น

chmod -R go+w wordpress

บันทึก. เพื่อความปลอดภัยให้เพิกถอนสิทธิ์เหล่านี้เมื่อคุณติดตั้งปลั๊กอินเป็น

chmod -R go-w wordpress

4

ก่อนอื่นให้ย้ายไปที่โฟลเดอร์การติดตั้งของคุณ (เช่น)

cd /Applications/XAMPP/xamppfiles/

ตอนนี้เรากำลังจะแก้ไขไดเรกทอรี htdocs ของคุณ:

sudo chown -R daemon htdocs

ป้อนรหัสผ่านรูทของคุณเมื่อได้รับแจ้งจากนั้นจบด้วยการโทร chmod:

sudo chmod -R g+w htdocs

4

ฉันติดตั้ง WordPress ในเครื่องบน Ubuntu 14.04 ตามขั้นตอนที่ระบุไว้ที่นี่และเรียกใช้:

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

แก้ไขปัญหาของฉันเกี่ยวกับการดาวน์โหลดปลั๊กอิน เหตุผลเดียวที่ฉันออกจากโพสต์นี้เพราะเมื่อฉัน googled ปัญหาของฉันนี่เป็นหนึ่งในผลลัพธ์แรกและนำฉันไปสู่การแก้ปัญหาของฉัน

หวังว่าสิ่งนี้จะช่วยให้ทุกคน!


3

เรามีปัญหาเดียวกันซึ่งเป็นส่วนหนึ่งของปัญหาที่ใหญ่กว่า วิธีแก้ปัญหาที่แนะนำของ

define('FS_METHOD', 'direct');

หนังที่หน้าต่าง แต่เราก็ยังคงมีปัญหาเกี่ยวกับรูปแบบการโหลดและการอัพเกรดอื่น ๆ มันจะเกี่ยวข้องกับสิทธิ์ แต่ในกรณีที่เราได้รับการแก้ไขปัญหาโดยการย้ายจากPHP OS mod_php ผู้ขายเพื่อความปลอดภัยมากขึ้นPHP OS แอพลิเคชันของผู้ขาย


2

วิธีที่ง่ายที่สุดในการแก้ปัญหานี้คือเพิ่มข้อมูล 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เป็นเส้นทางแบบเต็มไปยังโฟลเดอร์ "ฐาน" (ABSPATH) ของการติดตั้ง WordPress FTP_CONTENT_DIRคือเส้นทางแบบเต็มไปยังโฟลเดอร์เนื้อหา wp ของการติดตั้ง WordPress FTP_PLUGIN_DIRคือเส้นทางแบบเต็มไปยังโฟลเดอร์ปลั๊กอินของการติดตั้ง WordPress


FTP ไม่ปลอดภัยและด้วยเหตุนี้เราจึงปิดการใช้งานดังนั้นจึงไม่ใช่วิธีแก้ปัญหา เราใช้ SFTP แทน
Laurence Cope

1

ตามที่ Niels กล่าวไว้สิ่งนี้เกิดขึ้นเนื่องจากผู้ใช้กระบวนการเซิร์ฟเวอร์ไม่สามารถเขียนลงในโฟลเดอร์ Wordpress

แต่นี่คือสิ่งที่หลายบทความไม่ได้อธิบาย เป็นเจ้าของกระบวนการ php ไม่ใช่กระบวนการ nginx หากคุณพยายามเปลี่ยนเจ้าของ nginx มันจะไม่แก้ปัญหานี้

ในการแก้ปัญหาให้ลองเรียกใช้ps auxเพื่อดูว่าผู้ใช้รายใดเป็นเจ้าของกระบวนการ php-fpm จากนั้นตรวจสอบว่าผู้ใช้เป็นผู้ใช้เดียวกับเจ้าของโฟลเดอร์ wordpress หรืออย่างน้อยก็สามารถเขียนลงไปได้ หากผู้ใช้ไม่สามารถเขียนได้คุณจะต้องเปลี่ยนสิทธิ์และ / หรือความเป็นเจ้าของโฟลเดอร์ หรือใส่ผู้ใช้สองคน (เจ้าของเซิร์ฟเวอร์และเจ้าของโฟลเดอร์ wordpress) ในกลุ่มทั่วไปซึ่งสามารถเขียนลงในโฟลเดอร์ได้ หรือเปลี่ยนคุณสมบัติ php.ini "ผู้ใช้" เป็นผู้ใช้ที่สามารถเขียนลงในโฟลเดอร์


1

มีคำตอบที่คล้ายกันมากมายสำหรับคำถามนี้ แต่ไม่มีคำตอบใดที่ตรงกับสาเหตุที่แท้จริง ความคิดเห็นของ Sebastian Schmidในโพสต์ต้นฉบับสัมผัสได้ แต่ไม่เต็มที่ นี่คือสิ่งที่ฉันใช้ในวันที่ 2018-11-06:

สาเหตุที่แท้จริง

เมื่อคุณพยายามอัปโหลดปลั๊กอินผ่านอินเทอร์เฟซผู้ดูแลระบบของ WordPress WordPress จะเรียกใช้ฟังก์ชันที่เรียกว่า "get_filesystem_method ()" (ref: /wp-admin/includes/file.php:1549 ) รูทีนนี้จะพยายามเขียนไฟล์ไปยังตำแหน่งที่ต้องการ (ในกรณีนี้คือไดเร็กทอรีปลั๊กอิน) แน่นอนว่าอาจล้มเหลวที่นี่ทันทีหากการอนุญาตไฟล์ไม่ได้รับการตั้งค่าอย่างถูกต้องเพื่ออนุญาตให้ผู้ใช้ WordPress (คิดว่าข้อมูลประจำตัวของผู้ใช้เรียกใช้ php) เขียนไฟล์ไปยังตำแหน่งที่เป็นปัญหา

หากสามารถสร้างไฟล์ได้ฟังก์ชันนี้จะตรวจจับเจ้าของไฟล์ของไฟล์ชั่วคราวพร้อมกับเจ้าของไฟล์ของไฟล์ปัจจุบันของฟังก์ชัน (อ้างอิง: /wp-admin/includes/file.php:1572 ) และเปรียบเทียบทั้งสอง หากตรงตามนั้นในคำพูดของ WordPress "WordPress กำลังสร้างไฟล์เป็นเจ้าของเดียวกับไฟล์ WordPress นั่นหมายความว่าการแก้ไขและสร้างไฟล์ใหม่ผ่าน PHP ได้อย่างปลอดภัย" และปลั๊กอินของคุณจะอัปโหลดได้สำเร็จโดยไม่ต้องแจ้งข้อมูลรับรอง FTP หากไม่ตรงกันคุณจะได้รับพรอมต์ข้อมูลรับรอง FTP

การแก้ไข

  1. ตรวจสอบให้แน่ใจว่าไดเร็กทอรีปลั๊กอินสามารถเขียนได้โดย identity ที่รันกระบวนการ php ของคุณ
  2. ตรวจสอบให้แน่ใจว่าข้อมูลประจำตัวที่รันกระบวนการ php ของคุณเป็นเจ้าของไฟล์สำหรับ:

    a) ไฟล์แอปพลิเคชัน WordPress ทั้งหมดหรือ ...
    b) อย่างน้อยที่สุดไฟล์ /wp-admin/includes/file.php

ความคิดเห็นสุดท้าย

ฉันไม่กระตือรือร้นที่จะใช้การเป็นเจ้าของไฟล์โดยเฉพาะกับ file.php เพื่อแก้ไขปัญหานี้ (รู้สึกว่าเป็นการแฮ็คเล็กน้อยที่จะพูดน้อยที่สุด!) สำหรับฉันแล้วในตอนนี้ฐานรหัส WordPress มีแนวโน้มที่จะให้เราดำเนินการกระบวนการ PHP ภายใต้ผู้ใช้หลักเดียวกับเจ้าของไฟล์สำหรับไฟล์แอปพลิเคชัน WordPress ฉันยินดีรับฟังความคิดเห็นจากชุมชนเกี่ยวกับเรื่องนี้


1

ฉันประสบปัญหาเดียวกัน! ฉันได้เพิ่มโค้ดด้านล่างในไฟล์ wp-config.php แล้ว (ในบรรทัดใดก็ได้) และใช้งานได้แล้ว!

define('FS_METHOD', 'direct');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.