PDA

View Full Version : سوال: چرا فایل پی دی افی که با php ایجاد کردم بصورت آنلاین نمایش داده نمی شه؟



idocsidocs
پنج شنبه 17 فروردین 1391, 17:32 عصر
با پی اچ پی یه فایل پی دی اف ایجاد کردم و توی سایت بهش لینک دادم اما وقتی روی این فایل کلیک می کنم نمی تونم بصورت آنلاین نمایشش بدم و مستقیما دانلود می شه.

باید چیکار کنم؟

MMSHFE
پنج شنبه 17 فروردین 1391, 17:45 عصر
هدر content-disposition رو ست میکنید؟

idocsidocs
پنج شنبه 17 فروردین 1391, 18:38 عصر
از کلاس TCPDF استفاده می کنم و نمی دونم چه اتفاقی می یافته تا فایل ایجاد بشه.

MMSHFE
جمعه 18 فروردین 1391, 01:34 صبح
ذخیره کردنش مهم نیست، موقع نمایش، جایی که فایل PDF رو نشون میدین، قبلش هدر Content-Disposition رو مثل وقتی که میخواین دانلود غیر مستقیم بگذارین، ست کنید تا مرورگر مجبور به نمایش پنجره ذخیره فایل بشه.
موفق باشید.

idocsidocs
جمعه 18 فروردین 1391, 01:39 صبح
ذخیره کردنش مهم نیست، موقع نمایش، جایی که فایل PDF رو نشون میدین، قبلش هدر Content-Disposition رو مثل وقتی که میخواین دانلود غیر مستقیم بگذارین، ست کنید تا مرورگر مجبور به نمایش پنجره ذخیره فایل بشه.
آخه فایل به صورت مجزا ایجاد می شه و توی سرور ذخیره می شه و دیگه نمی تونم هدر بفرستم. اگر امکانش هست بیشتر توضیح بدید.

MMSHFE
جمعه 18 فروردین 1391, 01:49 صبح
بعد از ساخت فایل مگه لینک رو به کاربر نمیدین؟ مگه مشکل این نیست که وقتی روی لینک کلیک میشه بجای دانلود، توی خود پنجره مرورگر فایل باز میشه؟ خوب برای اینکه مشکل رفع بشه، لینکی که به کاربر میدین رو بجای اینکه این شکلی باشه:

<a href="article.pdf">Download PDF File</a>اینطوری بسازین:

<a href="download.php?file=article.pdf" target="_blank">Download PDF File</a>و توی صفحه download.php این کد رو بگذارین:


<?php
if(!isset($_GET['file']) || !file_exists($_GET['file']) || strtolower(substr($_GET['file'], -3)) != 'pdf') {
header('location: index.php');
}
$file = $_GET['file'];
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="'.$file.'";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($file));
readfile($file);
?>

idocsidocs
جمعه 18 فروردین 1391, 02:22 صبح
مگه مشکل این نیست که وقتی روی لینک کلیک میشه بجای دانلود، توی خود پنجره مرورگر فایل باز میشه
الان وقتی روی فایل کلیک می شه، فایل دانلود می شه.

مهندس مشکل اینه که من می خوام وقتی روی فایل کلیک می شه، فایل توی صفحه مرورگر نمایش داده بشه و دانلود نشه. برای این کار باید چیکار کنم؟

MMSHFE
جمعه 18 فروردین 1391, 11:07 صبح
آهان من برعکس متوجه شدم. این کد رو امتحان کنید:


<?php
if(!isset($_GET['file']) || !file_exists($_GET['file']) || strtolower(substr($_GET['file'], -3)) != 'pdf') {
header('location: index.php');
}
$file = $_GET['file'];
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: application/x-www-form-urlencoded');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($file));
readfile($file);
?>

فکر کنم اینطوری مشکل رفع میشه.