PDA

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



zeinab-es'haghi
یک شنبه 01 مرداد 1391, 14:03 عصر
سلام. من توی وب سایتم از این دستور برای دانلود فایل هام استفاده کردم:

header('Content-disposition: attachment; filename='.$download);
readfile($path);

اما هر بار یه مشکلی داره!!!!!!! وقتی یک فایل اندروید مثل x.apk رو از سایت دانلود می کنم و به گوشیم بلوتوث می کنم،می نویسه تو پارسینگش مشکل داره و نصب نمیشه.
همین فایل رو به صورت زیپ گذاشتم،وقتی زیپ شده رو بلوتوث کردم،نتونست بازش کنه اما اگه تو کامپیوتر unzip کنم ،مشکلی نداره و فایل توش سالمه!!!!
مشکلش چیه آخه؟ عجیبه !

بعد کلا وقتی سایتمو با موبایل باز می کنم و میزنم روی دانلود محصولات،فایل html دانلود می کنه یا اصلا دانلود نمیشه و ....

کسی میدونه مشکل چیه؟ راه حلی سراغ دارید؟!!!!!!!

آدرس سایتم : http://iranmobilegames.com/

us1234
دوشنبه 02 مرداد 1391, 00:24 صبح
اگر بخاهید فایل را توی هدر قرار بدید باید تمام جزییات فایل را ست کنید . مثل حجم فایل . نوع فایل و... . به این هدر ها توجه کنید

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: $mtype");
header("Content-Disposition: attachment; filename=\"$newName\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);

zeinab-es'haghi
دوشنبه 02 مرداد 1391, 16:27 عصر
اگر بخاهید فایل را توی هدر قرار بدید باید تمام جزییات فایل را ست کنید . مثل حجم فایل . نوع فایل و... . به این هدر ها توجه کنید

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: $mtype");
header("Content-Disposition: attachment; filename=\"$newName\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);

من این کدها رو نوشتم اما باز هم همون مشکل وجود داره!!!
$extension=end(explode(".", $download));
$ctype="application/".$extension;

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=\"$download\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($download));
readfile($path);

امید امرایی
دوشنبه 02 مرداد 1391, 17:14 عصر
سلام،

معمولا اگر هدر ها رو درست ارسال کرده باشید، معیوب بودن فایل به دلیل اینه که ممکنه چیزی در اون صفحه echo شده باشه.
چک کنید جایی در صفحه چیزی به اشتباه print یا echo k نشده باشه.
یک warning و یا note نا خواسته هم می تونه همون نتیجه رو داشته باشه.

zeinab-es'haghi
پنج شنبه 19 مرداد 1391, 02:09 صبح
یه وارنینگ داشت که برطرفش کردم،مشکل دانلود اون فایل حل شد،اما یک فایل دیگه با همون پسوند هست که دانلودش نمی کنه !!! خیلی عجیبه مشکلاتش.
البته کل حجم فایلو دانلود می کنه اما آخرش ارور میده! فایل های زیپ و رر رو هم مشکل داره. الان کد دانلودم اینه :

$extension=end(explode(".", $download));
$ctype="application/".$extension;

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=\"$download\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($download));
readfile('./mahsoolat/'.$download);

pejman_view
پنج شنبه 19 مرداد 1391, 03:20 صبح
سلام

نگفتید دقیقاً آن content-type را چی می زنید مانند زیر عمل کنید:


header('Content-Type: application/vnd.android.package-archive');


و برای کد شما

<?php
header('Content-Type: application/vnd.android.package-archive');
header('Content-Disposition: attachment; filename="test.apk"');
header("Content-Length: ".filesize($download));
readfile('test.apk');
?>

یا علی موفق باشید

فکر کنم در همین حد استفاده از هدر کافی باشد

zeinab-es'haghi
پنج شنبه 19 مرداد 1391, 16:14 عصر
سلام

نگفتید دقیقاً آن content-type را چی می زنید مانند زیر عمل کنید:


header('Content-Type: application/vnd.android.package-archive');


و برای کد شما

<?php
header('Content-Type: application/vnd.android.package-archive');
header('Content-Disposition: attachment; filename="test.apk"');
header("Content-Length: ".filesize($download));
readfile('test.apk');
?>

یا علی موفق باشید

فکر کنم در همین حد استفاده از هدر کافی باشد


content tipe همون extension هست دیگه. آخه پسوند های گوناگون برای دانلود هست ،فقط apk , zip نیست. jar و jad و ... هم هست. واسه همین اول پسوندش رو میگیرم و اونو به جای content type میذارم!
واسه هر پسوندی یه بازی در میاره! مگه راهش همین نیست آخه؟

pejman_view
پنج شنبه 19 مرداد 1391, 19:37 عصر
سلام

این راه رو امتحان کردید یا خیر؟ و ضمناً content-type هم extension نیست در اصل mime-type هست و توصیه می شود یک متغیر مانند زیر بسازید:
یک آرایه از mime-type های مورد نیازتان درست کنید:

$mime = array('apk'=>'application/vnd.android.package-archive','jar'=>'application/java-archive');
فقط کافی است اکستنشن را بعنوان اندیس آرایه بنویسید تا به شما mime را برگرداند:

$mime[$extension];</span>

واسه هر پسوندی یه بازی در میاره! مگه راهش همین نیست آخه؟
در جواب باید بگم برنامه نویسی آسان نیست و حوصله می خواهد. باید با بعضی از نواقص و دقت های بعضی از زبان های ماشینی بسازید.

با آرزوی موفقیت