Первый — часть контроллера codeigniter, куда я загружаю файлы:
$files = $_FILES;
$order_number = 5 //example
$cpt = count($_FILES['userfile']['name']);
$rand = md5(uniqid(rand(), true));
for($i=0;$i<$cpt;$i++)
{
if(!empty($files['userfile']['name'][$i]))
{
$_FILES['userfile']['name']= $files['userfile']['name'][$i];
$_FILES['userfile']['type']= $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error']= $files['userfile']['error'][$i];
$_FILES['userfile']['size']= $files['userfile']['size'][$i];
$format=explode('.',$files['userfile']['name'][$i]);
$format=end($format);
$config_img['upload_path'] = './uploads/orders';
$config_img['allowed_types'] = 'jpg|png';
$config_img['file_name'] = $order_number.'_'.$rand.'.'.$format;
$config_img['max_size'] = '5120';
(...)//some code that is not a problem
$this->load->library('upload', $config_img);
if($this->upload->do_upload())
(...)
Хорошо. Получение файлов к этому моменту работает, но проблема заключается в сохранении его под другим именем.
Для примера я отправляю file1.png и file2.jpg
И я не получаю 5_123123123.png и 5_864192696219.jpg, и это проблема.
Я получаю 2 файла с одинаковыми именами (только класс загрузки добавляет «1»), но самая большая проблема заключается в том, что они имеют одинаковый формат. (.png в этом примере) мой вопрос, как я могу получить уникальное имя здесь? Почему его получают для всех файлов с таким же именем?
Эта проблема возникает из-за кэшированной конфигурации. Вместо передачи $ config в качестве параметра вы можете повторно инициализировать новую конфигурацию, используя
$ This-> upload-> Initialize (конфигурации $);
надеюсь, что это решит проблему
положил $rand = md5(uniqid(rand(), true));
внутри ур для петли