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.
file_copy
dan dipanggil oleh fungsifile_unmanaged_copy
jika terjadi kesalahan menulis pesan ke log sistem. Apakah Anda melihat laporan "Pesan log terbaru"? Kemungkinan besar Anda akan menemukan jawaban di sana .../sites/default/files/galerii_imagini
?Jawaban:
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 membuatgalerii_imagini
direktori, Anda perlu menambahkan baris ini sebelum panggilan Anda kefile_copy
: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 difile_unmanaged_copy
, yang dipanggil olehfile_copy
. Itu panggilanfile_prepare_directory
pertama pada tujuan seperti yang diteruskanfile_copy
, kemudian pada direktori induknya. Ini menghasilkan pesan kesalahan yang Anda lihat hanya jika kedua panggilan gagal. Karena ia memanggilfile_prepare_directory
dengan flag default, ia dapat gagal dengan pesan itu jika: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