Что касается вашей первой проблемы, вы можете зашифровать имя файла и установить для перезаписи значение false. Таким образом, если файл с тем же именем, что и загружаемый файл, существует, он будет перезаписан.Если установлено значение false, число будет добавлено к имени файла, если существует другое с таким же именем.
$config['overwrite'] = FALSE;
$config['encrypt_name'] = TRUE;
Теперь вы гарантируете, что имя вашего файла всегда будет уникальным.
И оВо втором выпуске вы можете использовать относительные пути, такие как:
$rel_path = 'NewUploads';
$config['upload_path'] = FCPATH.'NewUploads';
И просто сохраните имя изображения в вашем db
или с его относительным путем, если оно не изменится позже, и при извлечении добавьте base_url
на это так:
$upload_path = 'your/upload/path';
$file_url = base_url($upload_path.'/'.$file_from_db);
Или в вашем случае, если вы хотите передать его непосредственно в представление, как я сказал, вам нужно только имя файла, как это:
$data = $this->upload->data();
$newimage = $data['file_name'];
$upload_path = 'your/upload/path';
$image_url = base_url($upload_path.'/'.$newimage);
Но простоимейте в виду, что нужно иметь дело только с именем.
Вы можете создать свою собственную функцию для создания уникальных имен файлов, конечно же, не изменяя основные системные файлы, просто расширяя их, но почему!когда вы уже можете сделать это с codeigniter по умолчанию и с теми же результатами и всегда получите уникальное имя файла.