Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP,使用后需要覆盖或删除文件_Php_Amazon S3 - Fatal编程技术网

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

PHP,使用后需要覆盖或删除文件,php,amazon-s3,Php,Amazon S3,我编写了一个函数,从S3中获取一个文件,并从中获取页数。(这是一个PDF。)在我尝试对多个文件执行相同操作之前,一切正常。现在它只是返回最后一个文件的页数。我认为问题在于需要删除或覆盖local.pdf,但我不确定如何删除或覆盖。我以为它会自动覆盖它 我试着使用$pdf->cleanUp()但这似乎没有任何作用。它仍在返回最后一个文件的页数 这是为每个子作业调用的函数: public function getPageCountPDF($jobid) { $this->load-&g

我编写了一个函数,从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)的部分:


}

因此,您可以调用get\u all\u directory\u files调用custom\u 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
    }

}

因此,您可以调用get\u all\u directory\u files调用custom\u 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
    }

之后$pageCount会发生什么情况
$pageCount=$CI->getPageCountPDF($copy['jobid'])
每次迭代后都会覆盖它。也许你想要像这样的东西,
$pageCount[$copy['jobid']]=$CI->getPageCountPDF($copy['jobid'])
因此,您实际上保留了一个$pageCounts数组,以便进一步处理。

之后$pageCount会发生什么
$pageCount=$CI->getPageCountPDF($copy['jobid'])

每次迭代后都会覆盖它。也许你想要像这样的东西,
$pageCount[$copy['jobid']]=$CI->getPageCountPDF($copy['jobid'])
所以你实际上保留了一个$pageCounts数组,以便进一步处理。

这是每个子作业调用的函数:
相反,你可以显示代码部分。@RasaMohamed,我把它添加到我的问题中。如果我可以问你有多个文件要读吗?@joash,是的。我现在正在测试2,但可能还有更多。它查看每个子作业,找到它的文件并获取页数。我可以发布一个过程来获取所有目录文件并在读取每个文件时循环吗?然后你可以删除你的想法?
这是每个子作业调用的函数:
相反,你可以显示代码部分。@RasaMohamed,我把它添加到我的问题中。如果我可以问你有多个文件要读?@joash,是的。我现在正在测试2,但可能还有更多。它查看每个子作业,找到它的文件并获取页数。我可以发布一个过程来获取所有目录文件并在读取每个文件时循环吗?然后您可以删除您认为是什么?谢谢,但是已经有一个函数可以从每个作业中获取文件。每个子作业只能有一个PDF。我已经通过循环回显了文件,代码得到了正确的文件。当我获得页面数时,它变得一团糟。你如何更改读写权限并覆盖文件?使用chmod?我会试试看。是的,像chmod(“/somedir/somefile”,777);对于读写和删除,然后你取消链接或删除谢谢,我会试试。我应该把chmod行放在哪里?谢谢,但是已经有一个函数可以从每个作业中获取文件。每个子作业只能有一个PDF。我已经通过循环回显了文件,代码得到了正确的文件。当我获得页面数时,它变得一团糟。你如何更改读写权限并覆盖文件?使用chmod?我会试试看。是的,像chmod(“/somedir/somefile”,777);对于读写和删除,然后你取消链接或删除谢谢,我会试试。我应该把chmod行放在哪里?$pageCount在一个显示子作业的循环中,因此只有在显示子作业时才会调用它。然后将其与数据库中输入的页数进行比较,如果有差异,则显示为红色背景。不过$pageCounts数组是个主意,谢谢。我会试试。实际上,数组不起作用,因为在调用和显示每个子作业时,会调用函数以获取该作业中PDF的页数。然后,它应该转到下一个子作业(当要显示时),并在PDF中查找该作业的页数。$pageCount位于显示子作业的循环中,因此仅在要显示子作业时才会调用它。然后将其与数据库中输入的页数进行比较,如果有差异,则显示为红色背景。不过$pageCounts数组是个主意,谢谢。我会试试。实际上,数组不起作用,因为在调用和显示每个子作业时,会调用函数以获取该作业中PDF的页数。然后,它应该转到下一个子作业(显示时),并在PDF中找到该作业的页数。
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;
 $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
    }