การกำหนดค่าไดเรกทอรีชั่วคราว


48

ฉันเพิ่งย้ายไซต์จาก localhost ไปเป็น VPS ฉันจัดการเพื่อให้ไฟล์สาธารณะและส่วนตัวเขียนได้; อย่างไรก็ตามฉันไม่แน่ใจว่าจะหาโฟลเดอร์ชั่วคราวได้อย่างไรและจะเปลี่ยนสิทธิ์อย่างไร ฉันได้รับข้อความนี้:

ไฟล์ที่ระบุชั่วคราว: // file3Hl91E ไม่สามารถคัดลอกได้เนื่องจากไดเรกทอรีปลายทางไม่ได้รับการกำหนดค่าอย่างเหมาะสม ปัญหานี้อาจเกิดจากปัญหาเกี่ยวกับการอนุญาตของไฟล์หรือไดเรกทอรี ข้อมูลเพิ่มเติมมีอยู่ในบันทึกของระบบ

ฉันใช้ Virtualmin, Drupal 7 และเซิร์ฟเวอร์ Debian /tmpไดเรกทอรีชั่วคราวของฉันปัจจุบันคือ

คำตอบ:


46

ตรวจสอบผู้ดูแลระบบ -> การกำหนดค่า -> สื่อ -> ระบบไฟล์เพื่อปรับเปลี่ยนพา ธ tmp ของคุณ ตรวจสอบให้แน่ใจว่าใช้เส้นทางสัมพัทธ์และมีสิทธิ์ที่ถูกต้องสำหรับผู้ใช้ Apache

ผมเองชอบบทความนี้อัปโหลดไฟล์แก้ไข เขามีข้อสังเกตที่ดี มันใช้งานได้สำหรับฉัน

เมื่อเร็ว ๆ นี้ฉันดาวน์โหลดเว็บไซต์ของฉันไปยังคอมพิวเตอร์ Mac ของฉัน มันเกิดขึ้นว่าใน Mac ของฉันฉันใช้mod_userdirสำหรับ Apache และฉันลืมไปว่า/etc/apache2/users/nameofuser.confฉันต้องตั้งค่าAllowOverride Allมิฉะนั้นฉันจะมีข้อความต่อไปนี้:

ไม่สามารถคัดลอกไฟล์ที่ระบุชั่วคราวได้เนื่องจากไดเรกทอรีปลายทางไม่ได้รับการกำหนดค่าอย่างเหมาะสม


ลิงค์รวมลง
pal4life

ลิงค์กลับมาแล้ว !! ผู้เขียนกรุณานำกลับเว็บไซต์!
cayerdis

2
มันเป็นการดีที่จะเพิ่มการสังเคราะห์ของ "การสังเกต" เหล่านี้ในคำตอบ
fifi การเงิน

4
ลิงก์ไม่ทำงานอีกครั้ง
Kari Kääriäinen


17

ใน settings.php ของคุณ

$conf['file_temporary_path'] = '/tmp';

สิ่งนี้จะทำงานบนระบบยูนิกซ์ 99% ของเวลา

โดยปกติแล้วไดเร็กทอรี / tmp จะมีอยู่บนระบบ UNIX ที่มีสิทธิ์เปิดและมีอยู่เป็นพิเศษสำหรับไฟล์ชั่วคราวและมักจะถูกตั้งค่าเพื่อปรับปรุงประสิทธิภาพ

คุณสามารถตรวจสอบการอนุญาตด้วยการรันls -al /tmpบนบรรทัดคำสั่ง

หากคุณสนใจที่จะอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้โปรดดูที่https://en.wikipedia.org/wiki/Temporary_folder


1
นี่ไม่ใช่คำตอบที่ดีในความคิดของฉัน ไม่มีคำอธิบายและมีแนวโน้มที่จะไม่ทำงานหาก/tmpไม่มีสิทธิ์ที่ถูกต้อง มันขัดแย้งกับคำตอบที่ยอมรับได้ (ซึ่งก็ไม่ได้ยอดเยี่ยมเหมือนกัน)
fifi การเงิน

ฉันไม่คิดว่าคำตอบนั้นต้องการคำอธิบายมากมายฉันพูดได้ว่า $ conf variable ทำงานอย่างไรใน settings.php เป็นความรู้ทั่วไปสำหรับนักพัฒนา Drupal หนึ่งในสิ่งที่ดีเกี่ยวกับคำตอบนี้คือมันกระชับ ฉันไม่แน่ใจว่ามันขัดแย้งกับคำตอบที่ยอมรับหรือไม่คำตอบที่ยอมรับจะใช้ได้และนี่เป็นทางเลือก ความแตกต่างระหว่างวิธีนี้และการทำผ่าน UI คือวิธีนี้จะใช้ได้กับหลาย ๆ สภาพแวดล้อม แต่คุณจะต้องตั้งค่าเป็นรายบุคคลใน UI สำหรับแต่ละสภาพแวดล้อม
chim

16

สิ่งสำคัญคือต้องเข้าใจว่าปัญหาสิทธิ์อาจมีอยู่ในทั้งไดเรกทอรีชั่วคราวที่คุณระบุ (ซึ่งกำหนดไว้ที่ admin / config / media / file-system) และที่โฟลเดอร์ที่ไฟล์ชั่วคราวนั้นจะถูกคัดลอก ฉันเห็นข้อผิดพลาดนี้สองสามครั้งและมักจะไม่เกิดปัญหากับโฟลเดอร์ชั่วคราว แต่เป็นโฟลเดอร์สุดท้ายที่คัดลอกไฟล์นั้นหลังจากอยู่ในโฟลเดอร์ชั่วคราว

ตรวจสอบให้แน่ใจว่าพา ธ ระบบไฟล์สาธารณะถูกตั้งค่าอย่างถูกต้อง


1
นี่เป็นกรณีสำหรับฉัน ในกรณีของฉันฉันจำเป็นต้องตั้งค่าความเป็นเจ้าของของไดเรกทอรีที่สร้างขึ้นใหม่ / sites / default / ไฟล์เป็น USERNAME: apache (ในบางระบบที่กลุ่มนั้นจะเรียกว่าไม่มีใคร)
Evan Donovan

8

ฉันมีปัญหานี้แน่นอนและทำให้แน่ใจว่าใช้เส้นทางสัมพัทธ์ (ไซต์ / ค่าเริ่มต้น / ไฟล์ / tmp) สำหรับตำแหน่งโฟลเดอร์ tmp ตามที่แนะนำและฉันยังเปลี่ยนสิทธิ์ในโฟลเดอร์ tmp เพื่อให้แน่ใจว่ามันเขียนได้โดย apache แต่ปัญหาของฉันยังคงมีอยู่ . ดังนั้นฉันตัดสินใจที่จะตรวจสอบข้อความบันทึก (รายงาน >> ข้อความบันทึกล่าสุด) เพื่อดูว่าฉันสามารถทำความเข้าใจปัญหาที่เกิดขึ้นได้ดีขึ้นหรือไม่ ด้วยการทำเช่นนี้ฉันได้รับข้อความเฉพาะเพิ่มเติม:

ไม่สามารถตั้งค่าการอนุญาตไฟล์ในที่สาธารณะ: // js

นี้แจ้งให้ฉันตรวจสอบสิทธิ์ในโฟลเดอร์ js ในเว็บไซต์ / default / ไฟล์และปรากฎว่า Apache ไม่สามารถเขียนได้ดังนั้นโดยการเปลี่ยนสิทธิ์เป็น 775 ในโฟลเดอร์นั้นฉันได้ลบข้อความผิดพลาดของฉัน ดังนั้นฉันขอแนะนำให้คุณตรวจสอบการอนุญาตสำหรับโฟลเดอร์ย่อยทั้งหมดในไซต์ / default / files และไม่เพียง แต่โฟลเดอร์ tmp หากคุณยังไม่ได้แก้ปัญหาของคุณในขณะนี้ แค่คิดว่าฉันจะแบ่งปันข้อมูลนี้


ปัญหาของฉันเหมือนกัน แต่ฉันใช้สิ่งต่อไปนี้เพื่อแก้ไข: sudo chgrp -R www-data / var / www / mysite
Wavesailor

สมมติว่าคุณกำลังรวมsudo chgrp -R www-data /var/www/mysiteกับ"การเปลี่ยนแปลงสิทธิ์ไป 775" นี้จะไม่จำเป็น Drupal ไม่จำเป็นต้องเขียนไปยังทุก ๆโฟลเดอร์ เฉพาะโฟลเดอร์ไฟล์สาธารณะไฟล์ส่วนตัวและ tmp ของคุณ
rovr138

ใช่ - สิ่งสำคัญที่นี่ซึ่งไม่มีคำตอบอื่น ๆ ที่กล่าวถึงคือการค้นหาไดเรกทอรีปลายทาง (โดยทั่วไปอยู่ภายใต้ไซต์ / ค่าเริ่มต้น / ไฟล์ - / css และ / js เป็นตัวเลือกอันดับต้นหากคุณเปิดการเชื่อมต่อ JS / CSS) และคุณสามารถ รับโดยการดูบันทึกเท่านั้น
William Turrell

… * อย่างไรก็ตาม * - ป้ายกำกับบนแบบฟอร์มผู้ดูแลระบบบอกว่า "ไดเรกทอรีนี้ไม่ควรเข้าถึงได้ผ่านเว็บ" ดังนั้นหากคุณไม่ได้ทำตามขั้นตอนเพื่อป้องกัน / sites / default / files / tmp ใน Apache หรือ Nginx ให้วางไว้ มีความคิดที่ไม่ดี
William Turrell

5

คุณสามารถค้นหาการตั้งค่าระบบไฟล์เพื่อadmin/config/media/file-system เปลี่ยนเป็น / tmp

นอกจากนี้คุณสามารถตรวจสอบผู้ดูแลระบบ / รายงาน / สถานะสำหรับปัญหาการตั้งค่าใด ๆ

เกี่ยวกับ / tmp การอนุญาตคุณสามารถให้ 755 และคุณจะพบมันใน / public_html


2

ข้อความแสดงข้อผิดพลาดบางครั้งอาจทำให้เข้าใจผิด

ถ้ามันบอกว่าปัญหาจะทำอย่างไรกับไดเรกทอรีปลายทาง apache อาจไม่มีสิทธิ์ในการเขียนไปยังโฟลเดอร์ย่อย / sites / default / ไฟล์ที่ Drupal ต้องการทีโอทีจะวางไฟล์ลงไป

ทางออกที่ดีคือทำให้ผู้ใช้ apache เป็นเจ้าของไฟล์และไดเรกทอรีทั้งหมดภายใต้ sites / default / files

cd /path/to/sites/default
sudo chown -R _www:_www files

หรือสิ่งที่คล้ายกันควรแก้ไขปัญหาไดเรกทอรีปลายทาง ตรวจสอบอีกครั้งว่าเจ้าของมีสิทธิ์ในการเขียนและดำเนินการในไดเรกทอรีย่อยทั้งหมด


1
วิธีแก้ปัญหานี้ช่วยให้วันของฉันฉันทำงานบน Ubuntu 14.014 และทำสิ่งนี้chown -R www-data:www-data /var/www/html/sites/default/files/
Rishi Kulshreshtha

2

ไดเร็กทอรีไฟล์: การแก้ไขปัญหาเว็บเซิร์ฟเวอร์ที่ใช้ Apache

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

เป็นการดีที่คุณจะสามารถเปลี่ยน "เจ้าของ" ของไฟล์ไดเรกทอรีให้ตรงกับชื่อของเว็บเซิร์ฟเวอร์ บนเซิร์ฟเวอร์ที่ใช้ Unix หรือ Linux คุณสามารถตรวจสอบ "ใคร" เว็บเซิร์ฟเวอร์กำลังทำงานโดยออกคำสั่งต่อไปนี้:

$ ps aux  |grep apache # for Apache 2.x
$ ps aux  |grep httpd # for Apache 1.x

หนึ่งในคำสั่งเหล่านี้จะคืนค่าชุดของบรรทัดดังนี้:

www-data 13612  0.1  0.9  50640 20340 ? S 12:29   0:08 /usr/sbin/apache2 -k start

คอลัมน์แรกในข้อความที่ส่งคืนคือ "ผู้ใช้" ที่เว็บเซิร์ฟเวอร์ของคุณใช้งาน ในกรณีนี้ผู้ใช้คือ www-data ในการทำให้ไดเร็กทอรีไฟล์ของคุณสามารถเขียนได้โดยเว็บเซิร์ฟเวอร์คุณต้องกำหนดความเป็นเจ้าของใหม่โดยใช้คำสั่งต่อไปนี้:

$ chown -R www-data sites/default/files
$ chmod -R 0700 sites/default/files

หากคุณไม่มีสิทธิ์เพียงพอบนเซิร์ฟเวอร์ของคุณในการเปลี่ยนความเป็นเจ้าของโฟลเดอร์ตัวเลือกที่ดีที่สุดถัดไปคือการให้การเข้าถึงการเขียนแบบกลุ่มไปยังโฟลเดอร์ด้วยคำสั่งต่อไปนี้:

$ chmod -R 0770 sites/default/files

คุณควรจะสามารถปรับเปลี่ยนการอนุญาตของไดเรกทอรีโดยใช้โปรแกรม FTP ตามที่อธิบายไว้ข้างต้น

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

แหล่งที่มา: ไดเรกทอรีไฟล์


1

แหล่งที่มาของข้อผิดพลาดก็คือไม่สามารถเขียนไปยังโฟลเดอร์ไฟล์ ในกรณีของฉันฉันแก้ไขมันโดยใช้:

$chmod 777 sites/default/files/pictures/

15
หือจริงเหรอ 777 บนเว็บไซต์ผลิตมีอะไรชัดเจน? นั่นเป็นเพียงคำแนะนำที่ไม่รับผิดชอบ
เดวิดสเตอร์

ใช่ให้อย่างน้อย 755
user1359

@DavidMeister ฉันอัปโหลดคุณ แต่น่าเสียดายที่โฮสติ้งที่ใช้ร่วมกัน (อาเจียน) บางครั้ง 777 เป็นวิธีเดียวที่ Apache สามารถเขียนไปยังโฟลเดอร์

@ andrewtweber คุณแน่ใจเกี่ยวกับเรื่องนี้หรือไม่? แม้ในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกัน 775 ควรจะหลวมเท่าที่คุณต้องการ คุณช่วยยกตัวอย่างผู้ให้บริการโฮสต์ที่ใช้ร่วมกันที่ต้องใช้ 777 ได้หรือไม่ หากคุณใช้ 777 บนเซิร์ฟเวอร์ที่ใช้ร่วมกันและคุณไม่มี VPS ทุกคนบนเซิร์ฟเวอร์สามารถเข้าถึงไฟล์ของคุณได้
David Meister

3
@andrewtweber ยังใช่บทเรียนไม่ใช่ว่า "โฮสติ้งที่ใช้ร่วมกัน" ต้องใช้ 777 แต่ "โฮสติ้งที่น่ากลัว" ต้องใช้ 777
David Meister

1

ในบางสถานการณ์สามารถแก้ไขได้อย่างง่ายดายโดยการลบโฟลเดอร์ 'ctools' และ 'js' ภายในค่าเริ่มต้น / ไฟล์ ระบบจะสร้างโฟลเดอร์เหล่านี้ใหม่หากจำเป็น บางครั้งเมื่อทำการติดตั้งใหม่ของเว็บไซต์ที่มีอยู่โฟลเดอร์เหล่านี้มีอยู่แล้วทำให้เกิดปัญหา นอกจากนี้หาก CSS ของคุณไม่ทำงานหลังจากทำการติดตั้งไซต์ใหม่ที่มีอยู่สิ่งนี้สามารถแก้ไขได้โดยการลบไฟล์เหล่านี้และปล่อยให้ drupal สร้างมันขึ้นมาใหม่


0

การกำหนดค่าเก่าและมีปัญหาของฉัน

chmod 664 -R /var/drupal-bc/sites/default/files
chmod 664 -R /var/drupal-bc/sites/default/private

drw-rw-r-- 2 www-data www-data  4096 Jul 31 12:35 files
drw-rw-r-- 3 www-data www-data  4096 Jul  5 15:08 private

ใหม่และการกำหนดค่าการทำงานที่ดีของฉัน

chmod 774 -R /var/drupal-bc/sites/default/files
chmod 774 -R /var/drupal-bc/sites/default/private

drwxrwxr-- 2 www-data www-data  4096 Jul 31 12:35 files
drwxrwxr-- 3 www-data www-data  4096 Jul  5 15:08 private

ใช่จำเป็นต้องเรียกใช้งานบนโฟลเดอร์เพื่อให้สามารถใช้งานได้ 775 น่าจะเหมาะสมกว่า 774 ในกรณีของคุณด้วยวิธีการตั้งค่าความเป็นเจ้าของของคุณ 755 ก็เป็นตัวเลือกที่ดีเช่นกัน
rooby

0

สิทธิ์ที่ถูกต้องสำหรับโฟลเดอร์ชั่วคราวขึ้นอยู่กับการกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณ

หากรัน Drupal ด้วย PHP เป็นโมดูลของเว็บเซิร์ฟเวอร์เช่น Apache เมื่อผู้ใช้ที่กำหนดไว้ในไฟล์กำหนดค่าเว็บเซิร์ฟเวอร์หลักโดยใช้คำสั่งผู้ใช้ควรมีการเขียน acccess

% grep -i "ผู้ใช้" /etc/httpd/conf/httpd.conf

ผู้ใช้ Apache


0

ฉันมีปัญหาเดียวกันนี้หลังจากย้ายจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น

ฉันลองทุกอย่างที่แนะนำที่นี่ตั้งค่าโฟลเดอร์เป็น 755 เป็นต้น

โฟลเดอร์ชั่วคราวของฉันถูกตั้งค่าเป็น "" tmp7zXhVVCO "และมันได้ทำการคัดลอกไฟล์การติดตั้งอย่างดีหลังจากลองใหม่ทุกครั้งฉันเห็นไฟล์ temp ถูกคัดลอกที่นั่น แต่การติดตั้งยังคงล้มเหลว

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

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


เมื่อฉันทำสิ่งนี้ฉันได้รับข้อผิดพลาดThe directory ../temp2 does not exist and could not be created.
Paul Trotter

0

ฉันไม่ชอบคำตอบใด ๆ ที่มีอยู่ดังนั้นฉันจะเริ่มด้วยตัวเองซึ่งอาจจะอัปเดตตลอดเวลา ส่วนใหญ่มีคำสั่งเชลล์

สำหรับตอนนี้เรียกใช้จากsites/example.com:

MYSITE=example.com
FILES=sites/$MYSITE/files  
# CSS and JS might also cause trouble and advagg has its own dirs
TMPDIRS=$FILES/tmp $FILES/js $FILES/css $FILES/advagg_*
drush vset file_temporary_path $FILES/tmp # seems better than using /tmp
drush vset file_directory_temp $FILES/tmp
cd $(drush drupal-directory)   
chown www-data -R $TMPDIRS
chmod 755 -R $TMPDIRS

0

จากการกำหนดค่า -> สื่อ -> ระบบไฟล์ฉันลบรายการ / temp-catalog หลังจากนั้นฉันก็ไม่มีปัญหาอะไร


0

ฉันมีปัญหาแบบเดียวกันกับการย้ายข้อมูล ฉันมี chmod 777 ทุกไซต์ / default / files แต่ข้อผิดพลาดยังคงเกิดขึ้น ฉันเปลี่ยนการอนุญาต 775 ในเว็บไซต์ / ค่าเริ่มต้น / ไฟล์และข้อความหายไป ฉันไม่ได้เป็นเส้นทางส่วนตัวปัญหาของฉันคือ / var / tmp แต่ได้รับอนุญาต 775


0

หากคุณพบปัญหานี้โดยใช้ Pantheon และรับข้อผิดพลาดหลังจากตั้งค่าเส้นทางไดเรกทอรีไฟล์ (ชั่วคราว) คุณอาจต้องสลับโหมดการเชื่อมต่อบนแดชบอร์ดอินสแตนซ์ dev ของคุณจาก Git เป็น SFTP

ไซต์ Drupal ของคุณอาจพยายามบันทึกไฟล์ไปยังไดเรกทอรีที่จัดการโดย Git (เช่นหากคุณกำลังเปลี่ยนการตั้งค่าเค้าโครงและสิ่งที่คล้ายกันในธีม Adaptive Themes) ในการดำเนินการดังกล่าวให้เปลี่ยนเป็น SFTP เมื่อบันทึกไฟล์แล้วคุณสามารถเปลี่ยนกลับเป็น Git ได้และแผงควบคุมจะแจ้งให้คุณยอมรับการเปลี่ยนแปลงที่เกิดขึ้นบนเซิร์ฟเวอร์


0

ฉันมีปัญหาเดียวกัน.

ฉันใช้ IIS ใน Windows ในที่สุดปัญหาก็คือการอนุญาตในไซต์โฟลเดอร์ / default / files และเห็นได้ชัดว่าใน sites / default / files / tmp

ในที่สุดฉันก็ให้ "สิทธิ์เต็มที่" กับโฟลเดอร์อีกครั้งและมันก็ใช้งานได้

ความนับถือ

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