Вывод несколько XSL файлов

  • Автор темы Автор темы Saboth
  • Дата начала Дата начала

Saboth

Новичок
Есть такой код создания Excel-ины
PHP:
header('Content-Type: text/x-csv; charset=windows-1251');
header("Content-Disposition: attachment;filename=".date("d-m-Y-Hi")."-org.xls");
header("Content-Transfer-Encoding: binary ");
$csv_output ='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<meta name="author" content="ssss" />
<title>Выгрузка в MS Excel</title>
</head>
<body>';
$rowcount = odbc_num_rows($result);
$csv_output .="<table border=\"1\"><tr>
<td bgcolor=\"#CCCCCC\"><b><p align=\"center\">№пп</p></b></td>
<td bgcolor=\"#CCCCCC\"><b><p align=\"center\">Организация</p></b></td>
<td bgcolor=\"#CCCCCC\"><b><p align=\"center\">Консультаций</p></b></td>
<td bgcolor=\"#CCCCCC\"><b><p align=\"center\">Принято</p></b></td>
<td bgcolor=\"#CCCCCC\"><b><p align=\"center\">Выдано</p></b></td>
<td bgcolor=\"#CCCCCC\"><b><p align=\"center\">Всего</p></b></td>
<td bgcolor=\"#CCCCCC\"><b><p align=\"center\">Всего заявок</p></b></td>
<td bgcolor=\"#CCCCCC\"><b><p align=\"center\">Не обслужено заявок</p></b></td></tr></table>";
$count = 1;

while ($count<=$rowcount)
{
 odbc_fetch_row($result,$count);	
 $num_org = odbc_result($result, "num"); 
 $name_org = odbc_result($result, "name_org");
 $konsult = odbc_result($result, "konsult");
 $prinjato = odbc_result($result, "prinjato");
  $vidano = odbc_result($result, "vidano");
 $vsego = odbc_result($result, "vsego");
 $vsego_vsego = odbc_result($result, "vsego_vsego");
 $no_usluga = odbc_result($result, "no_usluga");
$csv_output .="<table border=\"1\"><tr>
<td>$num_org</td>
<td>$name_org&nbsp</td>
<td>$konsult&nbsp</td>
<td>$prinjato&nbsp</td>
<td>$vidano&nbsp</td>
<td>$vsego&nbsp</td>
<td>$vsego_vsego&nbsp</td>
<td>$no_usluga&nbsp</td>
</tr></table>";
  //print "</tr>";
  $count++;
  }
$csv_output .='</body></html>';
echo $csv_output;
Вообщем кому нужно - это рабочий (в смысле работает) фрагмент.

Вопрос такой, вот в этом случае можно за один проход создать только один XSL файл, т.е. как я его не редиректил, не циклил, Exemel-ина создаётся только когда завершится выполение всего кода (на всех учавствующих страницах)
Как создать два и более файлов за раз? (Я уже как вариант стал задумыватся - работае ли PHP с потоками?)
Если кто встречался с таким или мысли какие есть.
 
PHP работает с потоками. Только у браузера в 1 поток одно содержимое можно отдать. Как-то так. Цель то какая?
 
Надо все это вынести в отдельную функцию, и вызывать в цикле (или как там тебе надо) с новыми входящими параметрами. Вообще не очень понятно, чего ты хочешь добиться в целом.
 
  • Like
Реакции: AmdY
делай как писал scorpion-ds, только не в аутпут выплёвывай, а пиши в файлы, затем упакуй в зип. Браузер не может за раз принять несколько документов.
 
Надо все это вынести в отдельную функцию, и вызывать в цикле (или как там тебе надо) с новыми входящими параметрами. Вообще не очень понятно, чего ты хочешь добиться в целом.

Человек проставляет флажки (checkbox-ы) и ему выводится несколько отчётов, на каждый флажок по отчёту XSL-файлы. Но суть в чём, что вывод выполняется только после выполнения всего кода - т.е. когда выполнены все страниц. По ощущениям вроде как оно в очередь проставляется и выполняется в самом конце. Если гдето прервать, к примеру редиректом, то не выводится вообще ничего. Именно из-за этого не получается вывести 2 и более файлов, он просто замещается. Тот который был указан последним, тот и выходит.

Надо все это вынести в отдельную функцию, и вызывать в цикле (или как там тебе надо) с новыми входящими параметрами.
Я пробовал, 4-мя разными способами - бестолку. Яж поэтому на форум и обратился.
 
делай как писал scorpion-ds, только не в аутпут выплёвывай, а пиши в файлы, затем упакуй в зип. Браузер не может за раз принять несколько документов.
Можно простенький примерчик с 2-мя файлами. Или ссылочку. Хотелось бы увидеть пример на который по вашему мнению стоит обратить внимание, а не кучу мусора перебирать.

P.s. Я с архивами пока просто не работал, PHP для меня направление новое.
 
ему выводится несколько отчётов, на каждый флажок по отчёту XSL-файлы
сделай чтоб на каждый отчет была отдельная ссылка, ведущая на скрипт, который ты написал
тогда не надо будет думать как отдать сразу 100 файлов пользователю
 
Всё, всем спасибо. Сделал.
Просто не сразу понял
только не в аутпут выплёвывай, а пиши в файлы, затем упакуй в зип
Меня усомнило архивирование. Подумалось для создания XSL, файл надо как то упаковать.
Я по совету AmdY просто выложил в файлы
PHP:
file_put_contents("aaa.xls", $csv_output, FILE_APPEND);
(вместо aaa переменная). Вариант прокатил.
 
Saboth
Тоже нормально решение, но я бы сделал как AmdY сказал, тем более библиотека Zip (http://ua.php.net/manual/ru/book.zip.php), довольно проста в обращении.

Я не так давно тоже создавал прайсы (при помощи PHPExcel), правда не по клику, а по событию и архивировал в Zip, хотя у меня и был только 1 файл.
 
scorpion-ds просто в этом случае, мне нет надобности архивировать. Файлов будет не так много и они практический сразу будут поступать в работу (просмотр, удаление)
 
Сверху