2014-12-31 5 views
0

문서 루트 외부에서 이미지를 표시하려면 어떻게해야합니까? 정확히 말하면루트 디렉토리 외부의 codeigniter에 이미지를 표시하려면 어떻게해야합니까?

/ <-- root directory 
/public_html/ <-- document root 
/application/upload/img <-- here is the source of image 

내가 codeigniter에서 만든 것으로 작동하지만 여러 번로드하려고하면 큰 지연이 있습니다. 나는 codeigniter에서 도움을주고 파일을로드하는 시간을 늘리는 도우미 함수이다. 당신이 당신의 서버가 작동하기를 원할 것입니다 경우

public function img($img_name){ 
    $t = $this->getupload->Get($img_name); // here is taked from DB using MODEL 
    header("Pragma: public"); 
    header("Content-type: {$t[0]['file_type']}"); // Take the file type (eg: images/jpg) from DB 
    header('Content-Transfer-Encoding: binary'); 
    flush(); 
    readfile($t[0]['full_path']); // here take the imgfile from DB 
} 
+5

왜 파일을 공용 디렉토리로 이동하지 않는 것이 좋을까요? 현재 앱에서 이미지를 메모리에 복사 한 다음 뱉어 내야합니다. HTTP 서버가 내장 된 것을 수행하는 것이 더 빠를 것입니다. – castis

+1

@castis 내가 생각할 수있는 유일한 이유는 이미지가 사용자가 제출했기 때문입니다 (폴더 이름이 '.../upload/...'인 것으로 보입니다). 사용자가 웹 루트에 자료를 업로드하는 것을 허용하지 않습니다. –

+0

@Jonathan Kuhn 맞습니다. 안전한 업로드를 원하고 "해커"가 업로드 된 파일에 대한 액세스 권한이 없도록 스크립트를 중단하려고합니다. – Cosmin

답변

1

, 그리고 코드 :

이 컨트롤러에 있습니다

나는 내가 쓰기 무슨 코드를 보여줍니다.

해당 경로에서 데이터를 가져 오도록 아파치 또는 nginx를 구성해야합니다.

RewriteRule ^uploads/(.*)$ /var/www/application/upload/img/$1 [R=301,NC,L] 

나는 그것이 작동 모르겠지만,이 아이디어입니다 :

아파치 htaccess로에서 당신은 시도 할 수 있습니다. 의 nginx에서

이 같은 것을 확인하실 수 있습니다 : 다시

location /uploads/* { 
    try_files /var/www/application/upload/img/$query_string; 
} 

내가이 서버 마스터, 아니에요, 그것은 작동합니다 모르겠지만를 이것은 당신이 달성하고자하는 것 인 경우 나는 그것을 검사 할 것을 제안 할 것이다.

+0

만약 내가 직접 파일에 액세스 할 수 있습니다 ... 당신은 왜 그냥 accesibles 그냥 로컬 호스트 (PHP)에서하고 아니라 직접 액세스 할 수 있도록 알고있다. – Cosmin

+1

보안을위한 것이라면 게시글에서 작성한대로 PHP를 사용해야하므로 사용을 줄이기 위해 캐싱을 사용할 수 있습니다 –

관련 문제