Spreadsheet_Excel_Writer не работает на сервере...

LeRatO

Новичок
Spreadsheet_Excel_Writer не работает на сервере...

Добрый день.

Для экспорта в MS Excel использую связку PEAR + PEAR::Spreadsheet_Excel_Writer (+PEAR::OLE).

PEAR установлен в одну из корневых папок сайта, параметр include_path корректируется в самом скрипте. Проверено - путь формируется корректно. Также проверено, все pear-компоненты находятся.


Проблема в том, что локально работет, но стоит залить все на сервер, итогом отработки срипта становится пустой файл. При этом лог ошибок пустой.

Где искать решение проблемы? Перекопала поиском несколько веток темы этого и других форумов - одни вопросы без ответов.

-~{}~ 26.02.08 21:42:

Решение найдено собственными силами. Дублирую его сюда, вдруг кому поможет....


Класс Spreadsheet_Excel_Writer использует в том числе
классы OLE-компонентв PEAR. Если покопать эти классы, то становится понятно, что коннет Excel-файла пишется во временный файл с именем OLEB.tmp.
Так вот если этот самый самый файл оказывается в папке, где нет прав перезаписи, то... итог - пустой файл!

Наше решение простое. С помощью метода setTempDir одного из классов OLE-компонента меняется местоположение временного файл:

Код:
$this->xls_stream->setTempDir(ini_get('upload_tmp_dir'));
То есть, временный файл помещается в туже папку, куда ложаться временные файлы при аплоаде.

$this->xls_stream - это объект класса Spreadsheet_Excel_Writer. Просто в нашем случае экспорт реализован классом.



Вот и вся хитрость. Пользуйтесь, и не ругайтесь на PEAR-класс - он рабочий!!!
 

kolyazdv

Новичок
пытаюся пользоваться PEAR-классом...
почитал руководство http://phpclub.ru/detail/article/Excel_Writer

но при отработке кода
PHP:
<?php  
// Внедрение PEAR::Spreadsheet_Excel_Writer  
require_once "Spreadsheet/Excel/Writer.php";    
// Создание случая 
 $xls =& new Spreadsheet_Excel_Writer();   
 // Отправка HTTP заголовков для сообщения обозревателю о типе вxодимыx //данныx  
$xls->send("sheet/test.xls");    
// Добавление листа к файлу, возвращение объекта для добавления данныx  
$sheet =& $xls->addWorksheet('Binary Count');    
// Пишем несколько цифр 
 for ( $i=0;$i<11;$i++ ) 
{ 
$sheet->write($i,0,$i);  }  // Конец листа, отправка обозревателю 
 $xls->close();  ?>
получаеться файл excel с предупреждением
<b>Warning</b>: tempnam() [<a href='function.tempnam'>function.tempnam</a>]: open_basedir restriction in effect. File() is not within the allowed path(s): (/home/site/:/usr/lib/php:/usr/local/lib/php:/tmp) in <b>/home/site/public_html/OLE/PPS/Root.php</b> on line <b>99</b><br />
не подскажите в чем может быть проблема?
 

Exorcist

Новичок
Работает, очень пригодилась тема.Но это работает если я посылаю файл
send('filename.xls');

А если я хочу чтобы он сохранялся.


<?php
require_once '../pear/Spreadsheet/Excel/Writer.php';

$workbook = new Spreadsheet_Excel_Writer('new.xls');

$worksheet =& $workbook->addWorkSheet();
$workbook->setTempDir('bill/'');

$worksheet->setColumn(0,0,100);
$worksheet->write(0,0,"99 Bottles Of Beer On The Wall- The Complete Lyrics");
// repeat only the first row
$worksheet->repeatRows(0);
for ($i = 99; $i > 0; $i--)
{
if ($i > 1) {
$next = $i - 1;
}
else {
$next = "no more";
}
$worksheet->write(100 - $i,0,"$i Bottles of beer on the wall, $i bottles of beer, ".
"take one down, pass it around, ".
"$next bottles of beer on the wall.");
}
$workbook->close();
?>

если я указываю $workbook->setTempDir('bill/'');
то у меня файл будет СОХРАНЯТЬСЯ в диркторию где лежит скрипт а не туда куда я указал. Причем перепробывал разные пути , бывают ошибки, права назначил.Помогите=)
 
Сверху