phpのrequireに関するエラーの原因と解決方法

このQ&Aのポイント
  • php初心者が複数のrequire文を使用している中で、特定のrequire文が機能しない場合があります。原因として、パス指定の誤りやファイルの存在確認が必要です。
  • 変数名の重複によりrequireした関数が実行されない場合がありますが、関数の中であれば別の変数として扱われます。そのため、変数名の重複の原因ではないと考えられます。
  • 構文チェックでシンタックスエラーがないことやログにエラーメッセージが表示されないことから、エラーの原因はパス指定の誤りやファイルの存在確認にある可能性が高いです。正しいパス指定と必要なファイルが存在しているかを確認してください。
回答を見る
  • ベストアンサー

phpのrequirについてe

php初心者です。 同じような処理をまとめて、関数にしました。 debug中なので、function()ひとつに ひとつのphpファイル名をつけています。 あとで合体するつもりで。 当然、requireの数が複数になっていますが、requireの行(冒頭)でエラーになってしまいました。 echoで1行ずつ表示して確認しました。原因がわからず順番を変えたりpath指定を変更したりしたのですが、読み込んでくれません。 なので、処理直前で必要な関数を読み込むようにしたりもしたのですが 冒頭で require (dirname(__FILE__)."/include/******.inc"); require (dirname(__FILE__)."/include/******chk.php"); require (dirname(__FILE__)."/../include/******m.inc"); require (dirname(__FILE__)."/m******.php"); require (dirname(__FILE__)."/m******andom.php"); require (dirname(__FILE__)."/m******time_client.php"); require (dirname(__FILE__)."/error_******.php"); require (dirname(__FILE__)."/log******.php"); まではクリアできました。 (path指定が混ざってますがいろいろ試したので。。。) で、ある関数を呼ぶ直前に require (dirname(__FILE__)."/lfunc*****.php"); としたのですが /lfunc*****.php に飛ばないんです。 (echoが出ない) こういうのはどのような原因があるのでしょうか? ちょっと思ったのですが、何か重複してるのでしょうか? 似たような変数名が多くなってますが、requireした中のfunctionの中なら 別の変数として扱われますよね? 一応構文チェックなどはちゃんと no シンタックスエラーを確認しています。 ログにもかかれないし。 すみません、php初心者にアドバイスお願いします。

  • jg1wjz
  • お礼率91% (148/162)
  • PHP
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

お礼に書いてあることがよく分かりません。 分かるところだけ見ると、 <?php echo "1"; require (dirname(__FILE__)."/include/******.inc"); echo "2"; で、2が表示されないと言うことは、requireしているものに間違いがあると言うことです。

jg1wjz
質問者

お礼

notnotさん、ありがとうございます。 ##で、2が表示されないと言うことは、 ##requireしているものに間違いがあると言うことです。 間違いということは構文エラーですか? 単純に変数に値を入れてあるだけですが、もう一度確認してみます。 親でrequireとglobalした変数の書かれている同じファイルを子(呼ばれる方)でもrequireして global xxxx(変数名) と記述しても問題ないですよね? または親でrequireしてglobal 記述している変数は 子ではrequireしないで、ただglobal記述したほうがいいのでしょうか? 親も子も同じ変数を global (親はrequireし、子はrequireしない)で 参照する、、、みたいに。 よろしくお願いします。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

情報が少なすぎます。 現象が発生するコードを省略せずに全部載せてください。 現象の発生に関係ない部分は削除してもかまいませんが。

jg1wjz
質問者

お礼

notnotさん、すみません。 自分の世界にはいちゃってました、失礼しました。 (親) <?php require (dirname(__FILE__)."/include/******.inc"); require (dirname(__FILE__)."/include/******chk.php"); require (dirname(__FILE__)."/../include/******m.inc"); require (dirname(__FILE__)."/m******.php"); require (dirname(__FILE__)."/m******andom.php"); require (dirname(__FILE__)."/m******time_client.php"); require (dirname(__FILE__)."/error_******.php"); require (dirname(__FILE__)."/log******.php"); global 変数1; (使う変数をglobal) global 変数2; echo "処理start"; ・ ・ ・ ?> のようなソースコードで、動かすと何も表示されないので、1行ずつ echo をいれてみました。 <?php echo "1"; require (dirname(__FILE__)."/include/******.inc"); echo "2"; require (dirname(__FILE__)."/include/******chk.php"); echo "3"; require (dirname(__FILE__)."/../include/******m.inc"); echo "4"; require (dirname(__FILE__)."/m******.php"); echo "5"; require (dirname(__FILE__)."/m******andom.php"); echo "6"; require (dirname(__FILE__)."/m******time_client.php"); echo "7"; require (dirname(__FILE__)."/error_******.php"); echo "8"; require (dirname(__FILE__)."/log******.php"); echo "9"; のように。 そうすると 1 しか表示されなかったんです。 順番を入れ替えたりして 123 まで表示された、、、。でも4が表示されない。 拡張子incは、変数のみの定義です。 requirしているphpファイルも使用するincファイルは同じなので、それぞれ のソース内で requireしています。 それぞれのphpは (呼ばれるほうのphp)  function ***() { require (dirname(__FILE__)."/include/******.inc"); ・ global 変数1; global 変数3; (使う変数のみglobal) ・ ・ } と、同じincファイルをrequireしています。 こんな感じです。 呼び元(親)と、呼ばれるほうで同じincファイルの同じ変数を使う場合があります。 呼ばれるほうは 関数内なので影響ないと思っていますが、呼ばれるほうでもglobal としています。 (こういう使い方であっていますか?) すみません、これでわかりますでしょうか? よろしくお願いします。

関連するQ&A

  • PHP/icludeを使った相対パスの引き方について

    プログラム初心者です。 includeやrequireなどの関数を使ってファイルを呼び込むために、下記のようなソースを作りましたが、Fatalエラーになってしまいます。どこがいけないのかご指摘をいただけないでしょうか? ネットでこれらの関数の扱い方について検索しますと、PHPでは実行されたファイルのディレクトリがルートとして扱われるそうで、他のディレクトリを参照する時は、相対パスのみでは無理の様子でした。この場合、組込み定数となる__FILE__を使って絶対パスを導かなければいけないような記述がありました。これに習って書いてみたのですが、どうもうまくいきませんのでご指導をいただければと思います。 ■以下、ツリー構造 root |_con ←フォルダ階層 | |_nav.php ←ファイル階層 |_mod | |_nav.csv |_view |_index.php ■以下、phpファイル群 /////// nav.php ////////// <?php $Data=file (dirname(__FILE__)."/../mod/nav.csv"); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$DataN[$i]); ?> /////// index.php //////// <?php include once (dirname(__FILE__). "/../con/nav.php"); ?>

    • ベストアンサー
    • PHP
  • PHP4で動作していた以下のソースが、PHP5にバージョンアップしたら

    PHP4で動作していた以下のソースが、PHP5にバージョンアップしたらエラーが出るようになってしまいました。 どのように修正したらよいかご教授ください。 サーバーはロリポップです。 ■ソース <?php header('Content-Type: text/html; charset=SHIFT_JIS'); require("http://別ドメイン/estate.html"); ?> ■エラー Warning: require() [function.require]: URL file-access is disabled in the server configuration in /パス/ファイル名 on line 3 Warning: require(取り込みたいファイルのパス/estate.html) [function.require]: failed to open stream: no suitable wrapper could be found in /パス/ファイル名 on line 3 Fatal error: require() [function.require]: Failed opening required 取り込みたいファイルのパス/estate.html' (include_path='.:/usr/local/php5.2/php') in /パス/ファイル名 on line 3

    • ベストアンサー
    • PHP
  • phpの記述につきまして

    phpの記述につきまして データベースから <? echo $file_name; ?> で $file_name に ****.php の値が呼び出されるのですが include の記述で <?php include("<? echo $file_name; ?>"); ?> と言う風に 利用表示するとエラーになってしまします。  include("ここにDBからのPHPファイル名を呼び出したい!") とするには どのように記述すれば宜しいでしょうか? ご教授いただければ幸いに存じます。

    • ベストアンサー
    • 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
  • phpのディレクトリーorファイルのパーミッション

    お世話になります。 どうやってもうまくいかないので、質問させていただきます。 phpでログファイルを書き込むようにしたいのですが、 ファイルが作成されません。 根本的なところができていないのだと思いますが、教えてください。 やりたいことは、指定のパス(docomwnt_root配下の/logまたは include/log) にyyyymmdd.logで、テキストを書き込みたいのです。 いろいろ調べて、ディレクトリの場合は 0777、ファイルは0666にchmodすればよいとのことで 変更したのに、ファイルがないといわれてしまいます。 ソースコードは以下になります。 すみません、試行錯誤の名残とdebug行が入っています。 <?php //function logout($content){ $content="test"; error_log($content,0); //ログファイル設定 // $logpath = '/log'; // if( !is_dir($logpath) ){ // die("ディレクトリが存在しません -->". $logpath); // } //日時取得 $dateobj = new DateTime(); //アクセスタイム取得 $accessTime=$dateobj->format('Y-m-d H:i:s'); //書き込む内容 $log = $accessTime . " " . $content . "\n"; // ファイル名 $date = $dateobj->format('Ymd'); // $filename = realpath( $logpath ) . '/'.$date . '.log'; // $filename = dirname(__FILE__) . '/log/'. $date . '.log'; $filename = $date . '.log'; echo $filename; $directory_path = "./log"; if( mkdir( $directory_path, 0777) ){ echo "ok<br>"; chmod( $directory_path, 0777); } else{ echo "ng<ng>"; } if( !$fp = fopen($filename, 'ab') ){ echo "cannot open file($filename)<br>"; return -1; } if( !$fp = flock($fp, FILE_APPEND | LOCK_EX) ){ echo "cannot open file($filename)"; return -1; } if( fwrite($fp, $content) === FALSE){ echo "cannot write file($filename)<br>"; return -1; } if( !fclose($fp) ){ echo "cannot close file($filename)"; return -1; } // return 0; //} ?> この場合だと cannot open file になってしまいます。 windowsばかりやってきていたのでlinuxは、、、わかりません。 いろいろ、サンプルを試しているのですが、うまくいかなくて。。。 すみません、ご指導よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPについて質問です。

    PHP超初心者です。 初めて変数の変更プログラムを作ってみたのですが、 Warningエラーが出て、一部の機能が有効になりません。 henkou.php ↓↓↓↓ <?php $oldpass = $_POST["oldpass"]; $newpass = $_POST["newpass"]; $newpass2 = $_POST["newpass2"]; ?> <html> <head> <title>変数変更テスト</title> <meta name="robots" content="noindex,nofollow"> </head> <body> <form method="post" action="/henkou.php"> 古いパスワード:<input type="password" name="oldpass"><br> 新しいパスワード:<input type="password" name="newpass"><br> 新しいパスワード:<input type="password" name="newpass2"><br> <input type="submit" value="送信"> </form> <?php require "/conf/config.php"; if ("$oldpass != $password") { echo "パスワードが一致しません"; } else { echo "パスワード変更が完了しました。"; $password_file = file("/conf/config.php"); $password_file = str_reprace ("\"$password\" = \"$newpass\""); SaveFile("/conf/config.php"); } ?> </body> </html> config.php ↓↓↓ <?php $password = ""; // 設定前なので空白です ?> エラーは、 Fatal error: require() [function.require]: Failed opening required '/conf/config.php' (include_path='.:/usr/local/lib/php') in /home/***.net/henkou.php on line 21 と、 Warning: require(/conf/config.php) [function.require]: failed to open stream: No such file or directory in /home/***.net/henkou.php on line 21 ここからが本題ですが、 上のプログラムが正しいかどうか、確認していただきたいのです。 また、間違えている部分があったら、ご指導いただければと思います。 どなたか、手助けをお願いします!

    • ベストアンサー
    • PHP
  • phpのパス指定

    初めてphpを触っています。 いくつかの処理を外部ファイルにしたいのですが パスの指定が悪いのか、同じ階層に置いたり、いろいろ試してもfatal error ばかりです。 どこが悪いのか、教えていただけないでしょうか? サンプルとして、moto.phpのなかのincludeフォルダー内の外部ファイル:func.phpを実行することとします。 moto.php <?php require "./include/func.php"); $a = 2; $b = 1; $c = $a - $b * $a; echo return_word($a); echo "<br>"; //改行 echo return_word($b); echo "<br>"; //改行 echo return_word($c); ?> func.php <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> コマンドラインから php moto.php を実行すると <? php function return_word ( $data ){ if ( $a==1){ return "a"; }else if ($a==2){ return "b"; }else{ return "c"; } } ?> Fatal error: Call to undefined function return_word() in C:\xxxxxx\php\moto.php on line 9 となってしまいます。 外部ファイルは見えているようなのに、どうして関数がundefined になってしまうのでしょうか? phpの基本的なことなのかもしれませんが よろしくアドバイスお願いできればと思います。

    • ベストアンサー
    • PHP
  • 【PHP】書き込みできません

    PHP5.3の環境でファイル書き込みのロジックがうまくいかずに困っています。 環境は下記の通りです。 Apache 2.2.2 PHP 5.3.3 コードは下記の通りです。 >>CODE $file_path = "/home/xxxxx/logs/test.txt"; echo file_exists($file_path); echo "file_path1=".$file_path; if ( file_exists($file_path) ) { echo "file_path2=".$file_path; // ファイルポインタ取得 if ( ($fp = fopen($file_path, 'a')) !== FALSE ) { // ログは追記 echo "file_path3=".$file_path; // ファイルポインタに書き込み fwrite($fp, $date."\n"); fwrite($fp, $body); fwrite($fp, "----------------------------------------------------\n"); // ファイルポインタクローズ fclose($fp); $flg = true; } } <<CODE 権限は下記の通りです。 logs 777 test.txt 777 現象は下記の通りです。 echo文のfile_path1は表示されます。 echo文のfile_path2及びfile_path3は表示されません。 $file_path="/home/logs/test.txt";に変更すると、 echo文のfile_path1及びfile_path2が表示されます。 echo文のfile_path3は表示されません。 ファイルが存在することはlsで確認したので間違いありません。 権限も777にしているので、何がおかしいのか困り果ててしまい、初めて投稿させて頂きました。 PHPやApacheの設定ファイル等も問題あるのでしょうか。 どうぞご指摘お願いいたします。

  • PHP PEARパッケージのincludeができない。

    PHP PEARパッケージのincludeができない。 お世話になっております。 phpのPEARパッケージのincludeができません。 行うと PHP Warning: require_once(File/CSV.php): failed to open stream: そのようなファイルやディ レクトリはありません in /var/www/httpdocs/XXXXXXXX.php on line 10 PHP Fatal error: require_once(): Failed opening required 'File/CSV.php' (include_path='.:/usr/share/pear') in /var/www/httpdocs/XXXXXXXX.php on line 10 となってしまいます。 エラーメッセージ中の/usr/share/pear上に確かに存在します。 何か他に条件などあるのでしょうか? お願いいたします。

    • ベストアンサー
    • PHP
  • PHP requireでのURLパラメータ指定

    PHPにてアクセスカウンターを作っているのですが、呼び出したときのパラメータにて合計カウント数、本日のカウント数、昨日のカウント数のどれを表示するのか分けるプログラムを作成しました。 直接アドレスバーにて、 http://localhost/counter/count.php?mode=total とパラメータ指定したときにはきちんと表示出来るのですが、他のPHPファイルから require ("./count.php?mode=total"); で呼び出すと、 Warning: require(./count.php?mode=total) [function.require]: failed to open stream: No such file or directory in C:\xampp\htdocs\counter\index.php on line 7 Fatal error: require() [function.require]: Failed opening required './count.php?mode=total' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\counter\index.php on line 7 というエラーが出てしまいます。 色々調べたところ、相対パス指定のときにはパラメータ指定が出来ないという情報があったので、絶対パスで指定してみたのですが、やはり上手くいきません。 Warning: require() [function.require]: http:// wrapper is disabled in the server configuration by allow_url_include=0 in C:\xampp\htdocs\counter\index.php on line 7 Warning: require(http://localhost/counter/count.php?mode=total) [function.require]: failed to open stream: no suitable wrapper could be found in C:\xampp\htdocs\counter\index.php on line 7 Fatal error: require() [function.require]: Failed opening required 'http://localhost/counter/count.php?mode=total' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\counter\index.php on line 7 というようにエラーが出てしまいます。 どのようにすれば上手く表示できるでしょうか? 是非回答よろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう