PDA

View Full Version : سوال: مشکل در کد دانلود



.fatemeh
جمعه 14 آذر 1393, 12:01 عصر
سلام
در سایت قسمتی برای دانلود مقاله وجو داره که من از کد زیر استفاده کردم.

$name=mysql_real_escape_string($_REQUEST['n']);
if($name==""){ die('File Not Found');}
$dir22=$_SERVER['DOCUMENT_ROOT'].'images/catalog/';
downloadFile($dir22.$name);
function downloadFile($fullPath){
// Must be fresh start
if( headers_sent() )
die('Headers Sent');

// Required for some browsers
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');

// File Exists?
if( file_exists($fullPath) ){

// Parse Info / Get Extension
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);

// Determine Content Type
switch ($ext) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
ob_clean();
flush();
readfile( $fullPath );

} else
die('File Not Found');

}
?>

ولی هنگام استفاده خطای Headers Sent میده در حالی که روی سایت های دیگه همین کد داره درست کار می کنه.
تمام ورودی ها رو چک کردم درست بود. فایل رو دریافت می کنه ولی دانلود نمی شه.
مشکلش کجاست؟؟:ناراحت:

saeedvir
جمعه 14 آذر 1393, 12:13 عصر
تابع به درستی کار می کنه هم با مرورگر و هم با دانلود منیجر امتحان کردم،

شاید متغیر $name مقدار اشتباه داره

.fatemeh
جمعه 14 آذر 1393, 12:24 عصر
قبل از اینکه تابع اجرا بشه مقدار متغییر رو echo میکنم. مقدارش درسته.

تابع به درستی کار می کنه
تعجم خودم هم از همینه. داره روی دوتا سایت دیگه درست کار میکنه روی این سایت مشکل داره.
روی لوکال هم درسته.
نمی دونم چه کار کنم.

.fatemeh
جمعه 14 آذر 1393, 13:03 عصر
حل شد.:لبخند:
کد سایتی که درست بود رو با کد این سایت مقایسه کردم
قبل از اجرای این تابع یه تابع دیگه اجرا میشد که آمار گیر سایته.
جای دوتا تابع رو عوض کردم درست شد.

Unique
جمعه 14 آذر 1393, 16:54 عصر
کد سایتی که درست بود رو با کد این سایت مقایسه کردم
قبل از اجرای این تابع یه تابع دیگه اجرا میشد که آمار گیر سایته.

البته دلیل درست شدن که همون جابجایی بوده در اصل اینه که اون تابع آمار گیر داشته خروجی تولید میکرده. حالا این خروجی ممکنه حتی یک notice ساده باشه.