2016-03-16 72 views
0

我有一個網站在PHP和CodeIgniter用戶上傳他們的個人資料圖片和個人資料圖片存儲在名稱爲pic_uid.jpg的文件夾。.htaccess文件停止訪問與直接URL的圖片

然後我的腳本從相同的文件夾加載圖片。

我想停止直接訪問使用.htaccess文件的圖片。

一樣,如果PIC路徑是

http://localhost/myweb/uploads/users/pic_19.jpg 

如果某些一種類型的這種直接的路徑,他將不能訪問PIC但是當我的腳本調用的這張照片,他可以訪問並顯示照片。

我已經嘗試了很多選擇,但是當我停止訪問目錄時,我的腳本也無法加載圖片。

如何實現這一目標?

感謝

回答

2

你可以做這樣的事情。有一個目錄說,secured。而這個目錄裏面,把這個.htaccess

Deny From All 

而現在,存儲所有圖像文件有:

+ secured/ 
    - image-1.png 
    - image-2.png 
    - image-3.png 

,並在你的PHP腳本,使用代理服務器:

<?php 
    ob_start(); 
    /* true if the conditions met, like coming from the script or something */ 
    $right_user = true or false; 
    if ($right_user) { 
    header("Content-type: image/png"); 
    echo file_get_contents("secured/" . $_GET["file"]); 
    die(); 
    } else { 
    header("Content-type: text/plain"); 
    die("Ha ha! Can't steal!"); 
    } 

爲了重申我所做的一切,我在Cloud9處創建了一個回購協議。在這方面,我有以下文件:

└── php 
    ├── index.php 
    ├── insecure.php 
    └── secured 
     ├── .htaccess 
     └── hello.txt 

而且每個文件已是這樣的:

insecure.php

<?php 
    header("Content-type: text/plain"); 
    if (file_exists("secured/" . $_GET["file"])) 
     echo file_get_contents("secured/" . $_GET["file"]); 
    else 
     echo "404! File Not Found."; 
    die(); 
?> 

secured/.htaccess

Deny From All 

secured/hello.txt

Hello, World. 
I am not accessible through normal requests. 
My location is in /php/secured/hello.txt. 

演示

注意:我在一個免費帳戶,所以服務器只運行一段時間。請利用它。

+0

感謝您的答覆,但它不工作,首先,當我在我看來,文件中使用此代碼,它只能說明變化微小的圖像和所有頁面的數據已經一去不復返了。也沒有載入實際圖片 – user3412718

+0

@ user3412718你真的把代碼放在什麼地方?你可以顯示**你的**代碼嗎? –

+0

我用你寫完全相同的代碼,但在我看來代碼點火器的文件中,有兩個問題之一,當我把'標題(「內容類型:image/PNG」);'在視圖文件中所有的輸出了,第二個文件的內容不正確讀取,只有空白圖像來了...我檢查文件的路徑'file_get_contents'和正確的路徑 – user3412718

0

對於直接URL
的codeiginiter 副本使用URI這個代碼在你的routes.php文件事先知情同意的停止訪問

$route['uploads/users/(:any)'] = "page_not_found"; 

此代碼封鎖了所有的URL訪問一個文件夾上傳/用戶

+0

我以前不工作和如何我會添加所有每張圖片的url行數? – user3412718

+0

@ user3412718遵循笨 –

+0

對不起兄弟的本指南,但我沒有找URI路徑,我期待的回採到圖像 – user3412718