У меня есть функция FDPF, которая создает стандартный PDF-код для различных частей веб-сайта. Он просто принимает некоторые данные, создает многостраничный PDF-файл и возвращает объект PDF, например.Несколько PDF-файлов в Loop с FPDF
function pdfBuild($orderData) {
class PDF extends FPDF
{
// Page header
function Header()
{
// Logo
$this->Image('logo.png',10,6,30);
// Arial bold 15
$this->SetFont('Arial','B',15);
// Move to the right
$this->Cell(80);
// Title
//$this->Cell(80,10,'Game Sheet',1,0,'C');
// Line break
$this->Ln(20);
}
// Page footer
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Page number
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->SetFont('Times','',12);
for($a=0;$a<count($orderData);$a++) {
$pdf->AddPage();
//Add stuff to PDF
}
return $pdf;
}
Моя проблема возникает в цикле, что сообщения электронной почты отдельные PDF-файлы из клиентов, например
function buildPDFs() {
//Get a location
$query = "GET SOME CLIENT INFORMATION";
$result = getSQLConnection($query);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
//Get some info from dB using $row
//Format info from db into $data variable
$pdf = pdfBuild($data);
//Test Data
$to = '[email protected]';
$from = '[email protected]';
$subject = 'PDFs'
$message = 'Howdy';
//End
emailPDF($pdf, $to, $from, $subject, $message);
}
}
echo 'Done';
}
Проблема заключается в том, что если я сделать две итерации цикла, вложение является PDF, который был сгенерирован в первый экземпляр, но я получаю два письма с одним и тем же вложением. По существу, объект $ pdf никогда не будет меняться в цикле, хотя я уверен, что данные, передаваемые функции генерации PDF, каждый раз разные. Сгенерированные PDF-файлы идентичны.
Нужно ли отключать или иным образом «разрушать» объект PDF каждый раз в цикле?
Обновление
Удаление определения класса Колонтитулы, как в приведенном выше фрагменте кода, решает эту проблему. Но я не понимаю, почему.
Вопрос: Почему удаление кода расширения класса разрешает проблему и позволяет циклу генерировать разные PDF-файлы каждый раз, как и ожидалось, и отправлять их по электронной почте правильно?
Ответьте на сообщение от Veve и решите проблему. Я был неправильно декларирование и полностью злоупотребляя класса
если PDF не изменится, построить его вне цикла только один раз – nogad
Где вы определяете '$ data' внутри вашей функции? – BenM
@nogad, не могли бы вы расширить свой ответ. Как его создать «один раз»? BenM, данные построены с использованием другой функции. Я могу подтвердить его изменение на каждой итерации цикла и отправку. Однако объект PDF не меняется. – Colin