Загрузка файла "скриптом". Знаю, что боян :)

bobo

Новичок
Здравствуйте, уважаемые!

Стоит задача реализовать скачивание фалов не напрямую, а через заголовки (что б не палить реальное место хранения этих самых файлов).

Сделал следующее:
PHP:
function fileDwnl($page,$fileName) {
	
	$file = ($page == "docs") ? ROOT."skins/".SKIN."/tpl/docs/all/".$fileName : ROOT."skins/".SKIN."/tpl/docs/owner/".$fileName;
	
	if (file_exists($file)) {
		
		header($_SERVER['SERVER_PROTOCOL']." 200 OK");
		header('Cache-Control: max-age=0');
		header("Content-type: application/octet-stream");
		header("Accept-Ranges: bytes");
		header("Connection: close");
		header("Content-Disposition: attachment; filename=".$fileName);
		header("Content-Length: ".filesize($file));
		
		file_get_contents($file);
		
	}
	
	else {
		
		redirect(0,"404");
		
	}
	
}
Соответственно сам файл file.doc с текстом "file.doc".

При клике на ссылку как и положено выдается диалог на скачивание, файл сохраняется с нужным именем и расширением, но только содержание его не "file.doc", а "<!doctype " о_О

Пол-дня уже гугл мучаю, может тут у кого есть мысли, что не так то делаю ?:(
 

Вурдалак

Продвинутый новичок
Ну очевидно, что данный код не является полным, вполне возможно, что у тебя действительно где-то вывод HTML-контента вместе с данными из doc-файла.
 

bobo

Новичок
index.php

PHP:
<?php

header("Content-Type: text/html; charset=windows-1251");
error_reporting(E_ALL);

define("KEY",true);

ob_start();
session_start();

include "./config.php";
include "./language/".LANGUAGE.".php";
include "./var.php";

include "./lib/func.php";

	switch ($GET['page']) {

                .........

		case "docs":
			include "./modules/docs/docs.php";
			break;

                .........

		default:
			include "./error.php";
			break;

	}
	
$content = ob_get_contents();
ob_end_clean()

........


include "./skins/".SKIN."/tpl/index.tpl";

?>
Ну и соответственно в index.tpl в нужном месте вывод <?php echo $content; ?>

Механизм не мой, поэтому и туплю :(
 

bobo

Новичок
readfile() пробовал - результат точно такой же.
Ок, буду дальше ковырять, спасибо за советы :(
Если у кого-то вдруг еще появятся мысли, где собака зарыта, пишите, не стесняйтесь :)
 

AmdY

Пью пиво
Команда форума
bobo
просто пройдись по шагам дебагером и увидишь где он завернул не туда.
 
Сверху