2016-08-10 33 views
0

嗨,大家好我想修改一個PDF文件並將它存儲在我的服務器,但我不斷收到此錯誤:FPDF error: Some data has already been output, can't send PDF file,我無法設法它的原因。FPDF錯誤:一些數據已經輸出 - PHP腳本

這裏是PHP腳本:

<?php 
ob_start(); 
include_once '../db_connect.php'; 

$JOUR = date('d'); 
$MOIS = date('m'); 
$ANNEE = date('Y'); 
$TIME = date("h:i:s"); 
$date = $ANNEE . "-" . $MOIS . "-" . $JOUR . " " . $TIME; 

// titre rapport 
$rapFR = $_POST['rapportFR']; 
$rapUK = $_POST['rapportUK']; 
$categ = $_POST['categ']; 
$rapportFR = str_replace("/", "-", $rapFR); 
$rapportUK = str_replace("/", "-", $rapUK); 

$cherche = array('é', 'è', 'ê', 'ç', 'à', 'â', 'û', 'ù', '/'); 
$remplace = array('e', 'e', 'e', 'c', 'a', 'a', 'u', 'u', '-'); 

//noms pour les fichiers upload 
$uploadFR = str_replace($cherche, $remplace, $rapFR); 
$uploadUK = str_replace($cherche, $remplace, $rapUK); 
//echo $uploadFR; 

//message optionnel 
$messageAdditionel = $_POST['elm1']; 


$sql = "INSERT INTO rapport(categorie,date,titreUK,titreFR,nomfichier) VALUES ('$categ', '$date', '$rapportUK', '$rapportFR', '$rapportFR');"; 
$req = mysqli_query($mysqli, $sql) or die('Erreur SQL !<br/>' . $sql . '<br/>' . mysqli_error($mysqli)); 

$sql2 = "SELECT * FROM rapport ORDER BY idr DESC;"; 
$req2 = mysqli_query($mysqli, $sql2) or die('Erreur SQL !<br/>' . $sql2 . '<br/>' . mysqli_error($mysqli)); 
$data = mysqli_fetch_array($req2); 
$idr = $data['idr']; 
$sqlIdRap = "SELECT * FROM rapport ORDER BY idr DESC LIMIT 1;"; 
$reqIdRap = mysqli_query($mysqli, $sqlIdRap) or die('Erreur SQL !<br/>' . $sqlIdRap . '<br/>' . mysqli_error($mysqli)); 
if ($dataIdRap = mysqli_fetch_array($reqIdRap)) { 
$idRapport = $data['idr']; 
} 

$dirFR = '../articles/FR/' . $idRapport . '-' . $uploadFR; 
$dirUK = '../articles/UK/' . $idRapport . '-' . $uploadUK . '/'; 

if ($dataIdRap = mysqli_fetch_array($reqIdRap)) { 
$idRapport = $data['idr']; 
} 

$dirFR = '../articles/FR/' . $idRapport . '-' . $uploadFR; 
$dirUK = '../articles/UK/' . $idRapport . '-' . $uploadUK . '/'; 


$oldmask = umask(0); 
if (!file_exists($dirFR)) { 
mkdir($dirFR, 777, true); 
} 
if (!file_exists($dirUK)) { 
mkdir($dirUK, 777, true); 
} 
umask($oldmask); 
$count = 0; 

setlocale(LC_TIME, 'en_US.UTF-8', 'en'); 
$dateUK = strftime('%A %d %B %Y'); 
$dateUK = mb_convert_encoding($dateUK, 'UTF-8', 'ISO-8859-1'); 
setlocale(LC_TIME, 'fr_FR.utf8', 'fra'); 
$dateFR = strftime('%A %d %B %Y'); 
$dateFR = mb_convert_encoding($dateFR, 'UTF-8', 'ISO-8859-1'); 

$monRapportFR = $dirFR . "/$uploadFR.php"; // or .php 
//recuperation du fichier PDF 
$pdfFR = $_FILES['rapportFR']['name']; 

$fh = fopen($monRapportFR, 'w'); // or die("error"); 
$corpsFR = "$entete"; 




$corpsFR .= "</head><body>"; 

$extention = pathinfo($pdfFR, PATHINFO_EXTENSION); 


if (move_uploaded_file($_FILES['rapportFR']['tmp_name'], $dirFR . "/" . $pdfFR)) { 

} 
$dirFinal = $dirFR . $pdfFR; 
// if($option_impression==true){ 
$corpsFR .= "<embed src='$pdfFR' style='float:left;width:100%;height:100%'>"; 
// } 
$corpsFR .= "</body> </html>"; 
fwrite($fh, $corpsFR); 

$monRapportUK = $dirUK . "/$uploadUK.php"; // or .php 
//recuperation du fichier PDF 
$pdfUK = $_FILES['rapportUK']['name']; 
//echo $pdfUK; 

$fh = fopen($monRapportUK, 'w'); // or die("error"); 
$corpsUK = "$entete"; 




$corpsUK .= "</head><body>"; 

$extention = pathinfo($pdfUK, PATHINFO_EXTENSION); 


if (move_uploaded_file($_FILES['rapportUK']['tmp_name'], $dirUK . "/" . $pdfUK)) { 

} 
$dirFinal = $dirUK . $pdfUK; 
// if($option_impression==true){ 
$corpsUK .= "<embed src='$pdfUK' style='float:left;width:100%;height:100%'>"; 
// } 
$corpsUK .= "</body> </html>"; 
fwrite($fh, $corpsUK); 

require_once '../swiftmailer/lib/swift_required.php'; 

$sql4 = "SELECT * FROM appartenir, groupe, contact WHERE groupe.idg = appartenir.idg AND appartenir.idc = contact.idc AND appartenir.idg = $categ AND isDeleted = 0 ;"; 
$req4 = mysqli_query($mysqli, $sql4) or die('Erreur SQL !<br/>' . $sql4 . '<br/>' . mysqli_error($mysqli)); 

//indicateurs listes fr/uk 
$nbrFR = 0; 
$nbrUK = 0; 

$ajoutSQL = ""; 

//liste des contacts fr/uk 
$destinataireFR = array(); 
$destinataireUK = array(); 


while ($data4 = mysqli_fetch_array($req4)) { 
    $idc = $data4['idc']; 
    $emailC = $data4['mail']; 
    $cle = $idr . $idc . bin2hex(openssl_random_pseudo_bytes(8)); 
    $langue = $data4['langue']; 

//fin du lien de rapport 
    $data = array('idr' => $idr, 
    'cle' => $cle); 
    $url = "?" . http_build_query($data); 

    $lienFR = "127.0.0.1/newsletter/articles/FR/" . $idRapport ."-". $uploadFR . "/" . $uploadFR . ".php" . $url; 
    $lienUK = "127.0.0.1/newsletter/articles/UK/" . $idRapport ."-". $uploadUK . "/" . $uploadUK . ".php" . $url; 

    if($langue=="FR"){ 
     $destinataireFR[$nbrFR] = array(
     "mail" => $emailC, 
     "lien" => $lienFR 
    ); 
    $nbrFR++; 
}else{ 
     $destinataireUK[$nbrUK] = array(
     "mail" => $emailC, 
     "lien" => $lienUK 
    ); 
    $nbrUK++; 
} 
$ajoutSQL = $ajoutSQL ."('$cle',$idr,$idc),"; 
///// ajouter message additionel ////// 
$messageAdditionel; 
} 
//suppression de la derniere virgule 
$ajoutSQL = rtrim($ajoutSQL,","); 

//Ajout cle dans Code 
$sql5 = "INSERT INTO code(cle,idr,idc) VALUES $ajoutSQL;"; 
$req5 = mysqli_query($mysqli, $sql5) or die('Erreur SQL !<br/>' . $sql5 . '<br/>' . mysqli_error($mysqli)); 

// SMTP 
require '../smtp/PHPMailerAutoload.php'; 
$mail = new PHPMailer(); 
$mail->CharSet = "UTF-8"; 
$mail->IsSMTP(); 

//paramètres et contenu du mail 
$mail->SMTPAuth = true; 
$mail->Host  = "smtp.gmail.com";  
$mail->Username = "test"; 
$mail->Password= "test"; 
$mail->Port  = 587;     
$mail->SMTPSecure = "tls"; 
$mail->From = "[email protected]"; 
$mail->IsHTML(true); 
require_once('../fpdf17/fpdf.php'); 
require_once('../FPDI/fpdi.php'); 
$pdf = new FPDI(); 

foreach($destinataireFR as $destinataireFR){ 
$mail->Body = "<p style='font-family:Calibri'>Bonjour,<br/><br/><a href='$destinataireFR[lien]' style='font-size:1.1em'>Cliquez ici</a> pour ouvrir le fichier <b>$rapportFR</b>.<br/><br/>Cordialement,<br/><br/><b style='color:#4271BE'>L'Equipe Horizon Soft Commodities</b><br/>01.49.89.46.16<br/><a href='mailto:[email protected]'>[email protected]</a><br/><br/><br/><p style='font-size:0.8em'>Si vous souhaitez vous d&eacute;sinscrire et ne plus recevoir ces messages, <a href='mailto:[email protected] &subject=Desinscription'>cliquez ici</a>.</p><br/>$messageAdditionel</p>"; 
$mail->Subject = "$rapportFR"; 
$mail->AddAddress("$destinataireFR[mail]"); 
    if($categ == 27) 
    { 

     // add a page 
     $pdf->AddPage(); 
     // set the source file 
     $pdf->setSourceFile($dirFR . "/" . $pdfFR); 
     // import page 1 
     $tplIdx = $pdf->importPage(1); 
     // use the imported page and place it at point 0,0 with a width of 300 mm(pour un centrage comme reel) 
     $pdf->useTemplate($tplIdx, 0, 0, 300); 
     $pdf->SetXY(70, 70); 
     $pdf->Write(0, "test"); 
     $pdf->SetXY(100, 80); 
     $pdf->Write(0, "test"); 
    } 
if ($mail->Send()){ 
    // echo "success<br/>"; 
}else{ 
    // echo "fail : ". $mail->ErrorInfo . "<br/>"; 
} 
$mail->ClearAddresses(); 
} 
$pdf->Output(); 
ob_end_flush(); 
?> 

db_connect.php

<?php 
include_once 'sql-config.php'; // file contening db credentials 
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE); 
$mysqli->query("SET CHARACTER SET utf8"); 

//message d'erreur en cas d'échec 
if ($mysqli->connect_errno) { 
echo "Echec lors de la connexion à MySQL : (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 

有人知道這是否是從哪裏來的?

+0

我們可以看到完整的PHP腳本。這個問題似乎是最後的$ pdf-> output()調用。由於某些內容已經發送,FPDF無法將輸出發送到瀏覽器。在打開<?php標記之前,它可以像空白行一樣簡單。 – SheppardDigital

+0

其實我的腳本長300多行,我還應該發佈嗎?在<?php標記之前沒有空行,最後也沒有空行 – DeveloppeurDuTurfu

+0

查看可能會輸出數據的任何內容,echo命令,<?php標記之前的空行。 – SheppardDigital

回答

1

有過再看看你的腳本,它看起來像你可能會創建多個PDF文件,但只能輸出最後一個。

我認爲includes和FPDF實例化應該在foreach之外,像這樣;

require_once('../fpdf17/fpdf.php'); 
require_once('../FPDI/fpdi.php'); 

$pdf = new FPDI(); 

foreach($destinataireFR as $destinataireFR) { 
    $mail->Body = "<p style='font-family:Calibri'>Bonjour,<br/><br/><a href='$destinataireFR[lien]' style='font-size:1.1em'>Cliquez ici</a> pour ouvrir le fichier <b>$rapportFR</b>.<br/><br/>Cordialement,<br/><br/><b style='color:#4271BE'>L'Equipe Horizon Soft Commodities</b><br/>01.49.89.46.16<br/><a href='mailto:[email protected]'>[email protected]</a><br/><br/><br/><p style='font-size:0.8em'>Si vous souhaitez vous d&eacute;sinscrire et ne plus recevoir ces messages, <a href='mailto:[email protected] &subject=Desinscription'>cliquez ici</a>.</p><br/>$messageAdditionel</p>"; 
    $mail->Subject = "$rapportFR"; 
    $mail->AddAddress("$destinataireFR[mail]"); 
    if($categ == 27) 
    { 
     // add a page 
     $pdf->AddPage(); 
     // set the source file 
     $pdf->setSourceFile($dirFR . "/" . $pdfFR); 
     // import page 1 
     $tplIdx = $pdf->importPage(1); 
     // use the imported page and place it at point 0,0 with a width of 300 mm(pour un centrage comme reel) 
     $pdf->useTemplate($tplIdx, 0, 0, 300); 
     $pdf->SetXY(70, 70); 
     $pdf->Write(0, "test"); 
     $pdf->SetXY(100, 80); 
     $pdf->Write(0, "test"); 
    } 
if ($mail->Send()){ 
    // echo "success<br/>"; 
}else{ 
    // echo "fail : ". $mail->ErrorInfo . "<br/>"; 
} 
$mail->ClearAddresses(); 
} 
$pdf->Output(); 
+0

哦你是對的,它不應該在foreach!只是移動它,但問題仍然存在.. – DeveloppeurDuTurfu

+0

可悲的是,沒有看到所有的代碼,很難分辨出問題是什麼,它當然不會與你已粘貼的代碼 – SheppardDigital

+0

是的,我明白了,那麼這裏是完整的腳本,對不起,如果它有點長:p – DeveloppeurDuTurfu

0

打開和關閉php標籤後立即添加這些功能。

<?php 
ob_start(); 
// php code here 
ob_end_flush(); 
?> 
+0

嗨,感謝您的回覆,但它似乎並沒有在這裏工作:( – DeveloppeurDuTurfu

+0

你在哪裏添加ob_start();?我可以在你的代碼中看到它嗎? –

+0

確定我剛剛添加了腳本的開始! – DeveloppeurDuTurfu