使用uniqid()进行图片上传代码初始化

时间:2018-12-27 22:59:41

标签: php image codeigniter

在学习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 :(得分:1)

关于第一个问题,您可以加密文件名并将overwrite设置为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并具有相同的结果,并且将始终获得唯一的文件名。