PDA

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



jalaladdin
سه شنبه 15 شهریور 1390, 08:03 صبح
برای دانلود فایل بدین صورت کد را نوشتم

$result=mysql_query("select * from `fil` where `id`='".intval($_GET['id'])."'")or die(mysql_error());
if(mysql_num_rows($result)>0 ){
$row=mysql_fetch_assoc($result);
$file=$row['name'];
$type="application/pdf";
$data=file_get_contents("pdf/".$file);
$size=strlen($data);
header("content-disposition:attachment; filename=$file");

header("content-type:$type");
header("content-length:$size");
echo $data;

خوب تا اینجا فایلهای pdfدانلود میشوند من میخواهم فایلهای از نوع (zip,doc,ppt) دانلود کنم چه تغییراتی در کد دانلود بدهم تا این فایلها هم دانلود شوند

Unique
سه شنبه 15 شهریور 1390, 16:37 عصر
سلام

ببین دوست عزیز شما برای دانلود فایل خودتون دارین Content-Type را برابر application/pdf میگذارین ، که بهش میگیم Mime Type شما دو تا راه حل داری :

1- بیای و Mime Type را بر اساس هر Extension تعریف کنی یعنی :


$mime_types['pdf'] = 'application/pdf';
$mime_types['zip'] = 'application/zip';
$mime_types['jpg'] = 'image/jpeg';

and ....

header("content-type:".$mime_types[strtolower(pathinfo($file, PATHINFO_EXTENSION))]);

و راه دیگه اینه که کلا بگی :

Content-Type: application/octet-stream

jalaladdin
چهارشنبه 16 شهریور 1390, 07:43 صبح
کد دانلود فایل را بدین صورت تغییر دادم

$file=$row['name'];

$mime_types['pdf'] = 'application/pdf';

$mime_types['zip'] = 'application/zip';

$mime_types['doc'] = 'application/doc';
$mime_types['ppt'] = 'application/ppt';








$data=file_get_contents("upload/".$file);
$size=strlen($data);
header("content-disposition:attachment; filename=$file");
header("content-type:".$mime_types[strtolower(pathinfo($file, PATHINFO_EXTENSION))]);


header("content-length:$size");
echo $data;

اما فایلهای از نوع ppt و doc خراب دانلود میشوند

MMSHFE
چهارشنبه 16 شهریور 1390, 08:33 صبح
براي ppt بايد از application/mspowerpoint و براي doc از application/msword استفاده كنيد. فهرست كامل MIME Typeها اينجا (http://reference.sitepoint.com/html/mime-types-full) موجوده. موفق باشيد.

jalaladdin
چهارشنبه 16 شهریور 1390, 13:13 عصر
این کد دانلود فایل میباشد از نمونه کد شما هم استفاده کردم اما فائده ای نداشت!

<?php
ob_start();
?>
<?php
session_start();


if($_SESSION['username']){
$link=mysql_pconnect("localhost","root","");
mysql_select_db("a",$link);
$result=mysql_query("select * from `fi` where `id`='".intval($_GET['id'])."'")or die(mysql_error());
if(mysql_num_rows($result)>0 ){
$row=mysql_fetch_assoc($result);
$file=$row['name'];

$mime_types['pdf'] = 'application/pdf';

$mime_types['zip'] = 'application/zip';

$mime_types['doc'] = "application/msword";
$mime_types['ppt'] = 'application/mspowerpoint';








$data=file_get_contents("upload/".$file);
$size=strlen($data);
header("content-disposition:attachment; filename=$file");

header("content-type:".$mime_types[strtolower(pathinfo($file, PATHINFO_EXTENSION))]);


header("content-length:$size");
echo $data;

}

// echo "فایل موجود نمیباشد";
}

?>
<?php
ob_end_flush();
?>

jalaladdin
چهارشنبه 16 شهریور 1390, 13:14 عصر
فقط برای فایل pdfجواب میده !

MMSHFE
چهارشنبه 16 شهریور 1390, 13:45 عصر
با سلام، چرا از application/octet-stream استفاده نميكنيد؟

jalaladdin
چهارشنبه 16 شهریور 1390, 20:19 عصر
از استفاده میکنم اما مشکل وجود دارد فایلهای ppt , doc خراب دانلود میشوندapplication/octet-stream

Unique
چهارشنبه 16 شهریور 1390, 22:43 عصر
شما نمیدونم چرا با echo کار میکنی !!!

این 100% جواب میده :


header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
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($file_path));
$fh = fopen($file_path, "r");
ob_clean();
flush();
readfile($file_path);
fclose($fh);
exit;

MMSHFE
پنج شنبه 17 شهریور 1390, 09:32 صبح
شما نمیدونم چرا با echo کار میکنی !!!
راست ميگين ها! دقت نكرده بودم! بايد از readfile استفاده كنيد. البته fopen و fclose لازم نيست و همون readfile كفايت ميكنه. ضمناً اندازه فايل رو هم با filesize بدست بيارين. موفق باشيد.

Unique
پنج شنبه 17 شهریور 1390, 22:30 عصر
البته fopen و fclose لازم نيست

درسته ! شرمنده ، سریع تایپ میکردم و متوجه نشدم.

jalaladdin
یک شنبه 27 شهریور 1390, 17:33 عصر
برای دانلود فایل از روی wamp برای فرمتهای که تعیین کردم جواب میده اما روی هاست وقتی فایل دانلود میکنم به فرض اگر pdf باشد خراب هست این پیغام خطا میده

MMSHFE
دوشنبه 28 شهریور 1390, 08:55 صبح
با سلام، اين كد رو ببينيد:


<?php
/*
Usage:
- Save this file beside your "index.php" file as "download.php".
- Create a folder named "files" above index.php (beside "public_html" or "www" folder)
- Put your download files in "files" folder
- Modify this file and set $server, $user, $pass, $db and $domain in the first lines to your site values
- Create a table in your database named "files" with three fields: `id` (int, primary), `filename` (varchar(255)) and `count` (int)
- Insert your filenames into the table and assign each of them an individual ID and set count as zero
- Make links of files like "http://your_domain/download.php?fid=1" which "your_domain" is YOUR DOMAIN and "fid" is the ID of desired file
*/

$server = 'localhost';
$user = 'root';
$pass = '';
$db = 'download';
$domain = 'http://www.nCIS.ir';

function redirect() {
global $domain;
header('Location: '.isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : $domain);
exit();
}

mysql_connect($server, $user, $pass) or die('Connection error');
mysql_select_db($db) or die('Database does not exist');
mysql_query('SET NAMES \'utf8\'');

if(isset($_GET['fid']) && $_GET['fid'] != '' && is_numeric($_GET['fid'])) {
$fid = (int) $_GET['fid'];

$fn = mysql_query("SELECT * FROM `files` WHERE (`id`='{$fid}') ORDER BY `id` LIMIT 1");

if($fn !== false && mysql_num_rows($fn) > 0) {

$fn = mysql_fetch_assoc($fn);
$fn = $fn['filename'];

if(file_exists('../files/'.$fn)) {
mysql_query("UPDATE `files` SET `count`=`count`+1 WHERE (`id`='{$fid}' ORDER BY `id` LIMIT 1");
$size = filesize('../files/'.$fn);
header("Content-Disposition: attachment; filename={$fn}; size={$size}");
readfile('../files/'.$fn);
}
else {
// File does not exist
redirect();
}
}
else {
// fid is invalid
redirect();
}
}
else {
// fid is not provided via URL
redirect();
}
?>

براي دانلود غيرمستقيم نوشتم. اميدوارم به دردتون بخوره. روش استفاده از اون رو هم توي كامنت ابتداي كد نوشتم. موفق باشيد.