こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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を専業としておらず質問に不適切な記載があるかと存じます。
お知恵をお借りできますと幸いです。

よろしくお願い致します。

投稿日時 - 2011-04-12 21:00:02

QNo.6663902

すぐに回答ほしいです

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

phpAとphpBのソースを確認して、
データの依存性や、global変数の衝突などを確認するしかないのでは。
理想と異なる結果になったということなら、その現象をみれば、ソースをトレースしていけば
ポイントはつかめる思われます。

ソースの変更が不可なら
includeで実行するから、クラス/関数/変数が衝突して問題になっているのでしょうから
・cronで、phpを直接起動するのでなくシェル起動にして、シェル内でPHP実行を2つ書く
・php内で、includeでなく、systemコールでPHPを呼ぶ
・PHP5.3.0以降なら、名前空間(namespace)を使う
のいずれかで対応できるとと思われます。

投稿日時 - 2011-04-12 21:36:02

お礼

superside0様

ご回答ありがとうございます!
結果、問題無く動作するようになりました。


・php内で、includeでなく、systemコールでPHPを呼ぶ
今回は上記の方法にて解決致しました。

併せてご提案頂きました他の方法につきましても、
また改めてテストさせて頂きたく存じます。

お早いお返事を頂けて、本当に助かりました。
ありがとうございました。

投稿日時 - 2011-04-13 11:21:57

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問