1

我会尽量清楚地解释我的问题。如果没有,告诉我!

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 实例对象上使用配置参数。例如,将“pdf_conversion”设置为 true 并且转换完成后,将其设置回 false。

但它不起作用。当我检查图像函数中的值时,它仍然是错误的......就像所有对象的配置值都没有改变,而只是改变了它的 pdf 对象。

有没有办法做我想做的事???使用配置参数或其他任何东西!我想我误解了一些东西,但不知道是什么!

提前感谢您的回答巴斯蒂安

4

1 回答 1

0

你的问题是,然后库“调用”图像函数,它没有登录。所以你的控制器代码拒绝访问。

你可以做两件事:

  1. 将生成/获取图像的代码从控制器移动到新库中。然后从控制器和 PDF 库中调用该库。这是首选方式。

  2. 在“图像”操作中,找到一种方法来检查请求是否来自 PDF 库。最好的猜测是在 PDF 库发送的 HTTP 标头中查找某些内容。无论如何,这不是很安全,因为 HTTP 标头可以“伪造”。

题外话:您是否有理由通过控制器操作而不是直接引用图像文件来提供图像?

关于解决方案 1 的说明

所以你会有一个像这样的库 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]
}

这是想法,实现的实际细节取决于您。

于 2012-08-15T13:16:14.453 回答