Использование uniqid () для загрузки изображения в codeignitor - PullRequest
0 голосов
/ 28 декабря 2018

Итак, у меня две проблемы, так как я использую фреймворки Codeigniter и PHP

  1. Я использую класс загрузки изображений из codeigniter, я пытаюсь сделать все свои загрузки изображений уникальными, поэтомуда, я мог бы использовать свойство 'encrypt_name' в конфигурации, но я хочу попробовать что-то еще, поэтому я пытаюсь использовать функцию 'uniqid ()'.Все еще не могу понять.

  2. Мне еще не удалось показать исправление моего пути загрузки на моем локальном хосте из codeigniter. Это работает, только если я на самом деле поставлю полный путь к каталогу, такой как C: / admin / folder1 / folder2, что приводит к разрыву ссылки на мое изображение.

Я пробовал несколько вещей, как я показал в своем коде в комментариях.Я ценю всю помощь.

Контроллер

<?php

class Upload extends CI_Controller {

        public function __construct()
        {
                parent::__construct();
                $this->load->helper(array('form', 'url'));
        }

        public function index()
        {
                $this->load->view('upload_file', array('error' => ' ' ));
        }


        public function do_upload()
        {
                $config['upload_path']          = 'C:\wamp64\www\NewUploads';
                $config['allowed_types']        = 'gif|jpg|jpeg|png';
                $config['max_size']             = 0;
                $config['max_width']            = 0;
                $config['max_height']           = 0;
              //  $config['encrypt_name']         = True;
                $config['file_ext_tolower']     = True;
                $config['detect_mime']          = True;





                $this->load->library('upload', $config);

                if ( ! $this->upload->do_upload('userfile'))
                {
                        $error = array('error' => $this->upload->display_errors());

                        $this->load->view('upload_file', $error);
                }
                else
                {

                        $data = $this->upload->data();
                      //  $data = array('upload_data' => $this->upload->data());
//$this->show();
                      //$newimage  =  $data['file_name'];
                          $data['full_path'];
                        //  $as = uniqid($newimage, true);




                      //  $new = uniqid($data, True);

                        $this->load->view('upload_success', $as);
                }
// doesnt work




        }
}
    ?>

Просмотр

<html>
<head>

  <style>

}
.photo{
display:inline-block;
width: 32%;
border: 5px solid #ddd;
min-height: 300px;
}

</style>


<title>Upload Form</title>
</head>
<body>

<h3>Your file was successfully uploaded!</h3>

<ul>

<?php


//foreach ($upload_data as $item => $value):?>
<?php //echo $item;?>:


<?php


echo $as;
//echo $file_name . "<br>";
//echo $full_path . "<br>";
echo '<img src="' . $full_path . '" class = "photo">';



?>




<?php// endforeach; ?>
</ul>

<p><?php echo anchor('upload', 'Upload Another File!'); ?></p>

<?php


//echo '<img src="' . $upload_data['full_path'] . '" class = "photo">';


?>




</body>
</html>

1 Ответ

0 голосов
/ 28 декабря 2018

Что касается вашей первой проблемы, вы можете зашифровать имя файла и установить для перезаписи значение 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 по умолчанию и с теми же результатами и всегда получите уникальное имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...