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

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 с потоками?)
Если кто встречался с таким или мысли какие есть.
 

SiZE

Новичок
PHP работает с потоками. Только у браузера в 1 поток одно содержимое можно отдать. Как-то так. Цель то какая?
 

scorpion-ds

Новичок
Надо все это вынести в отдельную функцию, и вызывать в цикле (или как там тебе надо) с новыми входящими параметрами. Вообще не очень понятно, чего ты хочешь добиться в целом.
 
  • Like
Реакции: AmdY

AmdY

Пью пиво
Команда форума
делай как писал scorpion-ds, только не в аутпут выплёвывай, а пиши в файлы, затем упакуй в зип. Браузер не может за раз принять несколько документов.
 

Saboth

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

Надо все это вынести в отдельную функцию, и вызывать в цикле (или как там тебе надо) с новыми входящими параметрами.
Я пробовал, 4-мя разными способами - бестолку. Яж поэтому на форум и обратился.
 

Saboth

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

P.s. Я с архивами пока просто не работал, PHP для меня направление новое.
 

Beavis

Banned
ему выводится несколько отчётов, на каждый флажок по отчёту XSL-файлы
сделай чтоб на каждый отчет была отдельная ссылка, ведущая на скрипт, который ты написал
тогда не надо будет думать как отдать сразу 100 файлов пользователю
 

Saboth

Новичок
Всё, всем спасибо. Сделал.
Просто не сразу понял
только не в аутпут выплёвывай, а пиши в файлы, затем упакуй в зип
Меня усомнило архивирование. Подумалось для создания XSL, файл надо как то упаковать.
Я по совету AmdY просто выложил в файлы
PHP:
file_put_contents("aaa.xls", $csv_output, FILE_APPEND);
(вместо aaa переменная). Вариант прокатил.
 

scorpion-ds

Новичок
Saboth
Тоже нормально решение, но я бы сделал как AmdY сказал, тем более библиотека Zip (http://ua.php.net/manual/ru/book.zip.php), довольно проста в обращении.

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

Saboth

Новичок
scorpion-ds просто в этом случае, мне нет надобности архивировать. Файлов будет не так много и они практический сразу будут поступать в работу (просмотр, удаление)
 
Сверху