概要
PHPでTwitterOAuthを使おうとしたのだが、次のようなエラーが出てしまった。
Fatal error: Uncaught Error: Class 'Composer\CaBundle\CaBundle' not found
Ca-Bundleもautoloadするようにしたところ解決した。
エラーの内容
まず、TwitterOAuthをComposerでインストールするために、php composer.phar require abraham/twitteroauth
とコマンドを実行した。これはtwitteroauthのインストール方法を参考にしている。
これを実行すると、カレントディレクトリにabraham
というフォルダが作成され、この中にtwitteruoauthのライブラリが入っている。
このフォルダを、phpファイルと同じディレクトリに置いた。
次のようなコードで、twitteroauthをphp内でrequireする。
require_once __DIR__ . '/abraham/twitteroauth/autoload.php';
すると、このようなエラーが出てきてTwitterAPIを実行できなかった。
Fatal error: Uncaught Error: Class 'Composer\CaBundle\CaBundle' not found
同様のエラー報告
TwitterOAuthのGitHubのissue(https://github.com/abraham/twitteroauth/issues/892 )には同様のエラーが報告されている。ただ、状況の説明がされておらず、再現ができなさそうだった。
解決方法
abraham/twitteroauth/autoload.php
を実行してライブラリを呼び出すと、Composerの新しいライブラリであるCaBundle
をロードできないのが原因だった。
そこで、次のようにca-bundleとtwitteroauthをautoloadできるようにする。
1. composer.jsonを次のように書く
{
"require": {
"abraham/twitteroauth": "^2.0",
"composer/ca-bundle": "^1.2"
}
}
2. php composer.phar install
をcomposer.json
のあるディレクトリで実行する
3. vender
というフォルダが作成されるので、このフォルダをphpファイルと同じディレクトリに置く
4. phpファイルで次のようにrequireする
require_once __DIR__ . '/vender/autoload.php';
これで、ca-bundleとtwitteroauthをロードすることができる。twitterAPIも使えるようになる。
TwitterOAuthの公式ドキュメントhttps://packagist.org/packages/abraham/twitteroauth によると、バージョン1.2.0以降でca-bundleをrequireするようになっている。これ以降のバージョンではca-bundleがないとエラーが出る。これは2020年9月のリリースなので、エラーとしてはあまり報告されていない。
まとめ
Ca-Bundleがなくて怒られるエラーが出た場合、twitteroauth内のautoload.phpを実行していることがある。その際は、composer.jsonで作成したautoload.phpを読み込む必要がある。
それでもうまくいかない場合は、twitteroauthのバージョンを1.1.0に下げて試すこともした方がいい。
https://github.com/abraham/twitteroauth/issues/892#issuecomment-760157284 でこの件を報告したので、解決しなかったらこちらにコメントください。