2013-07-26 4 views
1

나는 Yii 내에 보호 된 폴더가 있으며 사이트 내의 일부 이미지를 표시하려고합니다. 나는 다음 코드를 시도했고 사이트/인덱스 컨트롤러 내에서 내가 원하는 이미지 만 리턴한다는 점에서 작동한다.보호 된 폴더의 이미지 표시

그러나 코드를 분리하려고 시도했지만 작동하지 않았습니다. 어떤 도움을 주셔서 감사합니다. 모델

public function getImage() // will take file identifier as @param  
{ 

    $imageID = '2562584569'; // will eventually be dynamically assigned 

    $image = Images::model()->find('tmp_name=:id', array('id' => $imageID)); 

    $dest = Yii::getPathOfAlias('application.uploads'); 

    $file = $dest .'/' . $image->tmp_name . '.' . $image->extension; 

    if(file_exists($file)){ 
    ob_clean(); 
    header('Content-Type:' . $image->logo_type); 
    readfile($file); 
    exit; 
    } 

} 

그리고보기에서

CHtml::link('<img src="' . Yii::app()->request->baseUrl .'/images/image" />', array('product/index', 'id'=>$data['product_id'], 'slug'=> $data['product_slug'])); 

감사

Jonnny

답변

1

나는 모두가 내가의 일부를 결과 목록을 검색하고있어,

2

"보호"폴더는 클라이언트에서 액세스 할 수 없습니다 브라우저. 이렇게하면 사람들이 소스 코드와 같은 중요한 파일에 액세스 할 수 없게됩니다.

"보호 된"이미지를 저장하고 액세스 할 수있게하려면 CAssetManager을 사용하여 이미지를 게시해야합니다.

$path = Yii::app()->basePath.'/path-inside-protected'; 
$yourImageUrl = Yii::app()->assetManager->publish($path); 

YII 후, 형제는 "보호"하기 위해 "자산"폴더에 대처 자산으로 파일을 사용합니다 :

사용 뭔가 같다. 그 후에 HTML에 반환 된 URL을 사용할 수 있습니다.

<img src="<?php echo $yourImageUrl ?>"> 
+0

확인하는 데 도움이

CHtml::link('<img src="' . $this->createUrl('/images/image', array('data'=>$data['data'])) . '" />', array('product/index', 'id'=>$data['product_id'], 'slug'=> $data['product_slug'])); 

모델처럼 그것에 대해

public function actionImage($data) { $image = Images::model()->find('tmp_name=:data', array('id' => $data)); $dest = Yii::getPathOfAlias('application.uploads'); $file = $dest .'/' . $image->tmp_name . '.' . $image->extension; if(file_exists($file)){ ob_clean(); header('Content-Type:' . $image->logo_type); readfile($file); exit; } } 

감사 갔다 결과 집합은 제품 로고입니다. 그래서'controller/method/id'를 src로 사용하고 i를 전달했습니다. 메소드에'id '를 지정합니다. 따라서 images/image/2562584569는 이미지 컨트롤러, getimage() 메소드, 파일 ID와 관련이 있습니다. 그래도 이미지를 표시 할 수 없습니다. – Jonnny

+0

문제는 .. 자산 디렉토리에서 파일을 복사하기 위해 assetManager를 사용할 때까지 시도한 방법에 관계없이 보호 된 폴더 안에 저장된 이미지를 볼 수 없습니다. . 다른 방법은 Apache에서 작업하는 경우 .htaccess 파일을 수정하는 것입니다. 내 추측은 당신이 그렇다는 것입니다. 그러나, 나는 그것을 수정하는 것에 대해 강력하게 조언 할 것이다. –

+0

나는이 일반적인 아이디어를 생각하고 있었지만 구현에는 확신이 없었습니다. 기본적으로 src 태그는 특정 모델/메소드/id를 호출하고 파일이 존재하는지 확인한 다음 파일을 액세스하고 이미지를 반환하도록 프록시를 가져옵니다. 그게 효과가 있니? – Jonnny

관련 문제