PHP,使用后需要覆盖或删除文件

时间:2019-06-11 11:01:11

标签: php amazon-s3

我编写了一个从S3获取文件并从中获取页数的函数。 (这是PDF。)一切正常,直到我尝试对多个文件执行相同的操作为止。现在,它只是返回最后一个文件的页数。我认为问题在于local.pdf需要删除或覆盖,但是我不确定如何。我认为它会自动覆盖它。

我尝试使用$pdf->cleanUp();,但这似乎无济于事。它仍然返回最后一个文件的页数。

这是为每个子作业调用的函数:

public function getPageCountPDF($jobid) {
    $this->load->library('Awss3', null, 'S3');
    $PdfTranscriptInfo = $this->MJob->getDOCCSPdfTranscript($jobid);
    $filename = $PdfTranscriptInfo['origfilename'];
    $PdfFilename = 'uploads/' . $jobid . '/' . $filename;
    $localfilename = FCPATH . 'tmp\local.pdf';
    $this->S3->readfile($PdfFilename, false, 'bucket');
    require_once 'application/libraries/fpdi/fpdf.php';
    require_once 'application/libraries/fpdi/fpdi.php';
    $pdf = new FPDI();
    $pageCount = $pdf->setSourceFile($localfilename);
    $pdf->cleanUp();
    return $pageCount;
}

我没有收到任何错误消息,但是$ pageCount应该是8,然后是6。我从函数中得到的收益是6和6。

我也尝试添加

    ob_clean();
    flush();

但是这会清除整个页面,我不想要。

我也尝试使用生成的名称代替local.pdf,但这不起作用(我收到“无法打开文件”消息)。

编辑::这是调用函数getPageCountPDF($ jobid)的部分:

foreach ($copies as $copy) {
    .
    .
    $CI = &get_instance();
    $pageCount = $CI->getPageCountPDF($copy['jobid']);
    .
    .
}

2 个答案:

答案 0 :(得分:0)

    function get_all_directory_files($directory_path) {
    $scanned_directory = array_diff(scandir($directory_path), array(
        '..',
        '.'
    ));

    return custom_shuffle($scanned_directory);
}

function custom_shuffle($my_array = array()) {
$copy = array();
while (count($my_array)) {
    // takes a rand array elements by its key
    $element = array_rand($my_array);
    // assign the array and its value to an another array
    $copy [$element] = $my_array [$element];
    // delete the element from source array
    unset($my_array [$element]);
}
return $copy;

}

因此您可以调用 get_all_directory_files ,后者会调用 custom_shuffle

然后,您可以在阅读它们时循环浏览。万一您要删除文件

您可以继续:

 $arrayfiles = get_all_directory_files('mypath');
    foreach ($arrayfiles as $filename) {
        echo 'mypath/'.$filename;  //You can do as you please with each file here
       // unlink($filename); if you want to delete
    }

答案 1 :(得分:0)

$ pageCount之后会发生什么 $pageCount = $CI->getPageCountPDF($copy['jobid']);? 每次迭代后都会覆盖。也许您想要类似$pageCount[$copy['jobid']] = $CI->getPageCountPDF($copy['jobid']);之类的东西,因此实际上保留了一个$ pageCounts数组,可以在行的下面进行处理。