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

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

ただいまの
回答率

89.20%

関数の結果がうまく取得できない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 615

ryohasegawa

score 124

index.php

<?php
require_once(__DIR__ . '/../../config/config.php');

$app = new MyApp\Controller\Index();

$app->run();

if($app->getUserdata()->icon){
    echo "◯◯";
}else {
  echo "□□";
}
?>


sub/index.php

<?php
require_once(__DIR__ . '/../../../config/config.php');

$app = new MyApp\Controller\Index();

$app->run();

if($app->getUserdata()->icon){
    echo "◯◯";
}else {
  echo "□□";
}
?>


index.php  sub/index.phpでは、$app = new MyApp\Controller\Index();で初期化してありMyApp\Controller\Index()の関数が使えます。
MyApp\Controller\Index()ではextends \MyApp\Controller で \MyApp\Controllerそてあるので、 \MyApp\Controllerの関数も使えます。

\MyApp\ControllerではユーザのIDでファイルを探して、あればtrueをなければfalseを返すプログラムが実行されるようになってます。

public function usericon(){
        $this->setUserdata("icon", false);
        if ($this->isLoggedIn()) {
            if (file_exists("./../users/icons/" . $this->me()->id . ".png")) {
                $this->setUserdata("icon", true);
            }
        }
    }


index.php  sub/index.phpを実行すると、結果上の関数が実行されます。
index.phpではtrueが返ってくるのですが、sub/index.phpではfalseが返ってきます。

index.php とsub/index.phpはディレクトリは違いますが呼び出しているファイルは同一のファイルで関数は実際呼び出されています。
上のコードの$this->me()->idでユーザのIDを入れているんですが、echo $app->me()->id;としindex.php  sub/index.phpそれぞれで実行するとちゃんとIDがはいってきたので問題無いと思います。
ではなぜ、IDもはいっているのに画像が表示されないのでしょう?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • takaboo

    2017/05/14 11:04

    Aの途中で始まる<?php以降がBでしょうか?わかりにくいのでちゃんと分けた方がいいですよ

    キャンセル

  • ryohasegawa

    2017/05/14 11:07

    <?php の位置が違いました。AもBも全く同じコードを書いてあります。

    キャンセル

回答 2

checkベストアンサー

0

なぜ同じ処理を異なる二つのディレクトリでしなければならないのか考えてみましたが、もしかしてローカル環境とサーバ環境ということではないでしょうか?
もしそうなら違うのはディレクトリだけではありません。
ディレクトリだけでも次のような違いがあります。

PHP カレントディレクトリという名の罠

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/14 21:38 編集

    file_exists($_SERVER['DOCUMENT_ROOT']."../users/icons/" . $this->me()->id . ".png") これではだめでした。
    となると、別の方法ですね。

    キャンセル

  • 2017/05/14 21:43

    DOCUMENT_ROOT の最後にはスラッシュがついていないと思いますので、.. ではなく /.. としてください。そしてできた文字列を確認してみてください。

    キャンセル

  • 2017/05/14 21:48

    解決できました。
    非常にたすかりました。
    ドキュメントルートを使っての絶対参照という方法はとても勉強になりました。

    キャンセル

0

AとBは全く同一なのでしょうか?
ファイル名が異なるだけで同じディレクトリにあり、同じ呼び出し方をしているのでしょうか

そんなことをする意味があるとは思えないので、何らかの(記載のない)違いがあるわけですよね?
その違いが結果の差異を引き起こしているのではないでしょうか

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/14 11:29

    AとBには同じコードを書いてあります。
    Webページのヘッダーのコードです。
    AとBのファイルのディレクトリが異なります。
    ですが、AからもBからも、X,Yにはアクセスできています。
    なので問題はないと思います。
    ファイルチェックなのですが、Yからの相対参照で参照しているので、問題無いと思います。

    キャンセル

  • 2017/05/14 11:46

    ABが同じコードというのは了解しております
    ゆえに、呼び出し方その他別の条件が異なるのでは?という推測ですね

    とりあえずAB両パターンで、setUserdataで保管したデータをvar_dumpで確認ですかね
    ifの条件式がtrueになるからと言って $app->getUserdata()->icon === trueであるとは限りませんので

    また、「Bを読み込むと何も返ってきません」はNULLや空文字列が返ってくるという意味でしょうか?
    これもvar_dumpで何が返ってきているのか確認すべきかと

    キャンセル

  • 2017/05/14 11:51

    ありがとうございます。
    Aでは、trueがBではfalseが返ってきました。
    ファイルの呼び出し、関数の呼び出しは問題ないようです。
    なぜ、同じ状態で同じ関数を読んでいるのにtrueとfalseと異なった答えが返ってくるのかが問題点です。

    キャンセル

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

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る