在学习Codeigniter和PHP框架时,我遇到了两个问题
我正在使用来自codeigniter的图像上载类,我试图使所有图像上载都唯一,所以可以在配置中使用'encrypt_name'属性,但是我想尝试其他方法,所以我正在尝试使用“ uniqid()”函数。仍然无法弄清楚。
我尚未能够通过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>
答案 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并具有相同的结果,并且将始终获得唯一的文件名。