File_copy Drupal tidak berfungsi

11

Saya memiliki kode berikut:

$main_image = glob('main*.{jpeg,gif,png,jpg,JPEG,JPG,PNG}', GLOB_BRACE);
if (count($main_image) != 1) 
    die("Could not find main picture !");  

$file_path = drupal_realpath($main_image[0]);
$file = (object) array(
            'uid' => $userID,
            'uri' => $file_path,
            'filemime' => file_get_mimetype($file_path),
            'display' => 1,
            'filename' => $main_image[0]
);
// copy the file in the correct folder
$destination = "public://galerii_imagini/" . $file->filename;
 if ($file = file_copy($file, $destination, FILE_EXISTS_REPLACE)) {} else {
    die("Could not copy " . $file_path . " in " . $destination);
}

Apakah ada yang salah dengan kode saya? Saya selalu mendapatkan pesan dari perintah mati di dalam pernyataan if terakhir.

Bantuan apa pun akan dihargai.

Sunting: Terima kasih kepada Stanislav Agapov, saya menemukan log dari drupal. Pesannya adalah:

File .... / main_ROSE2106.JPG tidak dapat disalin, karena direktori tujuan publik: // galerii_imagini tidak dikonfigurasi dengan benar.

Apa yang harus saya lakukan untuk mengkonfigurasinya dengan benar? Saya telah menetapkan di / admin / config / media / sistem file situs jalur / default / file sebagai file publik. Apakah ada hal lain untuk diatur?

Sunting # 2: Saya menetapkan 777 untuk seluruh pohon / situs / default / file.

sebastian.roibu
sumber
2
Berfungsi file_copydan dipanggil oleh fungsi file_unmanaged_copyjika terjadi kesalahan menulis pesan ke log sistem. Apakah Anda melihat laporan "Pesan log terbaru"? Kemungkinan besar Anda akan menemukan jawaban di sana ...
Stanislav Agapov
Periksa direktori file Anda apakah dapat ditulisi atau tidak. Jika tidak maka berikan untuk menulis izin.
Folder file memiliki hak 777.
sebastian.roibu
Bagaimana dengan izin direktori /sites/default/files/galerii_imagini?
Jimmy Ko
2
@applecrusher Ini saran yang sangat buruk.

Jawaban:

1

Apakah Anda yakin jalurnya sites/default/files/galerii_imagini ada dan merupakan direktori? Anda bisa melihat kesalahan ini apakah itu tidak ada atau jika ada tetapi merupakan file, bukan direktori. Jika Anda mengharapkan Drupal membuat galerii_imaginidirektori, Anda perlu menambahkan baris ini sebelum panggilan Anda ke file_copy:

file_prepare_directory("public://galerii_imagini", FILE_CREATE_DIRECTORY);

Berdasarkan pencarian kode sumber Drupal 7.x, pesan File %file could not be copied, because the destination directory %destination is not configured correctly.hanya diproduksi di file_unmanaged_copy, yang dipanggil oleh file_copy. Itu panggilan file_prepare_directorypertama pada tujuan seperti yang diteruskan file_copy, kemudian pada direktori induknya. Ini menghasilkan pesan kesalahan yang Anda lihat hanya jika kedua panggilan gagal. Karena ia memanggil file_prepare_directorydengan flag default, ia dapat gagal dengan pesan itu jika:

  • baik jalur tujuan maupun direktori induknya tidak ada
  • jalur tujuan tidak ada dan direktori induknya ada tetapi bukan direktori
  • baik jalur tujuan atau direktori induknya ada, adalah direktori, tidak dapat ditulisi, dan mengubah izinnya agar dapat ditulisi gagal

Namun, dalam kasus terakhir, Anda akan melihat pesan lain di log segera sebelum yang Anda laporkan dalam pertanyaan Anda: The file permissions could not be set on %uri.Karena Anda belum melaporkan melihat pesan itu, saya hanya dapat berasumsi bahwa salah satu dari dua kasus pertama benar.


sumber
"galerii_imagini" ada dan itu adalah direktori. Dapat ditulis oleh drupal karena saya dapat membuat galeri manual yang menyimpan gambar dalam direktori ini. Karena saya menggunakan hosting bersama dan sebelumnya saya memiliki masalah hak, saya tidak yakin apa yang saya lihat di filezilla benar, mengenai hak tersebut.
sebastian.roibu