如何以编程方式删除用户个人资料图片?

时间:2014-10-28 13:23:47

标签: drupal drupal-7 user-profile

我有以下代码(我在互联网上找到)以编程方式将个人资料图片上传到现有用户帐户。然而,我正在" 重复录入"错误。

因此我认为我应该在上传新照片之前先删除现有照片(如果有的话)。或者是否有更好的覆盖方法而不会出现以下错误?

错误讯息:

  

DOException:SQLSTATE [23000]:完整性约束违规:1062重复条目' http://www.example.com/sites/default/files/photo_gallery' for key' uri':INSERT INTO {file_managed}(uid,uri,filemime,filesize,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);数组([: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 [: drupal_write_record()中的db_insert_placeholder_5] => 1414500789 [:db_insert_placeholder_6] => image)(/ home1 /public_html/example/includes/common.inc的第7202行)。

以下是我正在使用的代码:

$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 个答案:

答案 0 :(得分:1)

在调用file_copy之前,您需要使用file_save复制文件。如果它与服务器上的任何其他文件匹配,它应该自动更改文件路径,因此它不会抛出此错误。

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