ساخت لينك غير مستقيم

gb_shahin

Member
با سلام خدمت تمامي دوستان
من يك مشكلي دارم با لينك !
من دارم برنامه اي مي نويسم كه كاربران خاص اجازه ورود و دانلود فايل مختص به خودشون رو دارن و تقريبا برنامم هم تمام شده يك مشكلي دارم وقتي يكي نام كاربري و كلمه عبور خود را مي زنه اگر آدرس فايل رو برداره و دفعه بعد تو براسرش بزنه مي تونه بدون ورود اون فايل رو دانلود كنه آيا راحي هست كه بشه اون آدرس رو از كاربر مخفي كرد يا اينكه مثل راپي شير لينك مستقيم داد لطفا هركسي اطلاعاتي داره كمك كنه ؟ با تشكر !
 

sajadmaz

Member
یه فایل به اسم مثلا download.php بساز بعد با mod_rewrite آپاچی هر آدرسی میخوایی براش درست کن مثلا http://mydomain.com/userfile/1203.zip اینو بهش نشون بده اما در حقیقت آدرس تو http://mydomain.com/download.php?id=1023 هست وقتی یوزر به این آدرس مراجعه کرد سشنش رو چک کن اگه ست بود با هدر فایل رو از رو هاستت بخون و اجازه دانلود بهش بده

اگه متوجه نشدی بگو کامل برات توضیح بدم:)
 

gb_shahin

Member
؟

از توجهتون واقعا متشكرم !
من اين سيستم رو براي يك شركت دارم مي نويسم كه مي خوان براي مثال خودشون فايل ها رو براي دانلود كاربرا بزارن كه تعداد گروه هاي كاربري آن بي نهايت است يعني بي نهايت گروه كاربري وجود داره كه هريك از اين گروه ها دسترسي به يك فايل دارن و من براي برنامه يه قسمت مديريت ساختم كه اينا رو توسط اون ادد مي كنن آيا راحي هست كه اين mod_rewrite واسه هر فايل رو توسط php ست كرد
 

sajadmaz

Member
قسمت مديريت ساختم كه اينا رو توسط اون ادد مي كنن آيا راحي هست كه اين mod_rewrite واسه هر فايل رو توسط php ست كرد

اینجاشو درست متوجه نشدم بیشتر توضیح میدی
 

MSJS

New Member
یه فایل به اسم مثلا download.php بساز بعد با mod_rewrite آپاچی هر آدرسی میخوایی براش درست کن مثلا http://mydomain.com/userfile/1203.zip اینو بهش نشون بده اما در حقیقت آدرس تو http://mydomain.com/download.php?id=1023 هست وقتی یوزر به این آدرس مراجعه کرد سشنش رو چک کن اگه ست بود با هدر فایل رو از رو هاستت بخون و اجازه دانلود بهش بده

اگه متوجه نشدی بگو کامل برات توضیح بدم:smile:

من متوجه نشدم ..
با یه مثال عملی تو ضیح بدین !

با تشکر
 

sajadmaz

Member
خوب اول فایل دانلود

download.php
PHP:
function dl_file($file){

    //First, see if the file exists
    if (!is_file($file)) { die("<b>404 File not found!</b>"); }

    //Gather relevent info about file
    $len = filesize($file);
    $filename = basename($file);
    $file_extension = strtolower(substr(strrchr($filename,"."),1));

    //This will set the Content-Type to the appropriate setting for the file
    switch( $file_extension ) {
          case "pdf": $ctype="application/pdf"; break;
      case "exe": $ctype="application/octet-stream"; break;
      case "zip": $ctype="application/zip"; break;
      case "doc": $ctype="application/msword"; break;
      case "xls": $ctype="application/vnd.ms-excel"; break;
      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
      case "gif": $ctype="image/gif"; break;
      case "png": $ctype="image/png"; break;
      case "jpeg":
      case "jpg": $ctype="image/jpg"; break;
      case "mp3": $ctype="audio/mpeg"; break;
      case "wav": $ctype="audio/x-wav"; break;
      case "mpeg":
      case "mpg":
      case "mpe": $ctype="video/mpeg"; break;
      case "mov": $ctype="video/quicktime"; break;
      case "avi": $ctype="video/x-msvideo"; break;

      //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
      case "php":
      case "htm":
      case "html":
      case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;

      default: $ctype="application/force-download";
    }

    //Begin writing headers
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer");
    
    //Use the switch-generated Content-Type
    header("Content-Type: $ctype");

    //Force the download
    $header="Content-Disposition: attachment; filename=".$filename.";";
    header($header );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    @readfile($file);
    exit;
}

if (isset($_GET['DLid']))
{ 

     $dlid = (int) $_GET['DLid'];

     if (isset($_SESSION['user']) AND هرچیزه دیگه){

     // $file آدرس فایلی که میخواین اجازه دانلود بهش بدین 
     // تمام فایل ها رو توی فلدری میریزین و حق دسترسیشو با آپاچی از دیگران بگیرین

     //Example  :     /home/sajad/public_html/DLfiles/    create .htaccess and write  deny from all

      $file = $_SERVER['DOCUMENT_ROOT'].'/DLfiles/'.$esmeshoazDBbegir;     

      dl_file($file);

      }else{
      
        echo 'اجازه دسترسی برای شما صادر نشده است';

       }


}

     

?>

یوزر شما تو آدرس بار میزنه http://mydomain.com/userfile/1520.zip این ادرس رو باید با mod_rewrite آپاچی ترجمه کنید و بدینش به PHP به این صورت که آدرس مثلا بشه http://mydomain.com/download.php?DLid=1520 و ادامه کار

.htaccess File
PHP:
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^userfile/([0-9]+).zip$ download.php?DLid=$1


</IfModule>

موفق باشین
 

gb_shahin

Member
يك سوال من فقط ميخوام فايل مورد نظر كه نامش را از Get ميگيره دانلود شه آيا بغير از ويرايش كه در htaccess كردم بايد ويرايش ديگري در فايل php انجام بدم يا نه ؟ من تا حالا با mod_rewrite كار نكردم ....
 

gb_shahin

Member
من فقط مي خوام دو سشن چك شه اگر درست بود اجازه دانلود بده و لينك دانلودي كه يوزر ميبينه لينك اصلي فايل نباشه كه سري بعد بياد بدونه لوگين دانلود كنه
 

abc#def

Member
فکر کنم این بدردت بخوره

PHP:
<?php
session_start();
if(!$_SESSION['login']){
 header("Location: index.php");
 exit();
}

$file=$_GET['id'];
$file="FOLDER_NAME/".$file;
 $len = filesize($file);
    $filename = basename($file);
    if (!file_exists($file)) 
 { 
  header("Location: index.php");
  exit(); 
  }
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer");
    header("Content-Type: application/x-zip-compressed");
 $header="Content-Disposition: attachment; filename=".$filename.";";
    header($header );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    readfile($file);
    exit; 
?>

فکر کنم که کدش واضحه اگه توضیحی خواستی بگو
 

sajadmaz

Member
فکر کنم که کدش واضحه اگه توضیحی خواستی بگو

این مثل همونی هست که من گذاشتم ، دوستمون میخواد دفعه بعدی بدون سشن فایل را بتونن دانلود کنن خوب راههای زیادی داره اما اگه بقیه لینک رو بدونن میتونن دانلود کنن

یه راهش اونجا که سشن رو چک میکنی یه کد دیگه هم بزار که اگه سشن ست نبود و اون کد ست بود دانلود کنه

PHP:
if (isset($_SESSION['login'] ) or $code = $userCode )
{
     / header DL link 

}
 

جدیدترین ارسال ها

بالا