1

私の問題を説明するために、できるだけ明確にしようとします。そうでない場合は、教えてください!

Mywebapp は Codeigniter に基づいています。その中で、ユーザーがアップロードした画像を表示するためにコントローラーを作成しました。このようにして、画像はメンバーまたは許可された人のみが見ることができ、たとえば facebook のように公開されません (画像アドレスはハッシュされるだけで公開されます)。

また、mpdf ライブラリを使用して、Web ページのコンテンツから PDF を生成します。それを使用するために、サードパーティのディレクトリに mpdf ライブラリがあります。私のフォーマットで使用できるようにするために、ライブラリディレクトリ(アプリケーションディレクトリ内)にmpdfライブラリを配置しました(別のコントローラーから使用できるようにするためだけです)。私はpdfを生成したいビューから呼び出されるpdfコントローラを持っています。

したがって、プロセスは次のとおりです。ビューからpdfコントローラーの関数を呼び出します。この関数では、mpdf オブジェクト (サードパーティ クラス) を作成して pdf を生成する mpdf ライブラリの関数を呼び出します。

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 に戻します。

しかし、うまくいきません。画像関数の値を確認すると、まだ false です...すべてのオブジェクトの構成値が変更されているのではなく、変更された pdf オブジェクトのみが変更されているようです。

私がやりたいことをする方法はありますか??? 構成パラメーターまたはその他のものを使用!!! 私は何かを誤解したと思いますが、何がわかりません!

事前に回答ありがとうございます バスティアン

4

1 に答える 1

0

あなたの問題は、ライブラリが画像関数を「呼び出す」ことであり、ログインしていません。したがって、コントローラーコードはアクセスを拒否します。

できることは 2 つあります。

  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 に答える