• ベストアンサー

require_onceが動いていない

Cache_Liteを使ってキャッシュ処理を組もうとしています。 実行すると、ブラウザ上には何も表示されない状態です。 試しにキャッシュ処理を除いた部分のPHP処理を実行すると、 その処理は正しく実行されることが確認できました。 いろいろ調べてみると、どうやらrequire_onceが動いていないであろうということに行き当たりました。 いろいろ試して見たのですが、なぜ、require_onceが動作していないのかわからずに先に進むことができない状態でいます。 どの部分を確認して試すべきか、教えていただけないでしょうか。 ■実行環境は以下の通りです。  OS:Windows XP Pro.  PHP: PHP5 5.1.4  サーバ: Apache 2.0.58 ■PHP,PEARは正常にインストールされています。  コマンドプロンプトでpear list を実行すると、  "Cache_Lite 1.7.2 stable"と表示されているので、  Cache_Liteそのものはインストールされています。 ■ソース --------------------------------------------------------- require_once('Cache/Lite.php'); //キャッシュ処理 $options = array( 'cacheDir' => '/tmp/cache', 'lifeTime' => 86400, 'caching' => true, 'automaticCleaningFactor' => 20, 'automaticSerialization' => true, 'pearErrorMode' => 'CACHE_LITE_ERROR_DIE' ); $cache = new Cache_Lite($options); $id = 'RTSK001'; if ($data = $cache->get($id)) {   //キャッシュがある場合の処理     } else { //キャッシュがない場合の処理 $Cache_Lite->save($data,$id); } ------------------------------------------------------ ■その他  ちなみに、このPHPはhtmlページよりSSIによって呼び出しています。  SSIによるPHPの呼び出しは動作しています。

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

  • ベストアンサー
noname#26650
noname#26650
回答No.5

>required 'Cache/Lite.php' (include_path='.;C:\\php5\\pear') in >include_path=".;C:\php\pear" この2行で、include_pathの内容が食い違っています。 エラーログで、なぜC:\php5と「5」が付いているのかは よくわからないですけれど…。

Gooooooogle
質問者

お礼

おかげさまで、無事解決できました。 いろいろとご指導いただき、ありがとうございました。

Gooooooogle
質問者

補足

回答ありがとうございます。 確認したところ、php.iniの中で、  ;include_path=".;C:\php\pear" という記述になったままでした。 1文字目のセミコロンを取って、  include_path=".;C:\php\pear" として保存、apacheを再起動して phpinfo()で確認すると、 include_pathが、  .;C:\php\pear となっているのを確認でき、PHPも処理が実行されるようになりました。 ちなみに、php.iniは、PHPをインストールしたデレィクトリではなくて、 c:\windows 下のphp.iniを参照していました。 ありがとうございました。

その他の回答 (5)

noname#30334
noname#30334
回答No.6

エラーログで一目瞭然ですね。 >failed to open stream: No such file or directory そんなファイルは存在しないから開けないって事です。 require_onceが動いてないのではなく、参照するファイルのパスが間違っているんですね。

Gooooooogle
質問者

お礼

おかげさまで、無事解決できました。 いろいろとご指導いただき、ありがとうございました。

Gooooooogle
質問者

補足

対処内容は、ANo.5の通りです。 ありがとうございました。

noname#26650
noname#26650
回答No.4

何だかもどかしいですね…。 > apacheのエラーログを確認しました。 どんなエラーが出たのでrequire_onceが動作していないと 判断されたかを教えていただければ、 もしかすると適切なアドバイスができるかもしれないのに…。

Gooooooogle
質問者

補足

すみません、いま別の回答を頂いた方向けに補足を書いていたところなので、 そちらを参照していただけないでしょうか。

noname#30334
noname#30334
回答No.3

>実行すると、ブラウザ上には何も表示されない状態です。 PHPの実行時エラーを出力するようにしましょう。 その内容でエラーの原因が判明する場合があります。 php.iniの設定で、display_errorsをOnにして、 Apacheを再起動して下さい。

Gooooooogle
質問者

補足

display_errorsはOnになっている状態でしたので、 apacheのエラーログを確認しました。

noname#26650
noname#26650
回答No.2

> require_onceが動作していないので、後の処理が全てスキップされていると推測しています。 Apacheのerror.logはごらんになりましたか?

Gooooooogle
質問者

補足

回答ありがとうございます。 ログを参照したところ、次のようなエラーが出ていました。 [error]PHP Warning: require_once(Cache/Lite.php) [<a href='function.require-once'>function.require-once</a>]: failed to open stream: No such file or directory in C:\\hogehoge\\test.php on line 8 [error]PHP Fatal error: require_once() [<a href='function.require'>function.require</a>]: Failed opening required 'Cache/Lite.php' (include_path='.;C:\\php5\\pear') in C:\\hogehoge\\test.php on line 8 1行目のエラーで、"failed to open stream"と表示されているので、"Cache/Lite.php"が参照できていないということだと思います。 php.iniには、  include_path=".;C:\php\pear" と記述しており、phpinfo()でも設定の確認がとれています。 また、phpをインストールしているc:\phpの コマンドプロンプトにて、 pear list をしたところ、  Cache_Lite 1.7.2 stable  PEAR 1.5.1 stable と表示されたのを確認しています。 従って、Cache_Liteは正常にインストールされているけれど、PHPから参照ができていない状況であると考えています。 他に設定する箇所があるのかと、いろいろ調べてみたのですが、未だ解決策が見つからずにいます。 ちなみに、管理者権限下のローカルな環境で実行しているので、パーミッション等は関係ないと思います。

noname#26650
noname#26650
回答No.1

> $cache = new Cache_Lite($options); としているので、 > $Cache_Lite->save($data,$id); ではなく、 $cache->save($data,$id); でなければならないのではないでしょうか。お試しください。 # true は小文字でもOKかな?大文字で書いた方が確実な気がする…。

Gooooooogle
質問者

補足

ご回答ありがとうございます。 $cache->save($data,$id); で、実行してみましたが、結果は同様でした。 PHP処理は行われていません。 >#true は小文字でもOKかな? $options = array の中の設定のことかと思いますが、大文字で記述しても結果は同じでした。 さらに補足ですが、キャッシュ処理の部分を除いて実行すると正しく処理が行われることが確認できています。 正しく処理が行われるとは、「ブラウザ上に編集結果が表示される」ということです。 上記質問で挙げた、キャッシュ処理のひとつひとつを末尾行からコメントアウトしながら実行していった結果、 require_once('Cache/Lite.php'); が動作していないということがわかっています。 require_onceが動作していないので、後の処理が全てスキップされていると推測しています。

関連するQ&A