PHP组合两个PDF脚本将返回组合两次的第一页

PHP组合两个PDF脚本将返回组合两次的第一页,php,session,pdf,post,tcpdf,Php,Session,Pdf,Post,Tcpdf,我有一个php脚本,可以合并两个PDF文件。当我直接从服务器拉取这两个文件时,脚本工作得非常好。但关键是将这两个文件作为服务发布,并将这两个文件作为base 64编码文本发布,然后合并这些文件,让接收端下载合并后的PDF 当使用post变量时,我得到的结果好坏参半。我认为缓存或会话中有东西卡住了,但我不太熟悉如何正确地实现这一点 当结果不正确时,将首先合并两次。我开始检查PDF1=PDF2,并抛出一个错误,但在测试时它永远不会发生,除非我真的发布了相同的PDF。我在脚本中尝试了进一步的测试,但无

我有一个php脚本,可以合并两个PDF文件。当我直接从服务器拉取这两个文件时,脚本工作得非常好。但关键是将这两个文件作为服务发布,并将这两个文件作为base 64编码文本发布,然后合并这些文件,让接收端下载合并后的PDF

当使用post变量时,我得到的结果好坏参半。我认为缓存或会话中有东西卡住了,但我不太熟悉如何正确地实现这一点

当结果不正确时,将首先合并两次。我开始检查PDF1=PDF2,并抛出一个错误,但在测试时它永远不会发生,除非我真的发布了相同的PDF。我在脚本中尝试了进一步的测试,但无法确定错误点

我还可以如何调试它?我还能试什么

以下是当前脚本:

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/PDFMerge/tcpdf/tcpdf.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/PDFMerge/tcpdf/tcpdi.php');


class MergePDF extends TCPDI 
{
    public $files = array();

    public function setFiles($files)
    {
        $this->files = $files;
    }

    public function concat()//from set assign example
{
    foreach($this->files AS $key=> $file) {
        $pageCount = $this->setSourceData($file);//setSourceData used for raw data
        for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
             $tplIdx = $this->ImportPage($pageNo);
             $s = $this->getTemplatesize($tplIdx);
             $this->AddPage($s['w'] > $s['h'] ? 'L' : 'P', array($s['w'], $s['h']));
             $this->useTemplate($tplIdx);
        }
        if($key>0){
            if ($this->files[0] == $this->files[1]){
            echo "Duplicate file error"; //I cannot get this to occur
            die();
            }                   
        }
        unset($file);
        unset($pageCount);
    }
}


}

//error_log("MergePDF Called");

$pdf641 = $_POST['pdf1'];
$pdf642 = $_POST['pdf2'];
$outputType = $_POST['output'];


if ($pdf641 == $pdf642)
{   
    echo "error: both files are the same";
    error_log("MergePDF error: Both Files are The Same!");
    session_unset();
    die();
}

/*

if (hash("sha256",$pdf641,false) == hash("sha256", $pdf642,false))
{
        echo "error: both files are the same";
        error_log("MergePDF error: Both SHA256 Files are The Same!");
        die();
}
*/


$p1d = base64_decode($pdf641);
$p2d = base64_decode($pdf642);

$pdf = new MergePDF();
$pdf->setFiles(array( $p1d, $p2d));

$pdf->concat();

$uuid = uniqid("pdf_",false);

if ($outputType == "download")
{
    $pdf->Output($uuid . '.pdf', 'I'); /*//D I*/ 
}
else
{
    $out = base64_encode($pdf->Output($uuid . '.pdf', 'S')); //output is 'S' for string 
    echo $out;
}

?>


不要吹毛求疵,但为什么要使用会话?它们在代码中似乎不是任何会话数据。此外,它们的缓存不会在代码中发生。您的输出看起来还需要一个标题
标题('Content-type:application/pdf')@danielson317我在会话中尝试了不同的方法,但没有任何方法可以解决问题。如果局部变量足够多,我可以去掉所有会话调用。是什么导致了我的问题?不确定是什么导致了你的问题。我确实觉得奇怪,你用
$\u POST['pdf1']
而不是
$\u文件['pdf1']
。PHP通常使用文件超级全局上传文件。也许这与此有关。@danielson317向服务发出请求的系统需要发布URL字符串中编码的PDF数据。我的结果是随机的,有时我得到正确的结果,有时我得到第一个PDF合并两次。