PDA

View Full Version : کار با تابع header()



alimooghashang
دوشنبه 21 دی 1388, 19:32 عصر
با سلام
چطوری میتونم یه فایل از اینترنت را بگم به این اسم تغیر نام بده و برای دانلود منیجر کاربر بفرسته؟

http://mydomain.com/ali.zip

این فایل رو من الان دارم با تابع زیر برای کاربر ارسال میکنم

header("Location: ".$filename);و به نام ali.zip براش ارسال میشه!!!
ولی من میخوام به این اسم بره ali_mydomain.com.zip

میشه همچین کار کرد؟
من اینطوری نوشتم کار میده!!! ولی چون باید فایل دانلود بشه روی سرور اینطوری با محدودیت سرور مواجه میشم!!!



header('Content-type: application/zip');
header("Content-Disposition: attachment; filename=\"$filename_mydomain.zip\"");
readfile($filename);

میخوام مستقیم بره

اینطوری نوشتم کار نداد


header('Content-type: application/zip');
header("Content-Disposition: attachment; filename=\"$filename_mydomain.zip\"");
header("Location: ".$filename);لطفا اگه راهی به نظرتون میرسه معرفی کنید
با تشکر

nextplus
دوشنبه 21 دی 1388, 20:24 عصر
alimooghashang عزیز
آدرس هایی که میگی رو باید بصورت مجازی با htacces بسازی.
اما برای کنترل دانلود که حالا لینک مستقیم به کسی ندی و یا بتونی یوزر رو برای دانلود کنترل کنی باید از یک فایل واسط استفاده کنی
مثال getfile.php
و با فرستادن پارامتر داخل کد تشخیص بدی کدوم فایل رو میخواد.
با فرض اينكه اسم فايلت رو با پارامتر getfile.php?file=filename.zip ميفرستي و فايل هات تو پوشه realpath هستن از این کد میتونی استفاده کنی



<?php
if (isset($_GET['file']))
{
$handle = $_GET['file'];
$file = 'realpath/'.$handle;
if (file_exists($file)) {
header("Content-Encoding: none");
$size = filesize($file);
$sourceImageAttr = getimagesize($file);
$mime = $sourceImageAttr["mime"];
$mtime = filemtime($file);
$etag = dechex($mtime) . "-" . dechex($size);
header('Cache-control: public');
header('Etag: ' . $etag);
header("Content-type: " . $mime . "; name=\"" . basename($file) . "\"");
header("Last-Modified: ".gmdate('D, d M Y H:i:s', $mtime) . " GMT");
header("Content-Length: ".$size);
header('Expires: 0');
ob_clean();
flush();
readfile($file);
exit;
}
}
echo ('File Not Found!');
?>
و در کل بجای location از readfile استفاده کن

alimooghashang
دوشنبه 21 دی 1388, 20:59 عصر
مرسی
من که گفتم
آدرس روی سرور خودم نیست که بخوام readfile کنم
برای همین اگه readfile کنم باید دانلود کنه دیگه؟
و اگر دانلود کنه!!! میریزه رو سرور و از منابع سرور استفاده میشه!!!
غیر از اینه؟
من میخوام مستقیم بفرستم ، فکرم نکنم بشه!!! ولی گفتم بپرسم شاید راهی داشته باشه!!!

alimooghashang
چهارشنبه 23 دی 1388, 15:18 عصر
اگر می خوای کلا لینک و آدرس سورس فایل پیدا نشه امکانش فکر نکنم بشه , اگر هم با Read file کار کنید یک بار دریافت میشه و یک بار هم به کاربر داده میشه , این قضیه هم پروسس بیشتری داره و هم bandwith رو تحت تاثیر میزاره !

درقیقا کارت چیه , بگو شاید بشه بیشتر کمک کرد !
گفتم که
کاربر میاد تو سایت من
و لینک دانلود فلان برنامه را میخواد!!! خوب...
مثلا جستجو میکنه firefox
منم لینکی که تو دیتابیس دارم اینه

http://firefox.com/firefox.zip
ولی من نمیخوام کاربر این فایل رو دانلود کنه!!! بلکه همین فایل به این اسم دانلود بشه!!!


http://www.mysite.com/firefox_www.mysite.com.zip


ببینید، من میخوام بدون اینکه فایل دانلود بشه و روی سرورم ریخته بشه برای کاربر ارسال بشه و اسمش اینطوری باشه firefox_www.mysite.com.zip

میشه همچین کاری کرد یا حتما باید فایل دانلود بشه و بعد اسمش عوض شه؟