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

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

ただいまの
回答率

88.10%

Laravel 5.1 で、appディレクトリ配下に作った自作ファイルへのアクセスができない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,649

score 59

お世話になっております。

Laravel 5.1(Homestead)にて、appディレクトリ配下に作成したiniファイルが読み込めなくて困っております。
方法がダメなのか、コードの記述がダメなのか、気づいた点でも構いませんので、お力をお借りしたいです。

[状況]
・インターネット等で調べて、appディレクトリ配下を参照する方法として、composerで読み込む方法を使用しています。(laravel/composer.jsonでオートロードできるようにする。)
参考サイト:http://ameblo.jp/itboy/entry-12067906451.html
・iniファイルは、「app/Lib/config/local/jp.ini」で、app配下は自分でmkdirしてます。
・コントローラ側で、iniファイルを参照したいが、パスの記述方法を変えてもファイルが無いと言われます。(jp.iniとか../Lib/config/local/jp.iniとか)


環境
・PC:mac 
・virtual boxのバージョン:5.0.4 
・vagrantのバージョン:1.7.4 
・laravel homesteadのバージョン:2.1.8 
・OS:Ubuntu (14.04.3 LTS) 
・PHP 5.6
・Laravel PHP 5.1

app/Lib/config/local/jp.ini ※読み込みたいファイル
jp:
    item_inc:
        country_list:
            1: 'アイスランド'
            2: 'アイルランド'
            3: 'アゼルバイジャン'
            4: 'アメリカ'
            5: 'アラブ首長国連邦'
            6: 'アルゼンチン'
            7: 'イスラエル'
            8: 'イギリス'
            ・
            ・
            ・
            83: 'ロシア'

composer.json
    "autoload": {
        "classmap": [
            "database",
            "app/Lib/config/local"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
※ $ composer dump-autoload を実行しております。
  homesteadにssh接続して実行。
  コマンド実行結果:Generating autoload files

app/Http/Controllers/TestController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Models\Member;
use App\Models\Package;

class MemberVerifyController extends Controller
{
    static public function index() {
        $result = file_exists ('jp.ini');
        var_dump($result); // 結果:false
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

まず、ファイルへのアクセス方法ですが、
$result = file_exists(app_path('Lib/config/local/jp.ini'));
でアクセスできると思います。
app_path()はappディレクトリからのファイルパスを返します。

参考にされたcomposerで読み込む方法ですが、
こちらはPHPの名前空間をオートロードするもので、
指定したディレクトリパスをオートロードするものではありませんのでご注意ください。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/11/25 10:47

    回答ありがとうございます。
    ご教示いただいた記述方法で試したところ、問題なくファイルにアクセスでき、file_exists()の結果として「true」が返ってきました。
    app_pathも、調べたいた中で出会っていたのですが、使い方(相対パスの指定?)がダメだったようです。

    composerを使った方法ですが、composer.jsonにディレクトリにアクセスできるようになるものだと思ってました。もう少し使い方を理解して開発を行っていきます。
    (オートロードは元に戻します。)

    キャンセル

0

$result = file_exists ('jp.yml');
「jp.ini」に変更するとどうでしょうか。

それよりは
jp:
    item_inc:
        country_list:
            1: 'アイスランド'
            2: 'アイルランド'
            3: 'アゼルバイジャン'
            4: 'アメリカ'
            5: 'アラブ首長国連邦'
            6: 'アルゼンチン'
            7: 'イスラエル'
            8: 'イギリス'
            ・
            ・
            ・
            83: 'ロシア'
がYAML形式で記述されているので、ファイル名を「jp.ini」から「jp.yml」に変更したほうが(私としては)しっくりきます。

INI形式って確か
[section]
name=value
こんな感じですよね。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/11/25 10:35

    回答ありがとうございます。
    「 $result = file_exists ('jp.yml'); 」の記述ですが、誤りで、「 jp.ini」」になります。
    .ini、.yml、.php等色々試していたので、一部混ざっておりました。
    大変失礼しました。
    iniの記述については、調べて正しい記述に直します。

    キャンセル

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

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

関連した質問

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