سلام
چطوری می شه وقتی فایل را دانلود می کنیم پیغام ذخیره کردن فایل بر روی کامپیوتر بیاید؟ مثلا من می خوام یه فایل pdf دانلود کنم وقتی روی لینک آن کلیک می کنم در مرورگر باز می شه، چه طوری به آن بگویم که پنجره دانلود بیاید؟؟
با تشکر
Printable View
سلام
چطوری می شه وقتی فایل را دانلود می کنیم پیغام ذخیره کردن فایل بر روی کامپیوتر بیاید؟ مثلا من می خوام یه فایل pdf دانلود کنم وقتی روی لینک آن کلیک می کنم در مرورگر باز می شه، چه طوری به آن بگویم که پنجره دانلود بیاید؟؟
با تشکر
تا جایی که من باش ور رفتم این بیشتر به browser کاربر بستگی داره چون اونه که روی دستگاهش تعرییف کرده ( یا شده ) که این فایلها رو این کار کن.
ولی اگر خیلی برات مهم نیست آن را zip rar ... تبدیل کن که پیشفرض همه برای آنها داونلوده.
خب اگه می شه تا اون قسمت هایی رو که ور رفتین بگید شاید مشکل ما حل شد.
شما می تونید با استفاده از تابع header و خوندن محتوی آن فایل به جای اجرای آن فایل , فایل موردنظر را دان لود می کند
(که دیگر بحث شناسایی نوع فایل (با توجه به پسوند) توسط مرورگر و نحوه عکس العمل به آن (نمایش یا دان لود) پیش نیاید)
یک نمونه سورس جهت دانلود برایتان می گذارم:
پارامتر file جهت تعیین نام فایل جهت دان لود به این فایل ارسال می شود
و همچنین در ابتدای برنامه متغیر zipfile نیز اگر برابر true باشد ابتدا فایل را فشرده و سپس دان لود می کند (شما می تونید در مورد فایلهای مختلف متفاوت عمل کنید به طول مثال در صورت بالا بودن حجم فایل دان لودی (با توجه به تشخیص اندازه سایز فایل متغیر ارسال شده) فایل را ابتدا فشرده کنید و سپس دان لود)
و همچنین جهت انجام عملیات امنیتی (مثلا عدم تشخیص محل اصلی فایل برای دانلود) نیز می تونید متغیر file را به صورت کدشده و یا بدون اشاره به مسیر اصلی به سورس php موردنظر ارسال کنید و در آنجا مسیر اصلی را به ابتدای متغیر file اضافه کنید)
<?البته فکر کنم قبلا قبل از خرابی محتوی سایت که باعث بازگشت به تاریخ 17 خرداد شد بنده جواب این سؤال شما را داده بودم حتی بعد از دو پست اشاره به نام کلاس جهت فشرده سازی اطلاعات نیز شده بود
// change php.ini gdlibzip
//output_buffering = Off ; Output buffering allows you to send header lines (including cookies)
//zlib.output_compression = On ;
//extension=php_zlib.dll
ini_set('output_buffering','off');
ini_set('zlib.output_compression','On');
//Start Output buffering
ob_start();
$zipfile = false; // if this variable ture the file for download before download compress file
$file = $HTTP_GET_VARS['file'];
if(!file_exists($file)) {
echo '<html><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1256"></head><body></body></html>';
echo '<script>alert(" the file '.$file.' is not found");</script>';
echo '<script>history.back(-1);</script>';
exit;
}
if ($zipfile) {
$file = basename($file);
$ExtDn = pathinfo($file);
$ExtDn = $ExtDn["extension"];
$zipnamefile = substr($file,0, strlen($file)-strlen($ExtDn)) . 'zip';
require('zip.lib.php');
$zipfile = new zipfile($zipnamefile,'', '');
$zipfile->addFileAndRead(basename($file));
echo $zipfile->file();
}
else {
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-msdownload");
header("Content-Disposition: attachment; filename=".basename($file).";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile("$file");
}
?>
خیلی ممنونم
جواد جان یونیت unzip که کل zip رو بخونه و خودکار تمام محتویات اون رو باز کنه رو هم داری داداش :لبخند:
با تشکر ، یا حق ...
آره عزیزم موجود هست :چشمک:
کتابخانه pclzip یکی از بهترین نمونه کلاسها جهت کار با فایلهای فشرده هست (ایجاد فایل فشرده, افزودن و ... از فایل فشرده , لیست کردن محتوی فایل فشرده ، بازیابی و ....) خلاصه همه کارهایی که بتوان با فایلهای فشرده کرد را دارد.
بنده در چندین نمونه برنامه جهت آپلود اطلاعات توسط کاربر و ... از این کلاس استفاده کرده ام
کافی است تا فایل را در یک فرم با خاصیت enctype="multipart/form-data" بر روی سرور آپلود کنید (منظور همان شاخه تمپ مربوطه هست) و سپس بعد از چک کردن نوع خصلت فایل در سرور و.... فایل موردنظر را توسط کلاس موردنظر فراخوانی و اکستراکت کنید (البته دقت کنید که اگر فایل ثابتی هست و یا شاخه خاصی در مسیر موردنظر جهت اکستراکت می باشد شما باید پرمیشن آن را در سرور تنظیم نمایید (777)
جهت اطمینان بنده نمونه سورس استفاده شده برای این منظور را در اینجا قرار می دهم
نکته: نام آبجکت جهت انتخاب فایل در فرم userfile هست
$fsql=$HTTP_POST_FILES['userfile']['name'];
if (!empty($fsql)) {
$typefile = $HTTP_POST_FILES['userfile']['type'];
$from=$HTTP_POST_FILES['userfile']['tmp_name'];
if (is_uploaded_file($from)) {
if ($typefile == 'application/x-zip-compressed') {
include('zip.php');
$archive = new PclZip($from);
if (($v_result_list = $archive->extract()) == 0) {
die("Error in Uncompres file : ".$archive->errorInfo(true)); }
$to = $v_result_list[0]['stored_filename'];
}else{
$fsql=$HTTP_POST_FILES['userfile']['name'];
$toInfo=pathinfo($fsql);
$Ext=$toInfo['extension'];
$file = basename($fsql,'.'.$Ext);
$to = $file.'.'.$Ext;
move_uploaded_file($from, $to) or die(exit);
}
echo "<script>alert(' با موفقیت آپلود شد".$to." فایل')</script>";
}
else{
echo "<script>alert('".$HTTP_POST_FILES['userfile']['error']."اشکال شماره <BR>".'سیستم قادر به آپلود این فایل نیست'."')</script>";
// echo '<script>history.back(-1);</script>';
exit;
}
}
بهتره به جای
application/x-msdownload
از
application/force-download
استفاده بشه، چون استاندارد ه و در همه سیستم عامل ها جواب میده.
دوستان من از این اسکریپتی که شما زحمتشو کشیدین می خوام استفاده کنم ولی یه مشکل دارم که توضیح میدم :
ببینید من یه فابل php دارم که یک پارامترهای مسیر تصویر و طول و عرض رو میگیره و تصویر رو resize شده بر می گردونه. حالا می خوام اون تصویری رو که این فایل بر می گردونه بذارم برای دانلود ولی نمیشه. البته در مورد تصویری که برمی گرده مطمئنم چون می تونم نمایشش بدم. ولی مشکل من همین دانلودش هست.
آدرس تصویر من این میشه : show_image.php?filename=manuscript_images/08/0000.jpg&width=1024&height=768
آقا جاوید، آقا امید، آقا میلاد، اساتید محترم؛
من واقعاً گیر کردم. لا اقل بگید شدنی هست یا نه؟
تیکه کدت رو بگذار اینجا
مشکلی نباید داشته باشه
<?
//get $_GET info
header("Pragma: public");
header("Expires: 0");
header("Content-Type: application/x-msdownload");
.
.
.
//create image save in $img
echo $img;
باید کار کنه یک چکی بکن
اون ها که نقطه گذاشتم رو همونی بگذار که بچه ها قبلا گذاشتند
<?
// change php.ini gdlibzip
//output_buffering = Off ; Output buffering allows you to send header lines (including cookies)
//zlib.output_compression = On ;
//extension=php_zlib.dll
ini_set('output_buffering','off');
ini_set('zlib.output_compression','On');
//Start Output buffering
ob_start();
$path=$_GET['path'];
$zipfile = false; // if this variable ture the file for download before download compress file
$file= "show_image.php?filename={$_GET['path']}&width={$_GET['width']}&height={$_GET['height']}";
if(!file_exists($_GET['path'])) {
echo '<html><head><META HTTP-EQUIV="Content-Type" CONTENT="application/octet-stream; charset=utf-8"></head><body></body></html>';
echo '<script>alert(" the file '.$_GET['path'].' is not found");</script>';
echo '<script>history.back(-1);</script>';
exit;
}
//==========
if ($zipfile) {
$file = basename($file);
$ExtDn = pathinfo($file);
$ExtDn = $ExtDn["extension"];
$zipnamefile = substr($file,0, strlen($file)-strlen($ExtDn)) . 'zip';
require('zip.lib.php');
$zipfile = new zipfile($zipnamefile,'', '');
$zipfile->addFileAndRead(basename($file));
echo $zipfile->file();
}
//==========
else {
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/force-download");
header("Content-Disposition: attachment; filename=".$_GET['name'].".jpg;" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
$img="<img src='$file'>";
//readfile($file);
echo $img;
}
?>
همونطور که گفتم مشکل اینه که من در نهایت یک فایل php رو می دم برای دانلود. البته خروجی اون فایل php یک نصویر هست
نه
else آخری این طوری می گم بشه :
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/force-download");
header("Content-Disposition: attachment; filename=".$_GET['name'].".jpg;" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
$img=changeSize($_GET['name'].".jpg",$_GET['width'],$_GET['hieght'])
echo $img;
مرسی.
فهمیدم چی می گی.
میرم خونه تستش می کنم.
سلام دوستان
بنده یه پیج ساده با زبان پی اچ پی میخوام برای ارائه به استاد
فقط پیج ساده که شامل چند خط نوشته باشه.
اگه میشه بگین با چه برنامه ای نوشته شده
با تشکر