Mengkonfigurasi direktori sementara

48

Saya baru-baru ini memindahkan situs dari localhost ke VPS. Saya telah berhasil membuat file publik dan pribadi dapat ditulis; Namun, saya tidak yakin di mana menemukan folder sementara dan bagaimana cara mengubah izin. Saya terus menerima pesan ini:

File yang ditentukan sementara: // file3Hl91E tidak dapat disalin, karena direktori tujuan tidak dikonfigurasi dengan benar. Ini mungkin disebabkan oleh masalah dengan izin file atau direktori. Informasi lebih lanjut tersedia di log sistem.

Saya menggunakan Virtualmin, Drupal 7, dan server Debian. Direktori sementara saya saat ini adalah /tmp.

Jasmine Ahmed
sumber

Jawaban:

46

Periksa Administrator -> Konfigurasi -> Media -> Sistem File untuk mempersonalisasi jalur tmp Anda. Pastikan untuk menggunakan jalur relatif dan memiliki hak istimewa yang tepat untuk pengguna Apache.

Saya pribadi suka artikel ini memperbaiki unggahan file . Dia memiliki pengamatan yang baik. Itu berhasil untuk saya.

Baru-baru ini, saya mengunduh situs saya ke komputer Mac saya. Kebetulan di Mac saya saya gunakan mod_userdiruntuk Apache dan saya lupa bahwa di /etc/apache2/users/nameofuser.confsaya perlu mengatur AllowOverride All, kalau tidak saya akan memiliki pesan berikut:

File yang ditentukan sementara tidak dapat disalin karena direktori tujuan tidak dikonfigurasi dengan benar.

cayerdis
sumber
Tautan yang disertakan rusak
pal4life
tautan kembali !! penulis dengan ramah mengembalikan situs tersebut!
cayerdis
2
Lebih baik menambahkan sintesis "pengamatan" ini dalam jawabannya.
Keuangan fifi
4
Tautan down lagi.
Kari Kääriäinen
17

Di settings.php Anda

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

Ini akan bekerja pada sistem unix 99% dari waktu.

Biasanya direktori / tmp ada pada sistem UNIX dengan izin terbuka, dan itu ada khusus untuk file sementara dan sering diatur untuk meningkatkan kinerja.

Anda dapat memeriksa izin dengan menjalankan ls -al /tmpdi baris perintah.

Jika Anda tertarik membaca lebih lanjut tentang ini, lihat https://en.wikipedia.org/wiki/Tentara_folder

chim
sumber
1
Ini sebenarnya bukan jawaban yang bagus menurut saya. Tidak ada penjelasan dan kemungkinan tidak akan berfungsi jika /tmptidak memiliki izin yang tepat. Ia bahkan bertentangan dengan jawaban yang diterima (yang juga tidak bagus untuk jawabannya).
Keuangan fifi
Saya tidak berpikir jawabannya memerlukan banyak penjelasan, saya akan mengatakan bahwa bagaimana variabel $ conf bekerja di settings.php adalah pengetahuan umum untuk pengembang Drupal. Salah satu hal yang menyenangkan tentang jawaban ini adalah ringkas. Saya tidak yakin itu bertentangan dengan jawaban yang diterima, jawaban yang diterima akan bekerja dan ini merupakan alternatif. Perbedaan antara metode ini dan melakukannya melalui UI adalah bahwa ini akan bekerja di beberapa lingkungan, tetapi Anda harus mengaturnya secara individual di UI untuk setiap lingkungan.
chim
16

Sangat penting untuk memahami bahwa masalah izin dapat ada di KEDUA direktori sementara yang Anda tentukan (yang didefinisikan di admin / config / media / file-system) DAN di folder tempat file sementara itu akan disalin. Saya telah melihat kesalahan ini beberapa kali dan biasanya bukan masalah dengan folder sementara, tetapi folder terakhir tempat file tersebut disalin setelah tinggal di folder temp.

Juga memastikan bahwa jalur sistem file publik diatur dengan benar.

sheldonkreger
sumber
1
Inilah yang terjadi pada saya. Dalam kasus saya, saya perlu mengatur kepemilikan direktori / sites / default / files yang baru dibuat ke USERNAME: apache (pada beberapa sistem yang dikelompokkan tidak akan disebut siapa-siapa).
Evan Donovan
8

Saya punya masalah yang pasti dan memastikan untuk menggunakan jalur relatif (situs / default / file / tmp) untuk lokasi folder tmp saya seperti yang disarankan dan saya juga mengubah izin pada folder tmp untuk memastikan itu dapat ditulis oleh apache tetapi masalah saya masih ada . jadi saya memutuskan untuk memeriksa pesan log (Laporan >> Pesan log terbaru) untuk melihat apakah saya bisa mendapatkan pemahaman yang lebih baik tentang apa masalahnya. Dengan melakukan ini saya mendapat pesan yang lebih spesifik:

Izin file tidak dapat ditetapkan pada publik: // js.

Ini mendorong saya untuk memeriksa izin pada folder js di situs / default / file dan ternyata apache tidak bisa menulis ke sana sehingga dengan mengubah izin ke 775 pada folder itu saya menyingkirkan pesan kesalahan saya. Jadi saya menyarankan agar Anda memeriksa izin untuk semua sub-folder di situs / default / file dan tidak hanya folder tmp jika Anda belum menyelesaikan masalah Anda. Saya pikir saya akan membagikan info ini.

Andew
sumber
Masalah saya sama dengan ini, tetapi saya menggunakan yang berikut ini untuk memperbaikinya: sudo chgrp -R www-data / var / www / mysite
Wavesailor
Dengan asumsi Anda menggabungkan sudo chgrp -R www-data /var/www/mysitedengan "mengubah izin menjadi 775" . Ini TIDAK diperlukan. Drupal tidak perlu menulis ke setiap folder. Hanya folder file publik, pribadi, dan tmp Anda.
rovr138
Ya - yang paling penting di sini, bahwa tidak ada jawaban lain yang disebutkan, adalah menemukan direktori tujuan (biasanya di suatu tempat di bawah situs / default / file - / css dan / js adalah kandidat utama jika Anda telah mengaktifkan penyatuan JS / CSS) dan Anda dapat hanya dapatkan itu dengan melihat log.
William Turrell
... * Namun * - label pada formulir admin mengatakan "Direktori ini seharusnya tidak dapat diakses melalui web.", Jadi kecuali Anda telah mengambil langkah-langkah untuk melindungi / situs / default / file / tmp di Apache atau Nginx, kemudian meletakkannya ada ide yang buruk.
William Turrell
5

Anda dapat menemukan pengaturan sistem file dalam admin/config/media/file-system mengubahnya ke / tmp

Anda juga dapat memeriksa admin / laporan / status untuk masalah pengaturan apa pun

tentang / tmp izin Anda dapat memberikannya 755 dan Anda akan menemukannya di / public_html

Ahmed
sumber
2

Pesan kesalahan terkadang bisa menyesatkan

Jika dikatakan masalahnya adalah dengan direktori tujuan, apache mungkin tidak memiliki izin untuk menulis ke subfolder situs / default / file yang ingin Drupal masukkan file.

Solusi yang baik adalah menjadikan pengguna apache pemilik semua file dan direktori di bawah situs / default / file

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

Atau sesuatu yang serupa harus reslove masalah direktori tujuan. Periksa kembali apakah pemilik telah menulis dan menjalankan izin pada semua subdirektori.

chim
sumber
1
Solusi ini menyelamatkan hari saya, saya bekerja di Ubuntu 14.014 dan melakukan inichown -R www-data:www-data /var/www/html/sites/default/files/
Rishi Kulshreshtha
2

Direktori file: Pemecahan Masalah Server Web berbasis Apache

Jika file direktori tidak "dimiliki" oleh server Web, ada dua cara untuk melanjutkan. Petunjuk ini menganggap Anda memiliki akses shell ke server Web. Jika Anda tidak memiliki akses shell, silakan hubungi penyedia hosting Anda untuk dukungan tambahan.

Idealnya Anda akan dapat mengubah "pemilik" file direktori agar sesuai dengan nama server Web. Pada server berbasis Unix atau Linux, Anda dapat memverifikasi "siapa" yang dijalankan server Web dengan mengeluarkan perintah berikut:

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

Bergantung pada server Web Anda, salah satu dari perintah ini akan mengembalikan serangkaian baris seperti ini:

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

Kolom pertama dalam teks yang dikembalikan adalah "pengguna" yang dijalankan oleh server Web Anda. Dalam hal ini pengguna adalah www-data. Untuk membuat direktori file Anda dapat ditulisi oleh server Web, Anda perlu menetapkan kembali kepemilikannya menggunakan perintah berikut:

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

Jika Anda tidak memiliki izin yang memadai pada server Anda untuk mengubah kepemilikan folder, opsi terbaik berikutnya adalah memberikan akses tulis grup ke folder dengan perintah berikut:

$ chmod -R 0770 sites/default/files

Anda juga harus dapat menyesuaikan izin direktori menggunakan program FTP seperti diuraikan di atas.

Setelah Anda menyelesaikan langkah-langkah ini, konfirmasi izin yang sesuai telah ditetapkan dengan menavigasi ke Administer -> Laporan -> Laporan status. Gulir ke bagian yang berlabel, "Sistem file" dan konfirmasikan pengaturan Anda sekarang sudah benar.

Sumber: Direktori file

Sukhjinder Singh
sumber
1

Sumber kesalahan lain adalah tidak bisa menulis ke folder file. Dalam kasus saya, saya menyelesaikannya menggunakan:

$chmod 777 sites/default/files/pictures/
warga kehormatan
sumber
15
woah, benarkah? 777 tentang apa yang jelas merupakan lokasi produksi? Itu hanya saran yang tidak bertanggung jawab.
David Meister
Ya, berikan setidaknya 755.
user1359
@DavidMeister Saya membesarkan hati Anda, tetapi sayangnya pada shared hosting (muntah) kadang-kadang 777 adalah satu-satunya cara Apache dapat menulis ke folder
@ andrewtweber Anda yakin tentang ini? Bahkan dalam lingkungan hosting bersama, 775 harus sekitar longgar seperti yang Anda butuhkan. Bisakah Anda memberi contoh penyedia hosting bersama yang membutuhkan 777? Jika Anda menggunakan 777 pada server bersama dan Anda tidak memiliki VPS, semua orang di server dapat mengakses file Anda.
David Meister
3
@andrewtweber juga ya, pelajarannya bukan bahwa "shared hosting" memerlukan 777 tetapi "hosting yang mengerikan" membutuhkan 777.
David Meister
1

Dalam beberapa situasi ini dapat dengan mudah diperbaiki dengan menghapus folder 'ctools' dan 'js' dalam default / file. Folder-folder ini diciptakan kembali oleh sistem jika diperlukan. Kadang-kadang ketika membuat instalasi baru dari situs yang ada folder ini sudah menyebabkan masalah. Juga jika CSS Anda tidak berfungsi setelah melakukan instalasi baru dari situs yang sudah ada, ini juga dapat diperbaiki dengan menghapus file-file ini dan membiarkan drupal membuatnya kembali.

Paul Trotter
sumber
0

Konfigurasi saya yang lama dan bermasalah

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

Konfigurasi baru dan berfungsi dengan baik saya

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
Claudio Lente
sumber
Ya, eksekusi diperlukan pada folder untuk dapat menggunakannya. 775 kemungkinan akan lebih tepat daripada 774. Dalam kasus Anda dengan cara kepemilikan Anda diatur 755 juga akan menjadi pilihan yang baik.
rooby
0

Izin yang benar untuk folder sementara tergantung pada konfigurasi server web Anda.

Jika menjalankan Drupal dengan PHP sebagai modul server web, misalnya Apache, ketika pengguna yang didefinisikan dalam file konfigurasi server web utama menggunakan arahan Pengguna harus memiliki akses tulis untuk itu.

% grep -i "user" /etc/httpd/conf/httpd.conf

Apache pengguna

Taras
sumber
0

Saya memiliki masalah yang sama setelah pindah dari satu server ke yang lain.

Saya mencoba semua yang disarankan di sini, mengatur folder ke 755 dan seterusnya.

Folder sementara saya disetel ke "" tmp7zXhVVCO "dan itu benar-benar menyalin file instalasi dengan baik, setelah setiap coba lagi saya melihat file temp disalin di sana, tetapi instalasi tetap gagal.

Masalahnya adalah pemilik bukan hak, yang mengapa 777 menghapus kesalahan ini, tetapi kita semua tahu bahwa ini bukan cara untuk pergi di lokasi produksi.

Apa yang harus Anda lakukan, adalah mengubah folder sementara Anda ke hal lain, seperti "temp" atau apa pun yang cocok untuk Anda, selama belum ada , drupal akan membuat folder baru ini dengan hak apache , bukan hak pengguna , dan masalah Anda akan diselesaikan.

Kevin G
sumber
Ketika saya melakukan ini saya mendapatkan kesalahanThe directory ../temp2 does not exist and could not be created.
Paul Trotter
0

Saya tidak terlalu menyukai jawaban yang ada jadi saya hanya akan memulai sendiri yang mungkin akan saya perbarui dari waktu ke waktu. Terutama dengan perintah shell.

Untuk saat ini, jalankan ini dari 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
keuangan fifi
sumber
0

Dari Konfigurasi -> Media -> Sistem File Saya menghapus katalog / temp. Setelah itu saya tidak punya masalah.

Filip
sumber
0

Saya memiliki masalah yang sama pada migrasi. Saya memiliki chmod 777 semua situs / default / file tetapi kesalahan masih terjadi. Saya mengubah izin 775 di situs / default / file dan pesan hilang. Saya bukan masalah jalur pribadi, milik saya adalah / var / tmp tetapi izin 775.

Kayu
sumber
0

Jika Anda mengalami masalah ini menggunakan Pantheon dan terus mendapatkan kesalahan setelah mengatur path direktori file (temp), Anda mungkin juga perlu mengganti mode Connection pada dasbor instance dev Anda dari Git ke SFTP.

Situs Drupal Anda mungkin berusaha menyimpan file ke direktori yang dikelola oleh Git (mis. Jika Anda mengubah pengaturan tata letak dan sejenisnya dalam tema Tema Adaptif). Untuk melakukannya, beralihlah ke SFTP. Setelah file disimpan, Anda dapat beralih kembali ke Git, dan dasbor akan meminta Anda untuk melakukan perubahan yang telah dilakukan pada server.

Kay V
sumber
0

Saya memiliki masalah yang sama.

Saya menggunakan IIS di Windows. Akhirnya masalahnya adalah untuk izin di situs folder / default / file dan, jelas, di situs / default / file / tmp.

Akhirnya saya memberi lagi "izin penuh" ke folder, dan itu berhasil.

Salam

jorge_vicente
sumber