2012-04-27 2 views
0

Мне нужно пройти аутентификацию пользователя, чтобы просмотреть/загрузить некоторые файлы на моем сайте. Мои файлы находятся в папке с именем A внутри public_html/mySiteName/FoldesName(A)/subFolder/sample.(*.*). Я использовал .htaccess, чтобы проверить подлинность пользователя или нет.Forcing Загрузка файла с использованием php-скрипта в CentOs 5.6


МОЙ .htaccess код:

RewriteEngine on # Enable rewrite 
RewriteCond %{REQUEST_FILENAME} \.*pdf$|.*psd$|.*indd$ [NC] 
RewriteRule (.*) http://MySiteIp/admin_panel/auth.php?file=$1 [NC,L] 

Мой загрузить сценарий выглядит следующим образом:

if($authed){ 

    if(file_exists("../".$_GET['file'])) { 
     //Create the pointer to our file and open it as read-only binary data 
     $fp = fopen($file,'rb'); 

     // Send headers telling browser to download our passed data 
     header("Content-Type: application/force-download"); 
     header("Pragma: no-cache"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Content-Length: " . filesize($file)); 
     header("Accept-Ranges: bytes"); 
     header("Content-Disposition: attachment; filename=\"$file\""); 
     while (!feof($fp)) { 
      echo(@fgets($fp, 8192)); 
     } 

     //Here comes the data 
     fclose($fp); 
     //and quit 
     exit; 
    } else { 
     echo "No file exists !!!"; 
    } 
} 

Когда я проверить его на моей локальной машине с XAMPP Server, установленной на нем. Оно работает. Но на моем хосте я получаю сообщение об ошибке «NO file exists».

Пожалуйста, помогите мне найти, где я не прав ...

+0

Просто подсказка, не дезинфицирующая $ _GET ['файл'], откроет массивную дыру в безопасности. Кто-то может передать значение типа «../../somedirectory/somefile.php», и ваш скрипт выплюнет этот файл. Вы должны удалить хотя бы $ _GET ['файл'] слэшей, прежде чем искать файл. – Nadh

+0

Пожалуйста, помогите очистить $ _GET ['файл']. –

+0

Быстрая и грязная дезинфекция: '$ file =! Empty ($ _ GET ['file'])? (str_replace ('/', '', $ _GET ['file'])): ''; ', а затем использовать' $ file' в 'file_exists()' – Nadh

ответ

1

Я собираюсь думаю, вы удалили echo "here"; die(); прежде чем задавать этот вопрос.

Anywho, структура файла такая же на вашей локальной машине и веб-хостинге?

Действительно ли файл в ../? Возможно, попробуйте использовать полный путь к файлу?/home/youruser/public_html/или независимо от структуры каталогов хоста.

+0

. Ваш веб-хост выглядит так же, как FolderName (A) \ SubFolder \? – ChrisG

+0

Да, это как FolderName (A)/SubFolder/ –

+0

Попробуйте использовать абсолютный путь, например: '/ home/username/public_html/FolderName (a)/SubFolder/file' – ChrisG

Смежные вопросы