Неправильный результат после каждого цикла. 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);

После вызова этого метода это не удалось.

$url[9] не должно быть $url[10]? Вы на самом деле не объясняете, что не так, и не даете нам фактического результата, на который вы надеялись.

Jonnix 10.07.2019 12:36

Что-нибудь пишется в result.json? В противном случае скрипт где-то выдает фатальную ошибку. Проверьте журналы ошибок или установите display_errors=on в php.ini.

Arnold Daniels 10.07.2019 12:42

Глядя на ваш скрипт, вы используете взорваться, чтобы получить имя файла, полагаясь на определенное количество (под)каталогов. Лучше использовать basename, чтобы скрипт не ломался при смене пути.

Arnold Daniels 10.07.2019 12:44

@Jasny-ArnoldDaniels все будет записано успешно, но в foreach не удалось прочитать все 5 строк, после вызова метода возвращается только 4.

peterhillie 10.07.2019 13:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
92
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуй это:

<?php

$config["directory"] = "/my/path/to/pdfs/";    
$pdfs = glob("{$config["directory"]}*.pdf");
$result = [];

foreach($pdfs as $pdf) {

    $filename = pathinfo($doc, PATHINFO_BASENAME);
    $parser = new \Smalot\PdfParser\Parser();
    $pdf = $parser->parseFile($pdf);
    $text = $pdf->getText();
    $result[] = [
        "file" => $filename,
        "text" => $text
    ];

}

file_put_contents("results.json", json_encode($result));

В основном он делает то же самое, но с меньшим количеством пуха. Возможно, вам придется настроить $config["directory"] так, чтобы он соответствовал пути, по которому хранятся ваши PDF-файлы.

Спасибо, но это не решило проблему. Я все еще получаю 4 файла PDF из $pdf, но $pdfs содержит 25 файлов PDF.

peterhillie 10.07.2019 13:49

Любой ответ? @Ануга

peterhillie 10.07.2019 15:15

что вы получите, если сделаете echo count($pdfs); после $result = [];

Anuga 11.07.2019 19:15

В более старых версиях Smalot\PdfParser, вплоть до версии 0.12.0, метод parseFile() устраняет ошибки, возникающие при анализе содержимого PDF. См. Smalot/PdfParser/Parser.php строка 74.

Эта проблема была исправлено в v0.13.0. Убедитесь, что вы используете как минимум v0.13.


Даже в последней версии оператор @ по-прежнему используется для подавления ошибок при создании нового объекта TCPDF_PARSER. См. строка 93:

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

Любая фатальная ошибка здесь также приведет к выходу кода без четкого сообщения об ошибке.

Если проблема с версией 0.14 не устранена, отредактируйте Smalot/PdfParser/Parser.php и удалите @. Вы должны быть в состоянии видеть, что идет не так.

Другие вопросы по теме