مشکل دانلود فایل

lady64

New Member
سلام . خسته نباشید . من جستجو که کردم این کد رو برای دانلود کردن یک فایل در php پیدا کردم .
[PHPS]

<a href="downloadfile.php">download file</a>
[/PHPS]

صفحه ی doawnlodfile.php
[PHPS]
<?php
$size = filesize($FilePath . $FileName) ;
header("Content-Type: application/force-download; name=\"". $FileName ."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". $size ."");
header("Content-Disposition: attachment; filename=\"". $FileName ."\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo (readfile($FilePath . $FileName));
?>
[/PHPS]

حالا نمیدونم به جای $filename و $path چی بزارم که مثلا یک فایل doc یا txt رو که داخل پوشم دارم ، دانلود کنه . مسیر و اسم فایل رو دادم اما نشد و خود صفحه ی doawlonfile.php دانلود میشه . میشه بگید چکار کنم ؟ واقعا ممنونم
 

lady64

New Member
خب کد همینه . اسم و پسوند فایل رو چون تو همون پوشه ی جاری هست ، مستقیم دادم . الان دانلود میکنه ( دیگه خود downloadfile.php دانلود نمیشه و این حل شد ) ولی وقتی میرم فایل دانلود شده رو باز میکنم ، اگه docx باشه باز نمیکنه و در مورد فایل png هم error میده برای باز شدنش.
[PHPS]

<?php
$size = filesize("radio.png") ;
header("Content-Type: application/force-download; name=\"". "radio.png" ."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". $size ."");
header("Content-Disposition: attachment; filename=\"". "radio.png" ."\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo (readfile("radio.png"));
?>


[/PHPS]
 

lady64

New Member
لینکی که دادید رو نگاه کردم ؛ اما نمیدونم باید الان کجای کد رو تغییر بدم . اولین بارمه از این کد استفاده میکنم . میشه بگید کجا رو باید چه تغییری بدم ؟ ممنون میشم . اگه عجله نداشتم حتما بیشتر مطالعه میکردم تا جوابو پیدا کنم . ممنون از اینکه کمک میکنید.
 

lady64

New Member
طبق توضیح هات اینجا
http://stackoverflow.com/questions/...nt-type-application-force-download-for-mobile

این روش روش درستی نیست ، چون به مرورگر نمی گید نوع فایل چه نوعی هست برای همین بروز اشکال می کنه
بهتره برای هر نوع فایل header همون فایل رو قرار بدید تا دانلود بدون مشکل انجام بشه

ببینید . مثلا من میخوام یک عکس png رو که در پوشه ی جاری وجود داره دانلود کنم . اینو برای تست دارم انجام میدم ولی ظاهرا دانلود میشه اما فایل رو باز نمیکنه . هر دو روش زیر رو استفاده کردم اما نتیجه نمیده.علت چیه.ممنون میشم بگید .
راه اول :
[PHPS]
$file="radio.png";
$type="image/png";
$data=file_get_contents("png/".$file);
$size=strlen($data);
header("content-disposition:attachment; filename=$file");

header("content-type:$type");
header("content-length:$size");
echo $data;


[/PHPS]

راه دوم :
[PHPS]
$size = filesize("radio.png") ;
header("Content-Type:image/png; name=\"". "radio.png" ."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". $size ."");
header("Content-Disposition: attachment; filename=\"". "radio.png" ."\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo (readfile("radio.png"));


[/PHPS]
 

silverboy65

Member
شما 2 تاره دارید ، یکی header کردن و ریدایرکت به فایل مورد نظر
مثل :
PHP Code:

header("location: yourfile");


اما در مورد کدی که گذاشتید من مشکلی نمی بینم ( راه دوم ) ، فقط آخرش نباید echo کنید ، به هر حال من دارم از این روش استفاده می کنم ، فقط مشکل این روش اینه که از فایل extension نوع فایل رو تشخیص می ده که شاید خیلی کامل نباشه
البته این روش چون فایل تغییر نام پیدا می کنه $type[1] همیشه extension فایل هستش و موقع آپلود نوع فایل رو تشخیص می ده و extension مناسب هم براش قرار می ده
برای همین اگر قراره کاربران فایل رو آپلود کنند بهتره کمی تغییرات تو این کد بدید یا اینکه مثل خط بالا کار کنید
PHP:
$type = explode('.', $pms->pmdetail[$i]['attach']);
                switch($type[1])
                {
                    case 'jpg':
                         $ext = 'image/jpeg';
                     break;
                     case 'doc':
                         $ext = 'application/msword';
                     break;
                     case 'pdf':
                         $ext = 'application/pdf';
                      break;
                }
                // Must be fresh start
              if( headers_sent() )
                die('Headers Sent');
            
              // Required for some browsers
              if(ini_get('zlib.output_compression'))
                ini_set('zlib.output_compression', 'Off'); 
                $fullPath = '../../userfiles/'.$pms->pmdetail[$i]['attach'];
                $fsize = filesize($fullPath);
                $path_parts = pathinfo($fullPath); 
                header("Pragma: public"); // required
                header("Expires: 0");
                header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                header("Cache-Control: private",false); // required for certain browsers
                header("Content-Type: $ext");
                header("Content-Disposition: attachment; filename=\"download.$type[1]\";" );
                header("Content-Transfer-Encoding: binary");
                header("Content-Length: ".$fsize);
                ob_clean();
                flush();
                readfile( $fullPath );
 
آخرین ویرایش:

lady64

New Member
ممنونم . ولی اولین راهی که شما گفتید ( استفاده از header ) در مورد عکس فقط عکس رو باز میکنه ، مثل حالت دانلود صفحه ای برای ذخیره نمیاد . و برای فایل های دیگه هم مثل docx خطا میده . Echo رو برداشتم . نتیجه ای نداد.
درسته بهتره نوع فایل اینجا تعیین نشه ، ولی من چون اولین بارمه میخوام یک نمونه رو تست کنم . بهرحال ممنون . شما زحمت کشیدید.
 

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

بالا