質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

1423閲覧

PHPソースをXdebugでデバッグ時のinclude_once()の挙動について

chanyama

総合スコア5

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/04/16 08:50

編集2020/04/16 11:56

PHPソースをXdebugでデバッグ時のinclude_once()の挙動について

初めての質問になります。
無礼ありましたら申し訳ございません。

Xdebugでステップ実行中にinclude_once()で外部ファイルを読み込み、呼び出し元で外部ファイルの変数を使用しようとしたのですが、外部ファイルの変数や関数が読み込まれずです。
ステップ実行中に外部ファイルの変数を読み込んで使用する方法はありますでしょうか。
デバッグ時にEclipseのデバック出力ビューで外部ファイルは見えているのでパスが間違っているということではないと存じます。

##やりたいこと
下記のような2ファイルを用意して一方のファイルから変数を読み込みたい

<ファイル1.php>(実行ファイル)

<?  include_once("ファイル2.phpのフルパス");  $変数1 = $変数2 (ここで変数1の中身はから)  関数1(); (ここで関数未定義で落ちる) ?>

<ファイル2.php>

<?  $変数2 = "固定値"  function 関数1(); ?>

各ツールのバージョン

php7.4.4
Eclipce4.14
WIN10

試したこと

試したこと1-------------------------------------------------------
下記を変更
include_once("ファイル2.phpのフルパス");

require_once("ファイル2.phpのフルパス");

下記を追記
ini_set('display_errors',true);
ini_set('error_reporting', E_ALL);

結果
エラー内容
Call to undefined function 関数1

-------------------------------------------------------試したこと1

試したこと2-------------------------------------------------------
下記を追記して実行
die('require_test');

結果
require_testのみが画面に表示される
-------------------------------------------------------試したこと2

現在のソース
<ファイル1.php>(実行ファイル)

<? ini_set('display_errors',true); ini_set('error_reporting', E_ALL); require_once("ファイル2.phpのフルパス"); $変数1 = $変数2 (ここで変数1の中身はから) 関数1(); (ここで関数未定義で落ちる) ?>

<ファイル2.php>

<? $変数2 = "固定値" function 関数1(); ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/04/16 12:07

コードはマークダウンのcode機能を利用してご提示ください。 また、ファイル名や変数名は本当に全角ですか? コード自体にエラーがない場合、エラーの出ないコードを提示してもらわないと再現確認もできませんし、 そこから指摘する必要が出てきます。
guest

回答2

0

自己解決

取り込むファイルが.incファイルだったため
.phpファイルに変更で解決致しました。
ありがとうございました。

投稿2020/07/31 04:50

chanyama

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

完全に勘での回答ですが、

パスは正しいがパーミッション等の問題でApache(やnginx等のwebサーバー)が読み込めていない

という状況に見えます。
多分、include_once()require_once()に変更したらその後のコードまでたどり着かずに落ちるんじゃないでしょうか。

PHPの先頭に

PHP

1ini_set('display_errors',true); 2ini_set('error_reporting', E_ALL); 3

を追記して、ブラウザからアクセスして、エラーを確認してみてください。

投稿2020/04/16 09:12

tanat

総合スコア18727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chanyama

2020/04/16 09:30 編集

tanat様 お早い回答、誠に感謝致します。 提案頂いた内容を試してみました。 コードまではたどり着いているようです。 記載漏れですが動作環境はWIN10です。
tanat

2020/04/16 09:43 編集

require_once()に変更したうえで ブラウザからアクセスした場合はエラーが出ずに関数1();が実行されるという事でしょうか? (実際のコードを試したこと として質問欄に追記されると有効な回答が得られやすくなると思います。)
chanyama

2020/04/16 10:36

言葉足らずで申し訳ございません。 tanat様の認識であっております。 そして関数1()が未定義で落ちております。 本当はソースの貼り付けをしたいのですが、貼れないもののためイメージで回答させてください。 今は以下のようになっております。 <ファイル1.php>(実行ファイル) <? ini_set('display_errors',true); ini_set('error_reporting', E_ALL); require_once("ファイル2.phpのフルパス"); $変数1 = $変数2 (ここで変数1の中身はから) 関数1(); (ここで関数未定義で落ちる) ?> <ファイル2.php> <? $変数2 = "固定値" function 関数1(); ?> エラー内容 Call to undefined function 関数1
tanat

2020/04/16 10:58

ブラウザからでも Call to undefined function 関数1 でしょうか?
chanyama

2020/04/16 11:01

そうです。 ブラウザ上でも同じエラーが表示されております。 ※「質問欄に追記されると有効な回答が得られやすくなる」  この意味をはき違えておりました。  ご指摘ありがとうございます。  質問欄を更新しました。
tanat

2020/04/16 11:09

質問欄への追記ありがとうございます。 であれば単純に関数名を間違えているとか、名前空間が違う、スコープが違う あたりが怪しい気がします。 念のため、 ファイル2.phpの先頭に die('require_test'); を置くとどうなるか確認してみて頂けますか? require_test だけ表示される→読み込みは正常なので、他の可能性を考える必要がある 変わらない→読んでいるファイルが違う という検証になります。
chanyama

2020/04/16 11:53

実行致しました。 おっしゃられている通り「require_test だけ表示される」状態です。
tanat

2020/04/16 12:20

であれば、ファイルの読み込みは問題なく出来ている(おそらく、ファイル2.phpにブレークポイントを仕掛ければそこで止まると思います)と言う判断が出来ます。 となると、ファイル2.phpの記述か、ファイル1.phpの記述のどちらかが誤っているということになるので、具体的なコードが開示できない場合は回答出来る人が原理的に存在しなくなります。 現象が再現する&開示できる状態の最小限のコードを作ってみてください。 (再現する最小限のコードを作ってる途中で解決することも多いです。) **** (上記理由からこれも勘ですが)例えば、 ファイル2.phpを function test1(){ echo "test1"; } function test2(){ echo "test2"; } だけにして、 ファイル1.phpを <?php \test1(); test2(); だけにするとどうなりますか? test1()だけ実行されてtest2()が実行されないようであれば、名前空間が違うとかそういう問題になります。 (と言う感じで、全可能性を勘で書くのは無理なので、これで原因がわからなければ再現コードの作成を・・・)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問