Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Поемук вместо файла я получаю контент страницы?, как скачать файл через header
Strannik  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 25 дней
Карма: 0




Добрый вечер.

Для предоставления файлов пользователям использую скрипт:

if (file_exists($filename)) {
echo $filename;
header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK');
header('Content-Type: ' . $mimetype);
header('Last-Modified: ' . gmdate('r', filemtime($filename)));
header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename)));
header('Content-Length: ' . (filesize($filename)));
header('Connection: close');
header('Content-Disposition: attachment; filename="' . basename($filename) . '";');

$f=fopen($filename, 'r');
while(!feof($f)) {

echo fread($f, 1024);
flush();
}
fclose($f);
} else {
header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
header('Status: 404 Not Found');
}
exit;


Проблема в том, что загружается файл содержимое которого никоем образом е связано с содержимым файла на сервере, иными словами загружается файл с частью кода страницы.
Вот что я вижу когда открываю скачанный файл:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<
head>
<
meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<
meta name="description" edit=""/>
<
meta name="keywords" edit=""/>
<
title>Page</title>
<
meta name="google-site-verification" content="sfsfsfsfqe1f" />
<
meta name="author" edit=""/>
<
meta name='copyright' content=''/>

<!--
meta name="viewport" content="width=device-width, maximum-scale=0.5" /-->
<
meta name="apple-mobile-web-app-capable" content="yes" />
<
meta name="apple-touch-fullscreen" content="yes" />
<
link rel="stylesheet" type="text/css" href="./style/style.css"/>
<!--<
link rel="icon"


В чем может быть проблема?


PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 14 дней
Карма: 552




Попробуй такой код
Свернутый текст
header ("HTTP/1.1 200 OK"); 
header ("Date: " . gmdate("M d Y H:i:s"));
header ("X-Powered-By: PHP/" . phpversion());
header ("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header ("Cache-Control: None");
header ("Pragma: no-cache");
header ("Accept-Ranges: bytes");
header ("Content-Disposition: inline; filename=\"" . $filename . "\"");
header('Content-Type: ' . $mimetype);
header ("Age: 0");
header ("Proxy-Connection: close");
readfile($path_to_file);
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 25 дней
Карма: 0




сделал так:


$file=$us.'.csv';
$path_to_file='./dump/';

if (file_exists($filename)) {
header ("HTTP/1.1 200 OK");
header ("Date: " . gmdate("M d Y H:i:s"));
header ("X-Powered-By: PHP/" . phpversion());
header ("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header ("Cache-Control: None");
header ("Pragma: no-cache");
header ("Accept-Ranges: bytes");
header ("Content-Disposition: inline; filename=\"" . $file . "\"");
header('Content-Type: ' . $mimetype);
header ("Age: 0");
header ("Proxy-Connection: close");
readfile($path_to_file);


опять получил код страницы, правда теперь получил код страницы до div content(почти полстраницы, а прошлый раз лишь одну треть)...
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 14 дней
Карма: 552




Цитата (Strannik @ 25.10.2012 - 23:37)
readfile($path_to_file);

В твоем случае нужно написать
readfile($path_to_file . $file);
И лучше этот код для скачивания вынести в ф-ю, и вызывать ее когда нужно, передавая в ее параметры, имя, путь к файлу etc...
PMСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 25 дней
Карма: 0




так я ее и так в функцию вынес (export_user_pays_to_csv).

и кстати зачем давать путь к etc?
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 25 дней
Карма: 0




как итог:

function export_user_pays_to_csv($file) {
ob_clean();
conn();
$headers = true;
$mimetype='application/octet-stream';
$filename='./dump/'.$file.'.csv';
$file=$file.'.csv';
$path_to_file='./dump/';

$fp = fopen($filename, 'w');
$result = mysql_query("SELECT * FROM `sell` WHERE `idn`='$useridn'") or die( mysql_error( $db_conn ) );

if($headers) {
// output header row (if at least one row exists)
$row = mysql_fetch_assoc($result);
if($row) {
fputcsv($fp, array_keys($row), ';');
// reset pointer back to beginning
mysql_data_seek($result, 0);
}
}


while($row = mysql_fetch_assoc($result)) {
fputcsv($fp, $row, ';');
}

fclose($fp);

if (file_exists($filename)) {
header ("HTTP/1.1 200 OK");
header ("Date: " . gmdate("M d Y H:i:s"));
header ("X-Powered-By: PHP/" . phpversion());
header ("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header ("Cache-Control: None");
header ("Pragma: no-cache");
header ("Accept-Ranges: bytes");
header ("Content-Disposition: inline; filename=\"" . $file . "\"");
header('Content-Type: ' . $mimetype);
header ("Age: 0");
header ("Proxy-Connection: close");
readfile($path_to_file. $file);
}
exit;

}


P.S.: Winston спасибо =)
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
ZSH  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 716
Пользователь №: 18668
На форуме: 7 лет, 3 месяца, 25 дней
Карма: 50




Цитата
так я ее и так в функцию вынес (export_user_pays_to_csv).


вот именно, и вызываеш после вывода контента, а в функции HEADER
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Strannik  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 806
Пользователь №: 17108
На форуме: 7 лет, 8 месяцев, 25 дней
Карма: 0




чтобы не разбрасывать код добавил строчку - функцию ob_clean();

P.S.: чтобы контент перед кодом файла не выводился
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8737
Пользователь №: 26630
На форуме: 5 лет, 9 месяцев, 5 дней
Карма: 591




Цитата (Strannik @ 26.10.2012 - 01:11)
чтобы не разбрасывать код добавил строчку - функцию ob_clean();

P.S.: чтобы контент перед кодом файла не выводился

А может лучше не выводить html там, где он на фиг не нужен? wink.gif

Кстати во эти заголовки
Цитата (Strannik @ 25.10.2012 - 23:06)
header('Last-Modified: ' . gmdate('r', filemtime($filename)));
header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename)));

ты хоть знаешь для чего они нужны? Если знаешь, то почему не используешь по назначению?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса