PDA

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



fh_joker
شنبه 03 مرداد 1394, 11:05 صبح
سلام
برای دانلود از کد زیر استفاده می کنم. توی سایت های دیگه دارم استفاده می کنم مشکلی نداره ولی الان روی سایت دیگه به جای اینکه دانلود کنه بازش می کنه.
کد دانلود :

function downloadFile($fullPath){
// 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');

// File Exists?
if( file_exists($fullPath) ){

// Parse Info / Get Extension
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);

// Determine Content Type
switch ($ext) {
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;
default: $ctype="application/force-download";
}

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: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
readfile( $fullPath );
return true;
} else
die('File Not Found');

}

مثلا برای تصویر png

�PNG

���
IHDR�����������a�� �IDAT8��С�@E�SA)�")!���@���@ )aKAPf3� a���f����^�N�g�yfo2m"h�L�E�>���lpM౷�����υ��i)<����R��r���L����A� A�C�]f�O�5
p�c<�~2�P�#{������IEND�B`�

ولی تصویر رو دانلود نمیکنه.
ممکنه از چی باشه

Unique
شنبه 03 مرداد 1394, 13:31 عصر
برای اینکه همیشه دانلود کنه باید content-type را بگذاری application/octet-stream وگرنه ممکنه مرورگر چون میتونه typeرا نمایش بده بخواد نمایش بده.

fh_joker
شنبه 03 مرداد 1394, 13:52 عصر
ممنون که جواب دادید.
ولی حل نشد.
کدهای دیگه هم که برای دانلود هست گذاشتم بازم فایل رو باز می کنه.
توی گوگل کروم هم تست کردم نتیجه همینه.

phpdev
شنبه 03 مرداد 1394, 14:37 عصر
آخر دستورات یه exite() ناقابل بزن :لبخندساده: بجای return true

us1234
شنبه 03 مرداد 1394, 16:44 عصر
مشکل از این 2 خط است :


ob_clean();
flush();


باید حذف کنید .

Unique
شنبه 03 مرداد 1394, 18:38 عصر
us1234 درست میگه ! من حواسم به obLclean و flush نبود. شما که Output bufferingجایی نمیکنی ، اینها را برای چی گذاشتی ؟

fh_joker
یک شنبه 04 مرداد 1394, 11:50 صبح
از اینکه وقت گذاشتید ممنون ولی هیچ کدوم جواب نداد.
فکر کنم مشکل توی کدهای دانلود نباشه وقتی مستقیم از url صفحه رو باز می کنم پنجره دانلود میاد.
پارامترها رو با این شکل به صفحه دانلود ارسال کردم.

('body').find('.down_row').click(function(){
var tthis = $(this).parents().eq(1);
$.ajax({
type: 'POST',
url: 'downloadfile.php',
data : { action : 'download_tb_backup_row',id :tthis.attr('name')},
//dataType:"json",
success: function(data){
},
});
})
توی صفحه دانلود پارامترها دریافت میشه.

Unique
یک شنبه 04 مرداد 1394, 12:08 عصر
خوب اینطوری data را خودتون باید handle کنید و طبیعیه که دیالوگ دانلود باز نشه !

fh_joker
یک شنبه 04 مرداد 1394, 12:41 عصر
میشه توضیح بیشتری بدید.

من برای همه کدها به همین شکل عمل کردم توی صفحه ای که توی url هست پارامترها رو گرفتم و با کد php داده ها رو از دیتابیس گرفتم و با نمایش دادم. چرا این یکی مشکل داره؟؟

الان لینک دانلود رو توی <a> گذاشتم و توی href لینک دادم به صفحه دانلود، دانلود میشه.

Unique
یک شنبه 04 مرداد 1394, 14:34 عصر
الان لینک دانلود رو توی <a> گذاشتم و توی href لینک دادم به صفحه دانلود، دانلود میشه.
این کار درسته و داره به خوب یکار میکنه !


من برای همه کدها به همین شکل عمل کردم توی صفحه ای که توی url هست پارامترها رو گرفتم و با کد php داده ها رو از دیتابیس گرفتم و با نمایش دادم. چرا این یکی مشکل داره؟؟

شما دارین به صورت آجاکسی صفحه را فراخونی میکنین و مرورگر خروجی را به جای اینکه خودش پردازش کنه میده به ajax و ریداد onsuccess تا پردزاش کنه.

fh_joker
یک شنبه 04 مرداد 1394, 17:09 عصر
خیلی کمک کردید.ممنون