PDA

View Full Version : دانلود فایل در php



misagh01
دوشنبه 31 تیر 1392, 16:33 عصر
سلام دوستان
من با کد زیر میخواهم یک فایل pdf دانلود شود ولی در عمل به جای دانلود فایل، سورس pdf که یکسری حروف و اعداد نا مفهوم هست در مرورگر نمایش داده میشود لطفا دوستان کمک کنند:


$strDownload = $strDownloadFolder.$arrCheck['file'];
//get the file content
$strFile = file_get_contents($strDownload);
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename=' . $arrCheck['file']);
//echo the file to the user
echo $strFile;

rezaonline.net
دوشنبه 31 تیر 1392, 20:49 عصر
خب چون پلاگین pdf reader رو مرورگرت نصب هست اینطوری نشون میده .
با مرورگر دیگه ای چک کن ، وقتی pdf reader روش نباشه میاد برای دانلود .

misagh01
دوشنبه 31 تیر 1392, 22:46 عصر
ممنون آقا رضا، در همه مرورگرها این طور است، در ضمن فایل pdf را نشان نمیدهد بلکه یکسری کد و حروف به هم ریخته نشان میدهد که فکر کنم کدهای فایل pdf باشد چون آخرش یک EOF هم نوشته (انتهای فایل). این به نظرتان به علت چیست؟

البته من یک همچین مشکلی قبلا داشتم ولی وقتی فایل php را با notepad++ در حالت utf8 without BOM ذخیره میکردم بر طرف میشد و لی این بار رفع نشد. به نظر شما این بار هم مشکل BOM هست (یعنی کاراکترهای ناخواسته ای که در فایل ذخیره میشوند و مشکل زا میشوند)؟

rezaonline.net
سه شنبه 01 مرداد 1392, 00:23 صبح
دستورات بالا را با دستور زیر جایگزین کنید کاملاً

$strDownload = $strDownloadFolder.$arrCheck['file'];
$strFile = file_get_contents($strDownload);
$filename = basename($strDownload);
$mime = 'application/x-download'; // or application/pdf

if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") !== FALSE)
{
header('Content-Type: "'.$mime.'"');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: binary");
header('Pragma: public');
header("Content-Length: ".strlen($strFile));
}
else
{
header('Content-Type: "'.$mime.'"');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Pragma: no-cache');
header("Content-Length: ".strlen($strFile));
}
exit($strFile);

misagh01
سه شنبه 01 مرداد 1392, 15:01 عصر
آقا رضا خیلی ممنون از کدهای بالا ولی مشکل حل نشد و مثل قبل هست.

rezaonline.net
سه شنبه 01 مرداد 1392, 20:03 عصر
به جان عمه ام این باید کار کنه.
یه لینک تستی بدید بررسی بشه ، آدرس فایل هم باید بصورت سیستمی وارد بشه . نه URL .
یه بررسی بکنید

misagh01
سه شنبه 01 مرداد 1392, 22:19 عصر
با تشکر از پیگیریتون آقا رضا.
من آدرس را سیستمی هم میدهم همین مشکل را دارد.

آیا ممکن است مشکل همون BOM ها باشد؟ کسی غیر از خود notpad++ ابزار کاملی برای رفع مشکل BOM ها سراغ دارد؟

rezaonline.net
چهارشنبه 02 مرداد 1392, 17:38 عصر
این الان باید کار کنه ، احتمالا مشکل از یه جای دیگه است

Mahdi-563
جمعه 04 مرداد 1392, 11:11 صبح
موافقم کد کاملا صیح است

من نمونه همین کد را چند روز پیش نوشتم

شاید مشکل از مرور گره

misagh01
شنبه 05 مرداد 1392, 00:25 صبح
نمیدونم، با چند مرور گر تست کردم همش همین مشکل رو داره. فعلا که لینک مستقیم دادم به جای لینک غیر مستقیم که میخواستم با کدهای بالا به کاربر بدهم.
از دوستان هم ممنونم.

abbasi2244
یک شنبه 21 تیر 1394, 13:50 عصر
سطح دسترسی فایل رو روی 355 بگذار اینجوری خود فایل توسط سیستم خونده نمیشه و فقط بارگذاری میشه :متفکر:

Unique
یک شنبه 21 تیر 1394, 14:32 عصر
از این استفاده کن ،‌ باید جواب بده :


$filename = "path/to/file";
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream'); // to force download
OR
header("Content-type: application/pdf"); // to read by default pdf reader plugin
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;