• ベストアンサー

PHPでのPDF parser について

お世話になります。 PHPで PDF PARSER を使ってPDFファイルから情報を抽出してExcelファイルを作ることをしていました。ついこの間までちゃんと働いていたプログラムなのですが、突然以下のようなエラーメッセーjが出てきて、働かなくなりました。 Fatal error: Uncaught Error: Class 'Smalot\PdfParser\Parser' not found in C:\xampp\htdocs\calibration\readPDF2.php:5 Stack trace: #0 {main} thrown in C:\xampp\htdocs\calibration\readPDF2.php on line 5 'Smalot\PdfParser\Parser' が見つからないと言っていますが、自分のフォルダーを調べると、プログラムファイルと同じフォルダーに Parser.php がちゃんと入っています。しかも今までは働いていたのですから、それがないというメッセージは意味が分かりません。 このクラスはネットからダウンロードしたものですが、ある程度の時間が経つと無効になったりするのでしょうか? 参考に自分のPHPプログラムの最初の部分を張り付けておきます。 <?php //C:\xampp\htdocs\calibration\readPDF.php include 'vendor/autoload.php'; // Initialize and load PDF Parser library $parser = new \Smalot\PdfParser\Parser(); $host = "localhost"; $user = "root"; $pass = "rsi2018"; $database = "calibration"; //============== connect to MySQL ================ $connection = mysqli_connect($host, $user, $pass, $database) or die("cannot connect to database"); // Source PDF file to extract text $dir = "C:/Users/ShiroYasuda/Rockland Scientific Inc/Production - Rockland Production/temporary-shear-calibration-folder/"; if (is_dir($dir)){ if ($dh = opendir($dir)){ while (($file = readdir($dh)) !== false){ どなたか詳しい方がご意見をお聞かせください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お世話になっております。 ご提供いただいたエラーメッセージに基づいて考えられる原因としてはいくつか考えられますので、それぞれの点を確認してみてください。 1. Composer Autoloadの問題: あなたがプログラムで`include 'vendor/autoload.php';`としていることから、Composerを使っていると推測されます。クラスが見つからないというエラーは、Autoloadの問題が原因である可能性があります。ComposerのAutoloadがちゃんと生成されているか確認してください。コマンドラインで以下のコマンドを実行して、Autoloadを再生成できます。 ``` composer dump-autoload ``` 2. 名前空間の問題: 指定している名前空間が間違っている、またはクラスが名前空間に正しく配置されていない場合にも、類似のエラーが発生することがあります。`Parser`クラスは`Smalot\PdfParser`名前空間に属していることを確認してください。 3. ファイルパスの問題: `Parser.php`はあなたが指摘した場所に存在するようですが、そのファイルがComposerのAutoload機構によって適切に認識されている必要があります。ディレクトリ構造とComposerの`autoload`定義を再確認してください。 4. バージョンの問題: PHPやPDF Parserライブラリのバージョンが更新され、以前のコードが互換性を失っている可能性もございます。使用しているライブラリのドキュメントを確認し、バージョンに関するアップデートがないか確認してください。 もし、これらの点を確認しても問題が解決しない場合は、ライブラリの再インストールも検討いただくと良いでしょう。場合によっては、ローカル環境のXAMPPなどに潜在する問題があるかもしれませんので、再セットアップや他の環境でのテストも考えてみてください。 さらに深刻な問題がある場合や、これらの対策が解決に至らないならば、ライブラリ作成者への報告やサポートの求め、またはコミュニティなどでの質問を検討されるのも一つの方法です。 お役に立てると幸いです。ご不明な点があれば、追加の情報を伺いながら一緒に解決策を探しましょう。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/

papashiroSooke
質問者

お礼

問題の原因として挙げていただいた各点を確認していきたいと思います。 解決できたならば連絡を差し上げます。

Powered by GRATICA
papashiroSooke
質問者

補足

問題は名前空間のようでした。 ちゃんと名前空間として定義したフォルダーに入れて、働くようになりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPでPDFファイルを読む

    御世話になります。 PHPでPDFファイルをテキストとして読むプログラムを書いてみましたが、エラーメッセージが出て上手く行きません。 以下にプログラムのソースを添付しますが、5行目でのクラスのインスタンス化が問題で、Parser というクラスが存在しないと言っています。 <?php //C:\xampp\htdocs\newBOM\readPDF-purchase-order.php include 'vendor/autoload.php'; // Initialize and load PDF Parser library $parser = new Smalot\PdfParser\Parser(); //"C:\xampp\htdocs\NewBOM\vendor\smalot\pdfparser\Parser.php" $host = "localhost"; $user = "root"; $pass = "rsi2018"; $database ="BOM"; //============== connect to MySQL ================ $connection = mysqli_connect($host, $user, $pass, $database) or die("cannot connect to database"); // Source PDF file to extract text $dir = "C:/Users/ShiroYasuda/OneDrive - Rockland Scientific Inc/Desktop/test/"; if (is_dir($dir)){ if ($dh = opendir($dir)){ while (($file = readdir($dh)) !== false){ if(strpos($file, ".pdf")>0){ $totalPath = $dir.$file; $pdf = $parser->parseFile($totalPath); // Extract text from PDF $textContent = $pdf->getText(); // this is not an array //echo $textContent."<BR>"; } } } } mysqli_close($connection); ?> Smalot\PdfParser\Parser(); の部分に関しては、このプログラムと同じレベルに Smalotというフォルダーがあり、その中のサブフォルダー dfParser の中にparser.php というファイルがあって、その中でParser クラスが定義されています。 従って5行目についてクラスが見つからないというメッセージは理解できません。 どなたか詳しい方のご意見を頂けると有難く思いますので、どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで PDFファイルを作る

    PHPでPDFファイルを作ろうと思い、教本に載っていた以下のようなコードを書いて実行してみましたが、エラーメッセージが出ました。 コード: <?php $pdf = pdf_new(); pdf_open_file($pdf, "c://xampp/htdocs/PDFtest/pdf-test-file.pdf"); $font = pdf_findfont($pdf, "Times-Roman", "host"); pdf_begin_page($pdf, 595, 842); pdf_setfont($pdf, $font, 30); pdf_show_xy($pdf, "This is the first sentence I write in PDF.", 50, 750); pdf_end_page($pdf); pdf_close($pdf); pdf_delete($pdf); ?> エラーメッセージ: Fatal error: Uncaught Error: Call to undefined function pdf_new() in C:\xampp\htdocs\PDFtest\pdf-test-program.php:12 Stack trace: #0 {main} thrown in C:\xampp\htdocs\PDFtest\pdf-test-program.php on line 12 これはたぶんPDF関係のライブラリーが必要なのだろうと思い、ネットでいろいろ検索してみましたがいまいちよくわかりません。 このpdf_new() という関数を使えるようになるための手順をご存知の方、どうか教えてください。よろしくお願いいたします。 使用中のPHPはXamppを介してPHP7.4.3です。

    • ベストアンサー
    • PHP
  • PHPファイルを動作させる場所

    xamppを導入し C:\xampp\htdocs内にPHPファイルを置けば動作するところまで分かりました 例えばc:\abcとフォルダを作って中にphpファイルを置いた場合 動作させるには何をすればよいでしょうか?

    • ベストアンサー
    • PHP
  • xamppでPHPを実行

    PHP初心者です。 Xampp(バージョンは1.6.8)をインストールして、 PHPファイルを実行しようとすると、 「Fatal error: Undefined class name 'loggermanager'」 というエラーが出てしまいます。 libフォルダに「LoggerManager.php」は入っているのですが… 実行しようとしているファイルは C:\xampp\htdocs\ディレクトリ1\ディレクトリ2\ディレクトリ3\ディレクトリ4\ディレクトリ5 の配下にあり、「LoggerManager.php」は C:\xampp\htdocs\test\support_tool_pon\lib\log4php の配下にあります。 原因に心当たりがある方、教えてください。

    • ベストアンサー
    • PHP
  • Smartyのtemplatesとtemplates_cのパスの基準について

    Windows環境でSmartyを動かしています。 動かしているサンプルソースがWindows用ではないため、パスなどを動くように直していたのですが、パスの設定でつまってしまいました。 サンプルのphpファイルはC:\xampp\htdocs\sample\に置いており、 Apacheのinclude_pathにC:\xampp\php\smarty\libs\を設定しました。 「templates_c」「templates」「configs」「cache」のフォルダを同じ場所に作成し、 それぞれディレクトリを指定しようとしたのですが、サンプルの「/home/~」というのをどのように直せばいいのか色々と試していて、 $smarty->template_dir = '../templates/'; $smarty->compile_dir = 'C:/xampp/php/smarty/templates_c/'; $smarty->config_dir = 'C:/xampp/php/smarty/configs/'; $smarty->cache_dir = 'C:/xampp/php/smarty/cache/'; で正常に動くのですが、 $smarty->template_dir = '../templates/'; $smarty->compile_dir = '../templates_c/'; とすると、templates_cが存在しないというエラーが出てきます。 compile_dirを"../"にするとhtdocsの直下にファイルができていたので、compile_dirはphpファイルからの相対パスで、template_dirはlibsからの相対パスになっているように思いますが、相対パスで指定する場合の基準パスが違うのでしょうか?

    • 締切済み
    • PHP
  • コマンドラインからPHPを実行するには。(Windows)

    PHPスクリプトをコマンドライン上で実行しようと思い、 >php bookread.php と入力したところ、 >'cdc:\' は、内部コマンドまたは外部コマンド、 >操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と表示されてしまいます。 おそらく環境変数の問題か、もしくは実行しようとしたディレクトリがいけないのかと思いますが、どうしたらよいのかわかりません。 Windowsで、OSはwinXP、また、phpはxamppで取得しました。 実行しようとしたファイルbookread.phpは c:\xampp\htdocs\_test というフォルダの中にあります。 どのディレクトリに移ってから行えばよいのか、もしくは環境変数にどう書き加えればよいのか、教えてください。 私が実行を試したディレクトリは、 c:\xampp\htdocs\_test> と c:\> です。 (ブラウザ上で他のPHPスクリプトを実行することは可能です。)

    • 締切済み
    • PHP
  • php xampp TOPページ

    xamppをインストールして、PHPがネットにつながらなくてもできるようになりました。 しかしこのhttp://localhost/のTOPページのフォルダ(DocumentRoot)を変えようと思い、 http.confを DocumentRoot "C:/Program Files/xampp/htdocs" ↓ DocumentRoot "C:/Documents and Settings/username/デスクトップ/php" に変更してxampp_restart.exeを実行して、確かめてみたのですが、 php/フォルダにあるPHPは動きませんでした。 まったくお手上げ状態です。 どこを変更すれば動くようになるのかわかる方教えて下さい。

    • ベストアンサー
    • PHP
  • PHP の2つの関数について

    お世話になります。 ディレクトリー内の要素が、さらにディレクトリーなのかあるいはファイルなのかを検証する簡単なルーティンを作っていますが、この中で使っている2つの関数の働きが、自分が理解していたようにならないので質問させていただきます。 (1) str_replace() について ファイルエクスプローラーからpath としてコピーしてきたディレクトリーのパスは次のようになっています。 "C:\xampp\htdocs\PHP-practice\testDir" この中にあるバックスラッシュ "\" 記号を、str_replace() を使って "/" に変えようとしましたが、次のようになってしまいました。 $direct ="C:\xampp\htdocs\PHP-practice\testDir"; $direct = str_replace("\\", "/", $direct); echo "========== ".$direct."<BR>"; 結果は: ========== C: mpp/htdocs/PHP-practice estDir つまり中ほどにあるものは変換されましたが、最初と最後は変換されず、しかも元のパスの一部が消えています。これはどうしたことなのでしょうか?これが最初の質問です。 しかし実際にはここで止まっている訳にいかないので、手作業で修正して先に進めました。 (2)readdir() について ディレクトリーの中をreaddir()で読んで、それがディレクトリーかファイルかを区別する簡単なコードですが、上手く行きません。 出力結果は次のように、ディレクトリーをファイルであると表示してきます。 ========== C:/xampp/htdocs/PHP-practice/testDir insideDir-1 is a file insideDir-2 is a file video1.mp4 is a file readdir() か is_dir()のいずれかの使い方がおかしいのでしょうか? これが2番目の質問です。 実際には testDir フォルダーの中身は以下の通りです。 testDir >> insideDir-1 >> new1.php >>insideDir-2 >> songPath.txt >> video1.mp4 以下に全体のコードを書きます。 <?php function read_directory($direct){ $direct = str_replace("\\", "/", $direct); echo "========== ".$direct."<BR>"; $handle = opendir($direct); $entry = readdir($handle); $entry = readdir($handle);// skip . & .. while($entry = readdir($handle)){ if( is_dir($entry) ) { echo $entry." is a directory<BR>"; }else{ echo $entry." is a file<BR>"; } }// while closedir($handle); return; }// function // ================ main program ================ $dirname="C:/xampp/htdocs/PHP-practice/testDir"; //手作業修正済み read_directory($dirname); ?> どなたかよいアドバイスを頂ける方がいらっしゃいましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPとデータベースの接続ができません

    開発環境はXamppで、OSはWindowsです。 データベースを使いたいと考えていますが、初心者で非常に困っています。 <?php $dsn = 'mysql:dbname=testdb1; host=127.0.0.1'; $usr = 'ユーザー名'; $passwd = 'パスワード'; try { $db = new PDO($dsn, $usr, $passwd); print '接続に成功しました'; $db = NULL; } catch (PDOException $e) { die("接続エラー:{$e->getMessage()}"); } 上記のファイル、connect.phpを実行しても、 Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\connect.php on line 3 と表示されてしまいます。 構文エラーだと思い、自分で出来る限りなおしたのですが解決できません。 どなたかアドバイスよろしくお願いいたします。

  • PHPのopendir関数って・・・。

    <?php $dir = "/etc/php5/"; // 既知のディレクトリをオープンし、その内容を読み込みます。 if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: $file : filetype: " . filetype($dir . $file) . "\n"; } closedir($dh); } } ?> 上の例の出力は、たとえば以下のようになります。 filename: . : filetype: dir filename: .. : filetype: dir filename: apache : filetype: dir filename: cgi : filetype: dir filename: cli : filetype: dir とありますが、 filename: . : filetype: dir filename: .. : filetype: dir は何もフォルダになくても出ますよね? これは何ですか??

    • ベストアンサー
    • PHP