2014-10-28 1 views
1

У меня есть следующий код (который я нашел в Интернете), чтобы программно загрузить изображение профиля в существующую учетную запись пользователя. Тем не менее, я получаю «дубликат записи».Как программно удалить изображение профиля пользователя?

Я поэтому решил сначала удалить существующую фотографию (если есть), прежде чем загружать новую фотографию. Или есть лучший способ перезаписи без получения ошибки ниже? сообщение

Ошибка:

DOException: SQLSTATE [23000]: Integrity нарушение ограничения: 1062 Дублированный запись 'http://www.example.com/sites/default/files/photo_gallery' ключевых 'URI': INSERT INTO {file_managed} (UID, Ури, filemime, размер_файла, status, timestamp, type) VALUES (: db_insert_placeholder_0,: db_insert_placeholder_1,: db_insert_placeholder_2,: db_insert_placeholder_3,: db_insert_placeholder_4,: db_insert_placeholder_5,: db_insert_placeholder_6); Array ([: db_insert_placeholder_0] => 1302 [: db_insert_placeholder_1] =>http://www.example.com/sites/default/files/photo_gallery/newphoto.png [: db_insert_placeholder_2] => image/png [: db_insert_placeholder_3] => 143769 [: db_insert_placeholder_4] => 1 [: db_insert_placeholder_5] => 1414500789 [: db_insert_placeholder_6] => image) в drupal_write_record() (строка 7202 из /home1/public_html/example/includes/common.inc).

Вот код, я использую:

$obj_tochange = user_load($user); 
$image_path ='http://www.example.com/sites/default/files/photo_gallery/newphoto.png';  
$image_info = image_get_info($image_path); 

// create file object 
$file = new StdClass(); 
$file->uid = $obj_tochange->uid; 
$file->uri = $image_path; 
$file->filemime = $image_info['mime_type']; 
$file->status = FILE_STATUS_PERMANENT; 
$file->filesize = $image_info['file_size']; 

file_save($file); 
$edit['picture'] = $file; 
user_save($obj_tochange, $edit); 

ответ

1

Вам необходимо скопировать файл с помощью file_copy перед вызовом file_save. Он должен автоматически изменять путь к файлу, если он соответствует любому другому файлу на сервере, поэтому он не будет выдавать эту ошибку.

$file = new StdClass(); 
// ..... your code as it is 
$file = file_copy($file, 'public://', FILE_EXISTS_RENAME); 
file_save($file);