Drupal file_copy không hoạt động


11

Tôi có đoạn mã sau:

$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);
}

Có cái gì đó sai với mã của tôi? Tôi luôn nhận được thông báo từ lệnh die bên trong câu lệnh if cuối cùng.

Bất kỳ trợ giúp sẽ được đánh giá cao.

Chỉnh sửa: Nhờ Stanislav Agapov, tôi đã tìm thấy nhật ký từ drupal. Tin nhắn là:

Không thể sao chép tệp .... / main_ROSE2106.JPG, vì thư mục đích công khai: // galerii_imagini không được cấu hình đúng.

Tôi nên làm gì để cấu hình chính xác? Tôi đã đặt trong / admin / config / media / file-system các đường dẫn site / default / files thành các tệp công khai. Có cái gì khác để thiết lập?

Chỉnh sửa # 2: Tôi đặt 777 cho toàn bộ cây / trang web / mặc định / tệp.


2
Chức năng file_copyvà được gọi bởi nó hoạt động file_unmanaged_copytrong trường hợp lỗi ghi thông điệp vào nhật ký hệ thống. Bạn đã xem báo cáo "Thông điệp nhật ký gần đây" chưa? Nhiều khả năng bạn sẽ tìm thấy câu trả lời ở đó ...
Stanislav Agapov

Kiểm tra thư mục tập tin của bạn có thể ghi hay không. Nếu không thì cho phép nó viết.

Thư mục tập tin có quyền 777.
sebastian.roibu

Làm thế nào về sự cho phép thư mục trên /sites/default/files/galerii_imagini?
Jimmy Ko

2
@applecrusher Đây là lời khuyên rất tệ.

Câu trả lời:


1

Bạn có chắc chắn rằng đường dẫn sites/default/files/galerii_imagini tồn tại và là một thư mục? Bạn có thể thấy lỗi này nếu nó không tồn tại hoặc nếu nó tồn tại nhưng là một tệp thay vì một thư mục. Nếu bạn mong đợi Drupal tạo galerii_imaginithư mục, bạn cần thêm dòng này trước khi gọi đến file_copy:

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

Dựa trên tìm kiếm mã nguồn Drupal 7.x, thông điệp File %file could not be copied, because the destination directory %destination is not configured correctly.chỉ được tạo ra trong file_unmanaged_copyđó, được gọi bởi file_copy. Nó gọi file_prepare_directoryđầu tiên trên đích như được chuyển đến file_copy, sau đó trên thư mục mẹ của nó. Nó tạo ra thông báo lỗi mà bạn chỉ nhìn thấy nếu cả hai cuộc gọi đều thất bại. Vì nó gọi file_prepare_directoryvới các cờ mặc định, nó có thể thất bại với thông báo đó nếu:

  • không có đường dẫn đích cũng như thư mục mẹ của nó tồn tại
  • đường dẫn đích không tồn tại và thư mục mẹ của nó tồn tại nhưng không phải là thư mục
  • hoặc đường dẫn đích hoặc thư mục mẹ của nó tồn tại, là một thư mục, không thể ghi và thay đổi các quyền của nó để làm cho nó có thể ghi được

Tuy nhiên, trong trường hợp cuối cùng, bạn sẽ thấy một thông báo khác trong nhật ký ngay trước thông báo bạn đã báo cáo trong câu hỏi của mình: The file permissions could not be set on %uri.Vì bạn không báo cáo đã thấy tin nhắn đó, tôi chỉ có thể giả sử rằng một trong hai trường hợp đầu tiên là chính xác.


"galerii_imagini" tồn tại và đó là một thư mục. Có thể ghi được bằng drupal vì tôi có thể tạo các phòng trưng bày thủ công lưu trữ các hình ảnh trong thư mục này. Bởi vì tôi đang sử dụng dịch vụ lưu trữ được chia sẻ và tôi đã gặp vấn đề về quyền trong quá khứ nên tôi không chắc chắn rằng những gì tôi đang thấy trong filezilla là chính xác, liên quan đến quyền.
sebastian.roibu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.