• ベストアンサー

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

  • (require / require_once) (include / include_once)について

    毎度、お世話になります。 今回は、requireとrequire_once(includeとinclude_once)の使い分けについて 教えて下さい。 取りあえず、改造しているPHPでは、include()だけを使って正常に動作しています。 include()させている箇所がいくつもあります。 ただ、やっぱりわからないのは、 requireとrequire_once(includeとinclude_once)に関して、 PHPマニュアルなどを見ても、処理方法の違いだけで、それならば最初から全部、 require_once() 又は、include_once() だけの方が良いように思えるのですが、 例えば、この処理に関しては、絶対、include()。これならば、require()。 また、これなら、include_once()、あるいは、require_onceと言う風に、 明確なものはあるのでしょうか? かなり迷路に迷い込んでます。(時間が止まってます) どうかよろしくお願いします。

    • 締切済み
    • PHP
  • require_once で読み込まれたか?

    初心者です。教えて頂けますか? require_once で読み込んだと思われるファイルの機能を使用したのですが、 機能した様子がありません。 require_once で読み込めない場合エラーが出るのでしょうか? 以下の様にしても駄目でした。 どの様にすれば良いでしょうか?よろしくおねがいします。 <?php $result = require_once("Auth/Auth.php"); if( $result == True ){ print("True"); } else { print("False"); } ?>

    • ベストアンサー
    • PHP
  • require_onceでファイルが開けない!?

    requre_onceでのファイルの読み込みが上手くいかないらしく、次のようなエラー文が出てしまい困っております。 =========エラー文=================== Warning: require_once() [function.require-once]: URL file-access is disabled in the server configuration in C:\xampp\htdocs\wakuphp\girlup_result_kanryou.php on line 6 Warning: require_once(http://waku2work.com/mysql2.php) [function.require-once]: failed to open stream: no suitable wrapper could be found in C:\xampp\htdocs\wakuphp\girlup_result_kanryou.php on line 6 Fatal error: require_once() [function.require]: Failed opening required 'http://waku2work.com/mysql2.php' (include_path='.;C:\xampp\php\pear\') in C:\xampp\htdocs\wakuphp\girlup_result_kanryou.php on line 6 ================================ 問題の6行目のソースコードは以下の通りです。 ======ソースコード6行目================= require_once("http://waku2work.com/mysql2.php"); ================================ この場合、”require_once”が読み込めて無いって事ですよね!? 一応初心者なのですが、気になるのは3つ目のエラー表示で、ローカルのパス表示が出てる点です。 設定がうまくいってないのでしょうか? 有識者の方いらっしゃいましたら、どうか宜しくお願いします!

    • ベストアンサー
    • PHP
  • PEARの参照先

    PHP5環境下でPEARモジュールをインストールしましたが、実行時にモジュールがないというエラーメッセージが表示され、対応をしています。 お助けください。 1.現象  PHP5のプログラム実行時にエラーとなってしまい、下記のメッセージが表示されました。 Warning: require_once(Cache/Lite.php) [function.require-once]: failed to open stream: No such file or directory in ・・・ Fatal error: require_once() [function.require]: Failed opening required 'Cache/Lite.php' (include_path='.:/home/example/share/pear5') in ・・・ 2.環境  ・さくらインターネット(FreeBSD)でPHP5を独自にインストールしPEARライブラリも導入済です。    PHP5実行ファイルのインストール先 /home/example/www/cgi-bin  ・phpinfo()で確認した、include_pathは下記の通りです。    .:/home/example/share/pear5  ・pear config-show で確認した結果は、下記の通りです。    pear config-set bin_dir /home/example/share/pear5/bin    pear config-set doc_dir /home/example/share/pear5/PEAR/docs    pear config-set ext_dir /home/example/share/pear5/PEAR/extensions    pear config-set php_dir /home/example/share/pear5/PEAR    pear config-set cache_dir /home/example/share/pear5/PEAR/cache    pear config-set data_dir /home/example/share/pear5/PEAR/data    pear config-set php_bin /home/example/www/cgi-bin    pear config-set test_dir /home/example/share/pear5/PEAR/tests    pear config-set download_dir /home/example/share/pear5/temp/download    pear config-set temp_dir /home/example/share/pear5/temp  ・pear list で確認した結果は、下記の通りです。    Archive_Tar 1.3.2 stable    Cache_Lite 1.7.2 stable    Console_Getopt 1.2.2 stable    HTML_Templete_IT 1.2.1 stable    Net_UserAgent_Detect 2.2.0 stable    PEAR 1.5.1 stable    PEAR_Frontend_Web 0.5.1 alpha    Structures_Graph 1.0.2 stable ・Cache_Liteの所在     /home/example/share/pear5 の中で、Cache_Lite らしきモジュールを     探してみたところ、下記のディレクトリにありました。          /home/example/share/pear5/PEAR/Cache        Lite.php      /home/example/share/pear5/PEAR/Cache/Lite        File.php        Function.php        Output.php      /home/example/share/pear5/PEAR/tests/Cache_Lite/tests        拡張子.phptのファイルが多数   ・PEARおよび、モジュールのインストールは下記のサイトを参照して実行しています。    http://zenryokuhp.com/server/sakura_pear.htm 3.疑問点   ・モジュールは、include_pathで指定されている、      /home/example/share/pear5    の直下に置かなければならないのでしょうか。   ・現在、モジュールは /home/example/share/pear5/PEAR に存在しているのですが、    include_pathで指定した位置よりも、1階層下に置いてはいけないのでしょうか。   ・再度、PHP5とPEARのインストールをやり直し、pear config-set コマンドにて、      pear config-set php_dir /home/example/share/pear5/    と設定し、モジュール"Cache_Lite"をインストールしようとしましたが、      "Cannot install, php_dir for channel "pear.php.net" is not writeable the current user"    と表示されて、インストールが出来ませんでした。    /home/example/share/pear5/ ではインストール出来ず、    /home/example/share/pear5/PEAR ではインストール出来るというのは、    PHP5をインストールしたときに同時に登録されるPEARのディレクトリには    インストール出来ないということなのでしょうか。 以上、ご教授をお願いいたします。

    • 締切済み
    • PHP
  • include_onceについて

    php初心者です。 includeやrequireにはinclude_onceやrequire_onceといった "すでに読み込んでいる場合"は無視するというものがありますが、 この"すでに読み込んでいる場合"とはどういう時なのでしょうか? サーバーにキャッシュでもされていて、そのキャッシュがあればそれを利用するという感じなのですか? どういう条件でinclude_onceやrequire_onceが実行されるのか教えてください。 また、どういう時に使い分けるのが賢いやり方なのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • require_once の結果について

    linux上でphp Ver5.5.28を使っています。 まず、index.phpは <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>テスト・タイトル</title> </head> <body> <h1>require_onceのテストを行います。</h1> <p><?php require_once("test.php"); ?></p> </body> </html> と記入しています。 test.phpは <?php $aaa = "変数に文字を設定します。"; print $aaa; ?> と記入しています。 実行した結果のHTMLを見ると添付ファイルのとおり不明なコードが追加されています。 また、test.phpを <?php ?> のみでやっても不明なコードが作成されてしまいます。 どなたか、原因が分かる方がいらっしゃれば教えていただけないでしょうか。 よろしくお願いします。 その結果のHTMLを見ると、添付画像のとおりゴミが出力されています。

    • ベストアンサー
    • PHP
  • requireについて

    http://ドメイン/クラス名/メソッド名 というように、アドレスに従って、Apacheで集約ページ(index.php)にリライトし アドレスから該当クラスを生成、メソッド呼び出し。 という処理内容でフレームワークの勉強をしております。 http://ドメイン/Cart/add というアドレスを実行し、 index.php内で、 Cartクラスを生成し、Cartクラスのaddメソッドを実行させました。 ・Cartクラスのコンストラクタで、Requestクラスを生成する処理を書いているのですが なぜか自分の考えた通りのrequire文を、Cart.phpに記述するとエラーが出るのです。 【フォルダ・ファイル構成】 controllersフォルダ----Cart.php |-index.php |-Request.php Cart.phpは、Controllersフォルダに入っているので、Request.phpを呼び出す際には、 一階層上の【require_once '../Request.php'】だと思っていたのですが、 実行すると Request.php のソースが見つからないと出ます。 試しに【require_once 'Request.php'】に変更し、 実行すると、ファイルが読み込まれ、CartクラスのコンストラクタでRequestクラスが生成されます。 なぜ、【require_once 'Request.php'】にすると、クラスの生成が成功するのでしょうか? index.phpの中で、Cartクラスを生成しているから、 【Requst.phpは、index.htmlから見て】の require文を記述しないといけないのでしょうか? ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • pear_info.phpも表示できません

    PCをサーバーにしてPHPの練習をしている初心者です。最近PEARを入れてDBパッケージをインストールしたのですが、機能しなくて困っています。試しにpear_info.phpを作ってブラウザで開くと下記の警告がでました。 ---------------------------------------------- <?php ini_set ("display_errors", "1"); error_reporting(E_ALL); require_once ("PEAR/Info.php"); //←line 5 $info = new PEAR_Info(); $info->show(); ?>  Warning: require_once(PEAR/Info.php) [function.require-once]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\pear_info.php on line 5 Fatal error: require_once() [function.require]: Failed opening required 'PEAR/Info.php' (include_path='.;c:\php\includes;C\php\PEAR;') in C:\Program Files\Apache Group\Apache2\htdocs\pear_info.php on line 5 (コピーペーストすると\になりましたが、ブラウザの表示では/の逆向きです) ---------------------------------------------- DB::connectでも同様の警告が出ます。PHPとMySQLだけだと問題なく動くのでPEARのパスを確認したのですか、原因が分かりません。助言いただけるとありがたいです。 php.iniのパス  ;***** Added by go-pear  include_path=".;c:\php\includes;C\php\PEAR;"  ;***** phpinfoのinclude_path  .;c:\php\includes;C\php\PEAR;  (コピーペーストすると\になりましたが、ブラウザの表示では/の逆向きです) コマンドプロンプトから "C:\PHP>pear list" での表示  Archive_tar  1.3.2  stable  Console_Getopt  1.2.3  stable  DB  1.7.11 stable  MDB2  2.4.1  stable  PEAR  1.6.0  stable  Pear_info  1.6.1  stable  Structure_Graph  1.0.2  stable PCの環境  Windows XP  Apache  2.0.59  PHP 5.2.3  MySQL 5.0.41

    • ベストアンサー
    • PHP
  • Cache Liteでcasheを作ってくれない

    .htaccessを利用して、awsの商品ページにアクセスして、xmlをキャッシュするようなphpを組んでみました。 たとえば、http://doracken.com/ds/13305831-4.html にアクセスすると、.htaccessでitem.phpにアクセスされ、13305831-4の部分をGETで因数として渡す→ブラウズノードとページを送り、自動的にawsのURLに組み立てるというものです。 --Item.php-- <?php $Browse = $_GET['b'] ; $Bro = $_GET['bro'] ; $pgn = $_GET['Page']; $URL = "http://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&SubscriptionId=1ZVAJQT4R8GWRG0G6502&AssociateTag=auctionzituyo-22&Operation=ItemSearch&SearchIndex=VideoGames&BrowseNode=".$Browse."&ResponseGroup=Offers,ItemAttributes,Similarities,Reviews&ContentType=text/html&Style=http://doracken.com/dsitems.xsl&Version=2006-05-17&ItemPage=".$pgn; require_once 'Cache/Lite.php'; $options = array( 'cacheDir' => './tmp/', "lifeTime" => 3600, ); $Cache_Lite = new Cache_Lite($options); if ($cache = $Cache_Lite->get($URL)) { $content = $cache; }else{ $content = file_get_contents($URL); $Cache_Lite->save($content,$URL); } print $content; ?> しかしなぜか、アクセスしたawsページをキャッシュしてくれないんです。一体どのように書けばいいでしょうか?

    • ベストアンサー
    • PHP
  • require Auth.php

    require 'Auth/Auth.php'; の動作について教えてください。 サンプルソース a.php に、 「require 'Auth/Auth.php';」と冒頭に記述してありました。 PEARだと思うのですが、結局この記述は、 a.phpに、 (1)Auth.phpの内容を取り込む? (2)Auth.phpの内容を継承する? どちらの解釈の方が正しいのでしょうか? 今までrequire だと、指定したphpの内容を取り込む((1)番だと)だと認識していました。 以下ソースのように動作してると思っています。Auth.phpも同じ動作と思っていいものなのでしょうか。 ・test.php <?php echo "start!!\n"; include("include.php"); echo "end!!\n"; ?> ・include.php <?php echo "include start!!\n" ?> ●実行結果 start!! include start!! end!!

    • ベストアンサー
    • PHP