我会尽可能清楚地解释我的问题。如果没有,请告诉我!
Mywebapp基于Codeigniter。在其中,我做了一个控制器,以显示用户上传的图像。通过这种方式,图像只能由成员或授权人员看到,并且不像Facebook中那样是公开的(图像地址只是经过哈希处理但是是公开的)。
我还使用mpdf库从网页内容生成pdf。要使用它,我在第三方目录中有mpdf库。为了能够将它与我的格式化一起使用,我将库目录(在应用程序目录中)放入我的mpdf库(只是为了能够从不同的控制器中使用它)。我有一个pdf控制器,从我想要生成pdf的视图中调用。
所以过程是:我从我的视图中调用pdf控制器的一个函数。在这个函数中,我调用了我的mpdf库的一个函数,它创建了一个mpdf对象(第三方类)并生成了pdf。
pdf的生成效果很好。我唯一的是图像。我解释。在我的html文档中,图像嵌入如下:
<img src="http:localhost/www/myapp/library/image/hashed_name_of_the_image" alt="" />
库控制器的图像功能检索图像并显示它。但是在这个函数中,我可以保护或不运行它的访问权限。例如,强制成为已登录用户以查看图像(if($this->session->userdata(‘logged’) == true)
)。
如果没有限制,生成的pdf包含图像。酷:))。
但如果我提出限制,那就没有了。据我所知,mpdf对象是要求图像功能显示图像的对象。所以验证失败了。
在调用pdf函数之前,我尝试在CI实例对象上使用config参数。例如,设置为true a&#34; pdf_conversion&#34;并且转换完成后,将其设置为false。
但它不起作用。当我检查图像功能中的值时,它仍然是假的......就像所有对象的配置值都没有改变,但只有改变了它的pdf对象。
有办法做我想做的事吗???使用config参数或其他任何东西!我想我误解了一些事情,但不知道是什么!
感谢前进的答案 巴斯蒂安
答案 0 :(得分:0)
你的问题是,然后库“调用”图像功能,它没有登录。所以你的控制器代码拒绝访问。
您可以做两件事:
将生成/获取图像的代码从控制器移动到新库中。然后从控制器和PDF库中调用该库。这是首选方式。
在“图片”操作中,找到检查请求是否来自PDF库的方法。最好的猜测是在PDF库发送的HTTP头中查找内容。无论如何,这不是很安全,因为HTTP标头可以“伪造”。
OFF主题:您是否有理由从控制器操作服务图像而不是直接引用图像文件?
所以你将拥有一个看起来像这样的库image.php
class Image {
...
function get_image($hash){
[code for getting the image here]
}
...
}
在控制器中:
function image($hash) {
$this->load->library('image');
if (if($this->session->userdata(‘logged’) == true)) {
$image = $this->image->get_image($hash);
[send it to the browser]
}
}
在PDF库中
function export($hash) {
$ci =& get_instace();
$ci->load->library('image');
[do pdf stuff]
$image = $ci->image->get_image($hash);
$this->add_image($image);
[do more pdf stuff]
}
这是一个想法,实施的实际细节取决于你。