importしたファイル内でrequire_onceしている場合はライブラリ全体へのパスを通す
include_pathを追加することで対処
App::importでgoogle-api-php-clientというライブラリをインクルードした時の話。
CakePHPの
app\Vendor
にライブラリ一式をコピーして、App::importをコントローラに追加。
App::import('Vendor', 'Google/Client'); App::import('Vendor', 'Google/Service/Analytics');
そして、アクションの中でインスタンスを生成するコードを書いたところ、
$c = new Google_Client();
下のエラーが表示された。
Error: require_once() [<a href='http://php.net/function.require'>function.require</a>]: Failed opening required 'Google/Auth/AssertionCredentials.php' (include_path='C:\xampp\htdocs\vhost\cakephp2.4.7\lib;.;C:\xampp\php\PEAR') File: C:\xampp\htdocs\vhost\cakephp2.4.7\app\Vendor\Google\Client.php Line: 18
include_pathに追加されているパスを探索したが、AssertionCredentials.phpが見つからないという感じのエラーになる。include_pathを追加するには下のコードで対応可能
$path = 'C:\xampp\htdocs\vhost\cakephp2.4.7\app\Vendor;'; set_include_path(get_include_path().PATH_SEPARATOR.$path);
app\Vendorへのインクルードパスを追加すれば上のエラーは表示されなくなる。