Что я должен сделать, чтобы иметь возможность создавать большие файлы PDF без ошибок? - PullRequest
0 голосов
/ 11 апреля 2011

Я создаю файл pdf на лету, используя fpdf PHP из базы данных, но когда в моей базе данных много данных, либо файл не может быть создан полностью, и только половина его выходит, либо ничего не произойдет или я получаю ошибку во время выполнения, что я должен сделать, чтобы иметь возможность создавать большие файлы PDF без ошибок?

большой pdf:

Код похож на:

require('lib\fpdf.php');
require ('lib\pdf.php');
include ('lib\bukaDb.php');

$pdf = new PDF('P','pt','A4');
$pdf->SetFont('Arial','',8);
$pdf->AliasNbPages();
$pdf->Open();
$pdf->setY($pdf->tMargin);

for ($i=0; $i<count($var); $i++){   
//Do something , show data
//$pdf->Ln(20);
}

// Finally, produce the PDF!!

$pdf->Output();

А в моей таблице сотни строк, я не могу использовать функцию ограничения по времени, какие-либо другие рекомендации?

Ответы [ 3 ]

2 голосов
/ 11 апреля 2011

Ваш сценарий, вероятно, истекает.Попробуйте отключить встроенный лимит времени:

set_time_limit(0);

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

1 голос
/ 11 апреля 2011

Переместите ваш скрипт в crontab и установите сохраненный pdf как файл.Когда ваш сценарий завершится, настройте его на отправку электронного письма, сообщающего, что процесс завершен.

В качестве грубого псевдокода:

require('lib\fpdf.php');
require ('lib\pdf.php');
include ('lib\bukaDb.php');

$pdf = new PDF('P','pt','A4');
$pdf->SetFont('Arial','',8);
$pdf->AliasNbPages();
$pdf->Open();
$pdf->setY($pdf->tMargin);

for ($i=0; $i<count($var); $i++){   
//Do something , show data
//$pdf->Ln(20);
}

// Finally, produce the PDF!!
$savefile = "/path/to/output/dir/output.pdf";
$pdf->Output($savefile,'I');

mail('admin@example.com', 'PDF Generator', "PDF has been generated at $savefile");

Затем все, что вам нужно сделать, это сохранить его вгде-нибудь на вашем сервере и установите его путь в виде crontab:

/path/to/php/cli/php /path/to/your/saved/php/pdf_generator.php

Обратите внимание, что вы должны:

  • убедиться, что ваш каталог $savefile доступен для записи сценарием.
  • используйте php cli, а не обращайтесь к скрипту через браузер, так как на это также влияет ограничение по времени.
1 голос
/ 11 апреля 2011

Мы создаем PDF-файлы (используя fpdf) с сотнями страниц без каких-либо проблем, поэтому я полагаю, что именно ваш код собирает / отображает данные, что приводит к истечению времени ожидания запроса.

Когда ваш HTTP-запрос занимает много времени (более 10 секунд), вероятно, ваш скрипт просто занимает слишком много времени.

Я действительно думаю, что проблема в том, что происходит внутри этого for петля.Попробуйте создать простой фиктивный PDF с примерно таким же количеством страниц.Если это работает, вы знаете, что вам нужно искать проблему внутри цикла for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...