2017-09-22 37 views
0

私はウェブサイトの訪問者が画像を安全にアップロードできるようにする問題を模索してきました。私はこの記事を見てきました: Long article about securly uploading imagesTwigを使用してドキュメントルートの外から画像を読み込む方法は?

最も重要なことは、ドキュメントルートの外にファイルを保存することだと思われます。私が正しく理解していれば

は今、「document root」は、XAMPPを使用した場合には、例えば、私の場合はC:/xampp/htdocs である、$_SERVER["DOCUMENT_ROOT"]が与えるものです。だから私のアップロードディレクトリを "outside"とすると、ディレクトリはC:/xamppになります。私は正しい?

とにかく、私はそうしようとしましたが、テンプレート内の画像を読み込めませんでした。イメージソースは、最初に "http://localhost ..."と解釈されるため、ファイルが見つかりません。

この記事では、readfile()という機能を使用する必要があることがわかりましたが、Twigで実装する方法がわかりません。

この問題を解決する助けに感謝します。

答えて

0

twigはhtmlを生成するためのテンプレート言語です。あなたがしたいことは、そこで行うことはできません。いつものように、あなたはhtmlを生成するためにtwigを使う必要があります。

イメージタグを追加するときは、ファイルシステムからイメージを取得するPHPスクリプトにソースを設定し、ソースを正しいイメージヘッダーと組み合わせて返す必要があります。

だから、画像ソースに少し変更を加えてhtmlを生成する必要がありますが、条件(GETパラメータ、セッション情報など)に基づいて画像を提供するために別のPHPスクリプトが必要です。

もちろん、エンコードされた画像ソースをtwigの画像タグのソースに直接送信することはできますが、htmlソースのサイズが爆発するため、大きな画像の場合は実際的ではありません。

+0

ありがとうございます。私はそれを試してみます – sheff2k1

0

symfonyのパブリックディレクトリはyour_project/webです。そこでプライベートファイルをアップロードする必要はありません。代わりに、それらを特定のプライベートフォルダにアップロードすることができます。

以下の例では、ファイルをyour_project/Resources/private/uploads/imagesフォルダにアップロードし、twigで配信することができます。画像の提供に関しては、古典的なやり方とは少し異なります。 BinaryFileResponseというイメージを返すルートを作成し、あなたの小枝に表示します。

私はここだけの重要な部分を掲示していますが、あなたはここに完全な例を見ることができます:Uploading images to a private directory and serving them in twig template

:あなたはいつもどのように作品を以下のルート方法を変更することができます。たとえば、nameパラメータはハッシュなどとなります。

サーバのイメージを制御するコントローラアクション。小枝はこれを呼び出します。

/** 
* @param string $name 
* 
* @Method({"GET"}) 
* @Route("/{name}", name="image_show") 
* 
* @return Response 
*/ 
public function showAction($name) 
{ 
    $response = new BinaryFileResponse($this->imageUploadPath.'/'.$name); 
    $response->trustXSendfileTypeHeader(); 
    $response->setContentDisposition(
     ResponseHeaderBag::DISPOSITION_INLINE, 
     $name, 
     iconv('UTF-8', 'ASCII//TRANSLIT', $name) 
    ); 

    return $response; 
} 

これは画像を表示する部分です。 images変数は、indexAction()から得られます。これは完全な例で見ることができます。重要な部分は{{ path('image_show', {'name': image}) }}です。上記のアクションを呼び出します。

{% for image in images %} 
    <img src="{{ path('image_show', {'name': image}) }}" /> 
{% else %} 
    <em>No image found.</em> 
{% endfor %} 
+0

丁寧な返信をありがとう! symphonyのフレームワークを使用しているのではなく、テンプレートエンジンとしてtwigを使用しているカスタムメイドのミニフレームワーク:-) – sheff2k1

+0

質問からsymfonyタグを削除してください。 – BentCoder

関連する問題