Предупреждение: fseek(): поток не поддерживает поиск с FPDI

Пробовал смотреть похожие посты, но ничего не получается. Это мой код:

<?php
setlocale(LC_ALL, 'it_IT');
require_once('lib/fpdf/fpdf.php');
require_once('lib/fpdi/fpdi.php');
require_once('lib/phpmailer/class.phpmailer.php');

$mysqli = new mysqli("localhost", "user", "psw", "db");

if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$nome = $_POST[nome];
$email = $_POST[email];
$importo = intval($_POST[importo]);
$telefono = intval($_POST[telefono]);
$pagamento = $_POST[pagamento];
$agenzia = $_POST[agenzia];
$idp = intval($_POST[id]);
$ip = getRealIpAddr();
$pagina = urldecode($_SERVER['HTTP_REFERER']);
$device = $_SERVER['HTTP_USER_AGENT'];     

$querylista = "SELECT * FROM ListeSposi WHERE id =".$idp;

$datilista = $mysqli->query($querylista);

$row = $datilista->fetch_array(MYSQLI_ASSOC);

$NomeSposo = $row['NomeSposo'];
$CognomeSposo = $row['CognomeSposo'];
$NomeSposa = $row['NomeSposa'];
$CognomeSposa = $row['CognomeSposa'];

// initiate FPDI
$pdf = new FPDI();
// add a page
$pdf->AddPage();
// set the source file
$pdf->setSourceFile("http://www.vantravelgroup.com/sposi/buonoricevuta.pdf");
// import page 1
$tplIdx = $pdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 100 mm
$pdf->useTemplate($tplIdx, 10, 10, 100);

// now write some text above the imported page
$pdf->SetFont('Arial');
$pdf->SetTextColor(255, 0, 0);
$pdf->SetXY(30, 30);
$pdf->Write(0, 'PROVAAAAAAAAAAAAAAAAAAAA');

$buonoricevuta="../ricevute/RicevutaBuono".$nome.".pdf";
$pdf->Output($buonoricevuta,'F');


$insert = "INSERT INTO Donazioni (id_lista, nome, email, importo, telefono, agenzia, indirizzo_ip, pagina, dispositivo, buonoricevuta) 
VALUES ('".$idp."', '".$nome."', '".$email."', '".$importo."', ".$telefono.", '".$agenzia."', '".$ip."', '".$pagina."', '".$device."', '".$buonoricevuta."')";

// Eseguo la query per inserire una nuova riga e chiudo la connessione

if ($mysqli->query($insert) === TRUE) {
    $status = "Abbiamo registrato correttamente la transazione, ecco un riepilogo:";
} else {
    $status = "Lo scambio di dati non è andato a buon fine, questo è un messaggio diagnostico. </br>" . $newRow . "<br>" . $conn->error;
}

$mysqli->close();

$error = array();

// Mando le email

if(empty($error))
{ 

$emailUser = new PHPMailer();
$emailUser->From      = '[email protected]';
$emailUser->FromName  = 'Vantravel Group - Il Gabbiano - Istantravel - Globmaster';
$emailUser->Subject   = 'Qualcuno ha partecipato alla tua lista!';
$emailUser->MsgHTML('<img src="'.$logo.'" alt="Logo agenzia"><br>'.$status.'<br>Nome: '.$nome.'<br>Email: '.$email.'<br>Importo: '.$importo.'<br>Telefono: '.$telefono.'<br>Tipo di pagamento: '.$pagamento.'<br>Agenzia di Riferimento: '.$agenzia.'<br>In allegato può trovare in buono/ricevuta che le da diritto a uno sconto, una volta completato il pagamento, sul suo prossimo viaggio prenotato in una delle nostre agenzie.');
$emailUser->AddAddress( $email );
$emailUser->AddAttachment( $buonoricevuta , 'Buono_Ricevuta.pdf' );
return $emailUser->Send();

$emailAdmin = new PHPMailer();
$emailAdmin->From      = '[email protected]';
$emailAdmin->FromName  = 'Vantravel Group - Il Gabbiano - Istantravel - Globmaster';
$emailAdmin->Subject   = 'Qualcuno ha partecipato a una lista!';
$emailAdmin->MsgHTML('<img src="'.$logo.'" alt="Logo agenzia"><br>'.$status.'<br>Nome: '.$nome.'<br>Email: '.$email.'<br>Importo: '.$importo.'<br>Telefono: '.$telefono.'<br>Tipo di pagamento: '.$pagamento.'<br>Agenzia di Riferimento: '.$agenzia.'<br>In allegato può trovare in buono/ricevuta che le da diritto a uno sconto, una volta completato il pagamento, sul suo prossimo viaggio prenotato in una delle nostre agenzie.' );
return $emailAdmin->Send();
}

function getRealIpAddr() {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
                $ip=$_SERVER['HTTP_CLIENT_IP'];
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
                $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
                $ip=$_SERVER['REMOTE_ADDR'];
        }
        return $ip;
}

?>

Выходит ошибка:

Warning: fseek(): stream does not support seeking in /home/vantra5/public_html/sposi/default/lib/fpdi/pdf_parser.php on line 243

Warning: fseek(): stream does not support seeking in /home/vantra5/public_html/sposi/default/lib/fpdi/pdf_parser.php on line 274

Warning: fseek(): stream does not support seeking in /home/vantra5/public_html/sposi/default/lib/fpdi/pdf_parser.php on line 276

Fatal error: Uncaught exception 'Exception' with message 'Unable to find "startxref" keyword.' in /home/vantra5/public_html/sposi/default/lib/fpdi/pdf_parser.php:287 Stack trace: #0 /home/vantra5/public_html/sposi/default/lib/fpdi/pdf_parser.php(195): pdf_parser->_findXref() #1 /home/vantra5/public_html/sposi/default/lib/fpdi/fpdi_pdf_parser.php(64): pdf_parser->__construct('http://www.vant...') #2 /home/vantra5/public_html/sposi/default/lib/fpdi/fpdi.php(123): fpdi_pdf_parser->__construct('http://www.vant...') #3 /home/vantra5/public_html/sposi/default/lib/fpdi/fpdi.php(101): FPDI->_getPdfParser('http://www.vant...') #4 /home/vantra5/public_html/sposi/default/mail.php(45): FPDI->setSourceFile('http://www.vant...') #5 {main} thrown in /home/vantra5/public_html/sposi/default/lib/fpdi/pdf_parser.php on line 287

Я даже убедился, что шаблон pdf ‹ версии 1.5!

Любая идея об источнике проблемы?


person Bass    schedule 27.01.2016    source источник


Ответы (1)


Используйте локальный путь вместо URL:

$pdf->setSourceFile("/local/path/to/sposi/buonoricevuta.pdf");
person Jan Slabon    schedule 27.01.2016
comment
Привет, Ян Слабон, нельзя ли объединить файлы, хранящиеся в корзине S3, с FPDI. Спасибо. - person Manjunarth; 26.11.2018
comment
@manjunath вы можете читать из любого источника в FPDI 2. - person Jan Slabon; 26.11.2018
comment
Я попробовал вышеуказанное решение, но я получаю сообщение об ошибке, например данный поток недоступен для поиска! Как может быть эта ошибка. Спасибо - person Manjunarth; 10.12.2018
comment
Затем вам нужно захватить весь PDF-файл из этого ведра в переменный/локальный поток. - person Jan Slabon; 10.12.2018
comment
Хорошо, я сделал это как $file1 = fopen('https://s3-us-west-2.amazonaws.com/path/to/file','rb') и передал $mpdf->setSourceFile(new StreamReader($file)); Это то, что ты хочешь сказать?? - person Manjunarth; 10.12.2018
comment
Точно нет, потому что мы с вами знаем, что вы получаете ту же ошибку, что и раньше. Но в конце концов я уже дал ответ: тогда вам нужно захватить весь PDF-файл из этого сегмента в переменный/локальный поток. Если вы не знаете, как это сделать, найдите его и/или откройте новый вопрос на SO. - person Jan Slabon; 10.12.2018