include_onceで呼び出したPHPファイル

このQ&Aのポイント
  • PHPでサイトを組んでいる際にinclude_onceを使用して複数のPHPファイルを呼び出して実行する際に正しく動作しない場合があります。
  • 個別で各ファイルを実行すると正しい結果が得られるが、まとめて実行すると一部のファイルが正しく処理されない原因として、include_onceの使い方やファイルの依存関係の問題が考えられます。
  • 問題が発生しているファイルの依存関係を確認し、include_onceの代わりにrequire_onceを使用することで問題が解決することがあります。
回答を見る
  • ベストアンサー

include_onceで呼び出したPHPファイル

PHPでサイトを組んでいるのですが、include_onceで以下のようにPHPの各ファイルを呼び出して実行しているのですがうまくいきません。 <?php //レンタルサーバーのcronを利用して、定期的に走らせるコードです。 include_once "example_a.php"; include_once "example_b.php"; include_once "example_c.php"; ?> 各ファイルは、RSSで読み込んだデータをMySQLに格納するプログラムです。 個別で各ファイルを実行すると正しい結果となりますが上記のようなプログラムでまとめて実行するとexample_a.phpは正しい結果となりますが、example_b.php、example_c.phpは正しく処理されません。 原因として考えられるものがあれば、教えていただきたいと思います。 よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

phpファイルをインクルードして使うならきちんとそれぞれをクラス分けしていますか? そうでなければあらゆるところで競合が発生している可能性は否めないです それぞれ単体での挙動が安定しているのであれば execやsystemなどのコマンド実行系の関数でwgetなりでそのページに アクセスしてやるのが楽だと思いますよ。

kan-chi
質問者

お礼

include_onceの代わりにexecコマンドで走らせたところうまくいきました。 やはり競合が発生していたようでした。 ありがとうございました!

その他の回答 (1)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

cron走らせてるなら どっかにエラーログとか出てないですかね? 単体で動いてて、一括でやると動かないって言うと、やっぱ 関数とかクラスとかのバッティングとか変数の初期化忘れ(または不要に引き継いでしまっている)が原因かなーと。

kan-chi
質問者

お礼

ご回答ありがとうございました。 変数の初期化忘れが原因のようでした。

関連するQ&A

  • PHP includeについて

    今、下記のようなサーバサイドのプログラムを作成しており、 解決できずに困っております。 【環境】 CentOS5 [PHP5] sakuraインターネット レンタルサーバ スタンダートプランです。 参考:http://www.sakura.ne.jp/rentalserver/matrix.html 【概要】 cronよりinclude関数を含むPHPファイルを実行、 そのPHPファイル内から他dirに保管されているテキストを参照し、 外部ASPへ文字列を送信する、という内容です。 理想としては、 cron1よりphp1を実行し、 php1に記載されている下記、 include 'phpA'; include 'phpB'; これら2行を完結させる事です。 しかしphpAは正常動作するのですが、 phpBは正常に動作せず、理想と異なる結果になります。 テストとして、下記を実行しました。 ★test1 php1のinclude関数を入れ替える。 include 'phpB'; include 'phpA'; 結果:phpBは正常動作、phpAにエラー。 ★test2 cron1よりphpAのみを実行 cron2を追加しphpBを実行 結果:phpA&B共に正常動作。 ★test3 test1と同じ構造でphp1を次のように変更。 include 'phpA'; sleep(30); session_unset(); $_SESSION = array(); session_destroy(); session_start(); include 'phpB'; 結果:phpAのみ正常動作。 上記の通り、cronを2種作成すれば理想の結果が返るのですが、 仕様上それは採用できず、あくまでphp1のみをcronより実行する 必要があります。 セッション・変数をリセットする必要があるのかと test3を試しましたが結果は同じでした。 尚、私はPGを専業としておらず質問に不適切な記載があるかと存じます。 お知恵をお借りできますと幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • phpのincludeについて

    お世話になります。 Apache/2.2.3 PHP5.1.6 のレンタルサーバを利用しています。 httpdocs   |___lib   |  |___test.php   |___index.php という構造にしています。 -----test.php-------- <?php $a = 'sample'; ?> --------------------- -----index.php------- <?php include_once 'lib/test.php'; echo $a; ?> --------------------- 上記の場合、index.phpには 「sample」と表示されます。 -----index.php------- <?php include_once 'http://example.com/lib/test.php'; echo $a; ?> --------------------- 上記の場合、なぜか表示されません。 そこで「http://~~」はincludeできないのかなと思ったのですが -----test.php-------- <?php $a = 'sample'; echo $a; ?> --------------------- -----index.php------- <?php include_once 'http://example.com/lib/test.php'; ?> --------------------- とすると、なぜか「sample」と表示されました。 この結果から、includeはできているみたいです。 なんとか -----test.php-------- <?php $a = 'sample'; ?> --------------------- -----index.php------- <?php include_once 'http://example.com/lib/test.php'; echo $a; ?> --------------------- で「sample」と表示させたくて試行錯誤してみたのですが どうしても解決できません。 お力添えのほどお願いできればと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP5で自動的にinclude_once

    概要:Apache 2 + PHP5 において、すべてのスクリプトに自動的に、include_onceのような効果を得る方法について教えてください。 詳細: 昔開発していたPHPスクリプトにおいて スクリプト中に include_once や require_once を書かずに スクリプトが呼び出される度に、スクリプトの冒頭で include_once したかのように、パスの設定などを行う初期化スクリプトを include して実行させる方法を取っていたはずなのですが、そのやり方を忘れてしまいました。 初期化スクリプト中では define などをして、スクリプトが依存するライブラリやデータのパスの設定を変数に対して行っており、処理コストの低い簡単な処理も入ります。 すべてのスクリプトにおいて、その変数が示すパスを使ってデータの読み書きを行っています。 その手法は、Apache2 が多目的に使われる場合には、オーバーヘッドあるいは弊害があるだろうというようなものだったと思います。(当時そう思った事をなんとなく覚えている次第です) Apache2がリクエストを受け取る度に、実行されるため、そのスクリプトと関係のない php スクリプトが呼ばれた際にも自動的に取りこまれてパスなどが変数に設定されます。 その Apache 2 は、限定的な用途で利用され、サーバーマシンごと特定用途で利用することを前提としていたため、そういった手法をとったのだと思いますが、詳細は不明です。 おそらく、apache2.conf (あるいは httpd.conf) か php.ini に設定していたと思うんですが、当時の設定ファイルを読み解いても、それらしい記述が見当たらず、ここ数日悩んでおります。 一応、実行環境について書きますと 当時の実行環境は、Windows 2000 + Apache 2 + PHP 3~5(?) + PEAR + MySQL 3(?) で、現在は ubuntu + Apache 2 + PHP5 + PEAR + MySQL 5 で動かそうとしております。 このような内容なのですが、お心当たりのある方は、ご教示お願い致します。

    • ベストアンサー
    • PHP
  • PHP include_once

    include_onceで読み込んだファイルが そのままテキストとして出力されてしまいます。 以下のような感じです。 インクルードするファイル fail.inc test_val = array("aaa" => "aaa111", "bbb" => "bbb222", "ccc" => "ccc333"); ソース本体 src.php <?php include_once('./fail.inc'); 以下処理 exit(); ?> これをそのまま実行すると以下のように出力されます。 test_val = array("aaa" => "aaa111", "bbb" => "bbb222", "ccc" => "ccc333"); includeせずにそのまま走らせると正常に動きます。 httpd.confのaddtypeにincという拡張子は追加していませんが 他の同様のソースでは問題なく読み込めます。 require_onceとかも試しましたが同じようにfail.incの中身がそのままテキストとして 出力されてしまいます。 どうしたら正しく読み込めますでしょうか。 ご回答よろしくお願いしますm(_)m

    • ベストアンサー
    • PHP
  • includeとinclude_onceの使い分け

    まずマニュアルを。 ------------------------------------------------------ PHP: include_once - Manual http://www.php.net/manual/ja/function.include-once.php include_once 命令は、スクリプトの実行時に指定したファイルを読み込み評価します。この動作は、include 命令と似ていますが、ファイルからのコードが既に読み込まれている場合は、再度読み込まれないという重要な違いがあります。その名が示す通り、ファイルは一度しか読み込まれません。 include_once は、スクリプトの実行時に同じファイルが複数回読み込まれ、評価される可能性がある場合に、関数の再定義や 変数値の再代入といった問題を回避するために一回だけ読み込ませるために使用します。 ------------------------------------------------------ …。表面的な機能の違いはわかりました。しかしそれをどう使い分けるのかの説明はなく、分かりませんでした。 よく分からない点は以下です。 ・同じファイルを何度も「include」もしくは「include_once」するケース ・あえて何度も記述しながら実際には1度しか評価してほしくないケース ・何度も記述して、そのつど評価したいケース これらについて例を挙げて教えていただきたいです。 よろしくお願いします。

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

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

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

    以下はPEARでExcelファイルを作成し、ダウンロードするプログラムです。 <?php require_once("Spreadsheet/Excel/Writer.php"); $workbook = new Spreadsheet_Excel_Writer('sample3-1.xls'); $worksheet =& $workbook->addWorksheet('サンプル'); $workbook->close(); print('<html>'); print('<head>'); print('<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />'); print('</head>'); print('<body>'); print('<p><a href="./sample3-1.xls">Excelファイル</a></p>'); print('</body></html>'); ?> このプログラムを実行すると、 Warning: require_once(Spreadsheet/Excel/Writer.php) [function.require-once]: failed to open stream: No such file or directory in C:\Inetpub\wwwroot\Test\src\excelsample.php on line 2 Fatal error: require_once() [function.require]: Failed opening required 'Spreadsheet/Excel/Writer.php' (include_path='.;C:\php5\pear') in C:\Inetpub\wwwroot\Test\src\excelsample.php on line 2 というエラーメッセージが出ます。 php.iniには、PEARのパッケージをインストールした際に ;***** Added by go-pear include_path=".;C:\php-5.2.17-Win32-VC6-x86\pear" ;***** と記述されているにも関わらず、エラーメッセージのpathはinclude_path='.;C:\php5\pear'となっており、原因がわかりません。 php.iniはC:\WINDOWSの直下に置いてあります。 PHPのバージョンはphp-5.2.17-Win32-VC6-x86で、Cドライブの直下にインストールしています。 WebサーバーはIISです。 eclipseを使っており、バージョン?はpleiades-e3.6-php_20110326です。 また、phpinfoのinclude_pathはLocalとMasterの両方が.;C:\php5\pearとなっています…。 Configuration File (php.ini) Path C:\WINDOWS Loaded Configuration File C:\WINDOWS\php.ini この2つはこの様になっており、これは2つの場所は一致していないといけないのでしょうか? 解決手段がまったくわかりません。 何かこのエラーについてわかることがあれば教えていただけませんか?

    • 締切済み
    • PHP
  • includeされたphpの中でincludeを使用No.2

    http://oshiete1.goo.ne.jp/qa1156379.html こちらの方が質問しているものと同じ様なことなのですが、 簡単に構造を説明します。 a.php ->データを入力 b.phpを呼び出す b.php ->与えられたデータの入力チェック c.phpを呼び出す c.php ->データをDBに登録後、a.phpを表示 このとき、a.phpで登録ボタンを押すと、白紙が帰ってきてしまいます。 b.phpは呼び出しているようなのですが、b.php内のinclude_once("c.php"); で止まってしまっているように見えます。 アドバイスをお願いします。

    • ベストアンサー
    • PHP
  • PHPの includeについて?

    現在、レッツPHPさんの新着ブロガーを設置しようと試みています。 -------------------- rss/new/index.html /PEAR.php /rssup.php /XML/Parser.php /XML/RSS.php ------------------------ 上記のようなファイル構造で、index.html内に<?php include("rssup.php"); ?>を記述しているのですが、何も起きません。 ※rssup.phpは、正常に動いていてRSS情報の取得は出来ています。 設置方法通りに<?php include("rssup.php"); ?>を記述するだけでは、駄目なのですか? どなたかご教授いただけないでしょうか?

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

    php.ini内のinclude_pathをinclude_path=".;C:\php\include"と設定してC:\windows\(不安なのでC:\php\にも)に置いているのですが、 なぜかphpinfo()を開いて確認すると".;C:\php5\pear"となっています。 Loaded Configuration File を見ても C:\Windows\php.ini となっていますし。 require_once "DB.php"を実行したときに以下のエラーが出たので、 db.phpのインストールも済んでいることから、include_pathが正しく設定されていないのが問題だと思うのですが・・・ Warning: require_once(DB.php) [function.require-once]: failed to open stream: No such file or directory in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\users.php on line 2 Fatal error: require_once() [function.require]: Failed opening required 'DB.php' (include_path='.;C:\php5\pear') in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\users.php on line 2 php.ini以外にも設定しなければいけない個所があるのでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう