У меня есть файл результатов 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);
После вызова этого метода это не удалось.
Что-нибудь пишется в result.json? В противном случае скрипт где-то выдает фатальную ошибку. Проверьте журналы ошибок или установите display_errors=on в php.ini.
Глядя на ваш скрипт, вы используете взорваться, чтобы получить имя файла, полагаясь на определенное количество (под)каталогов. Лучше использовать basename, чтобы скрипт не ломался при смене пути.
@Jasny-ArnoldDaniels все будет записано успешно, но в foreach не удалось прочитать все 5 строк, после вызова метода возвращается только 4.






Попробуй это:
<?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.
Любой ответ? @Ануга
что вы получите, если сделаете echo count($pdfs); после $result = [];
В более старых версиях 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 и удалите @. Вы должны быть в состоянии видеть, что идет не так.
$url[9]не должно быть$url[10]? Вы на самом деле не объясняете, что не так, и не даете нам фактического результата, на который вы надеялись.