PDA

View Full Version : مشکل در دانلود فایل



lady64
یک شنبه 22 مرداد 1391, 22:55 عصر
سلام . من از این کد برای دانلود استفاده میکنم . اشکال کدنویسیم چیه که فایل رو با اینکه ظاهرا دانلود میکنه ؛ اما وقتی فایل رو میخوام باز کنم ؛باز نمیکنه . چه تصویر ، چه متنی و ...
اولین بارمه از کد دانلود استفاده میکنم . ممنون میشم دقیق بگید کجا رو باید تغییر بدم ؟


<?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"));
?>

lady64
دوشنبه 23 مرداد 1391, 05:29 صبح
ببینید . مثلا من میخوام یک عکس png رو که در پوشه ی جاری وجود داره دانلود کنم . اینو برای تست دارم انجام میدم ولی ظاهرا دانلود میشه اما فایل رو باز نمیکنه . هر دو روش زیر رو استفاده کردم اما نتیجه نمیده.علت چیه.ممنون میشم بگید .
راه 1 :


$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;


راه 2 :


$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"));

lady64
دوشنبه 23 مرداد 1391, 10:48 صبح
بنظرم همتون بلدین . ممنون میشم راهنمایی کنید . :ناراحت:

Unique
دوشنبه 23 مرداد 1391, 12:34 عصر
دوست عزیز readfile نیاز به echo نداره !
مطمئن بشین چیزی غیر از header برای browser نمیفرستین ! حتی یک space را هم echo یا توی فایلتون گذارین !
البته نیاز ی هم به Cache-Control, Content-Transfer-Encoding ، Expires ,Pragma نیست !

lady64
دوشنبه 23 مرداد 1391, 16:26 عصر
ممنونم . همه ی این ها رو رعایت کردم . اول صفحه هم ob_start() گذاشتم اما نمیشه که نمیشه . فایل رو بعد از دانلود که میخوام باز کنم ، میگه فایل یا خراب شده یا خیلی بزرگه . در صورتی که حجم کمی داره .

Unique
سه شنبه 24 مرداد 1391, 01:18 صبح
ob_start() نمیخواد !
اگه مسیر فایل را توی متغیر زیر بگذارین باید کار بده :

$file_name = "path/to/file";
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file_name));
readfile($file_name);

راستی چک کنین BOM نداشته باشه فایلتون ! نیازی هم نیست type را برابر png بگذارین !

lady64
سه شنبه 24 مرداد 1391, 09:14 صبح
یک دنیا ممنون . حل شد . علاوه بر کدی که دادید با راهنمایی شما یادم اومد جایی آقای شهرکی گفته بودند :
توی Dreamweaver باید در پنجره Save As در کادر Unicode Normalization گزینه C رو انتخاب کرده و گزینه (Include Unicode Signature (BOM رو غیرفعال کنید.
اینو برای کسانی گفتم که مثل من مشکل دانلود دارند.
واقعا ممنونم . چون بار اولم بود میخواستم یک نمونه ی ساده رو تست کنم ، حالا میخوام کاری کنم ، هر چی آپلود میکنم ، قابل دانلود باشه ، نه یک مورد خاصی که من آدرس میدم . اینو هم امتحان میکنم . اگر سوالی داشتم مزاحمتون میشم.