首页 > 解决方案 > 每个循环之后的错误结果。JSON

问题描述

我有一个 JSON 结果文件,其中包含所有链接,但是在 foreach 循环之后,我几乎错过了所有数据。

我已经调试了代码并将爆炸从 - 更改为 _ ,但它没有帮助。

$pdfs = preg_grep('~\.(pdf)$~', getDirContents($config['directory']));

$result = [];
echo '<pre>';
var_dump($pdfs);

foreach ($pdfs as $doc) {

    var_dump($doc);
    $url = explode("/", $doc);
    $parser = new \Smalot\PdfParser\Parser();
    $pdf = $parser->parseFile($doc);

    $text = $pdf->getText();
    $result[] = [
        'file' => $url[9],
        'text' => $text, 
    ];
}
$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($result));
fclose($fp);

我除了可以拥有 JSON 文件中包含的所有内容。

array(27) {
  [0]=>
  string(111) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-android-DEF.pdf"
  [1]=>
  string(107) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-iOs-DEF.pdf"
  [2]=>
  string(102) "/home/***/domains/***.com/public_html/doc/documenten/something/Anonimiseren Databases.pdf"
  [3]=>
  string(110) "/home/***/domains/***.com/public_html/doc/documenten/something/Arbeidstijdenwet in CAS.pdf"
  [4]=>
  string(128) "/home/***/domains/***.com/public_html/doc/documenten/something/Configuration Reference Manual - CAS 5,18.pdf"
  [5]=>
  string(128) "/home/***/domains/***.com/public_html/doc/documenten/something/Configuration Reference Manual - CAS 5,19.pdf"
}
string(111) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-android-DEF.pdf"
string(107) "/home/***/domains/***.com/public_html/doc/documenten/something/247Rostar-QRC-TR-A4-iOs-DEF.pdf"
string(102) "/home/***/domains/***.com/public_html/doc/documenten/something/Anonimiseren Databases.pdf"
string(110) "/home/***/domains/***.com/public_html/doc/documenten/something/Arbeidstijdenwet in CAS.pdf"

在你给出答案之前阅读这篇文章! 第一个数组显示了 JSON 文件中的所有内容,底部的数组显示了 for each 循环之后的结果。

方法调用后:

$pdf = $parser->parseFile($doc);

调用此方法后失败。

标签: phpjsonpdf

解决方案


在较早版本的Smalot\PdfParser0.12.0 之前,该parseFile()方法会消除解析 PDF 内容时发生的错误。请参阅Smalot/PdfParser/Parser.php 第 74 行

此问题已在 v0.13.0 中修复。确保您至少运行 v0.13。


即使在最新版本中,@运算符仍然用于在创建新TCPDF_PARSER对象时消除错误。见第 93 行

@$parser = new \TCPDF_PARSER(ltrim($content));

这里的任何致命错误也会导致代码退出而没有明确的错误消息。

如果您仍然遇到 v0.14 的问题,请编辑Smalot/PdfParser/Parser.php并删除@. 您应该能够看到出了什么问题。


推荐阅读