検索

ホームページ  >  に質問  >  本文

ThinkPHP 3.2 は、Public の下にあるリソース ファイルをどのように読み取るのでしょうか?

ディレクトリ構造:

プロジェクト
|---アプリ
|---パブリック
    |---ブログフロントエンド
        |---ホーム
            |---js
            |---CSS
            |---画像
            |---xxx.md
|---ThinkPHP
|---index.php

エントリ ファイル index.php の内容は次のとおりです。

if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// デバッグ モードをオンにします。開発段階でオンにするか、デプロイメント段階で false に設定することをお勧めします。
定義('APP_DEBUG',true);
//アプリケーションディレクトリを定義
定義('APP_PATH','./App/');
//ThinkPHPエントリーファイルを導入
'./ThinkPHP/ThinkPHP.php' が必要です。
// 親愛なる ^_^ 後はコードは必要ありません。とても簡単です。

パブリック config.php で設定されています

'TMPL_PARSE_STRING' =>
    '__STATIC__' => __ROOT__ ./Public/blog-frontend',
)、

ビューで Public を使用してリソースを使用します: 静的リソースを導入します

<script src="__STATIC__/Home/js/jquery.min.js"></script>

上記のコードには問題はなく、正常に導入されました。

ただし、コントローラ内では

関数 Xaction(){
    $file = "/Public/blog-frontend/Home/xxx.md";
    $fopen = fopen($file,'r');
    var_dump($fopen);
}

出力

false

奇妙なことに、ビューで fopen をもう一度試してみました

$file = "__STATIC__/Home/xxx.md";
$fopen = fopen($file,'r');
var_dump($fopen);

出力

false

fopen を再試行し、それを file_get_contents に置き換えました。結果は、コントローラーの出力であってもビューの出力であっても、依然として false でした。 。そこで、サフィックス .md.txt に変更しましたが、結果は依然として false でした。

どうすれば解決できますか?
補足:
@jinyさんの方法で問題は解決しました。

何らかの理由で、IndexController.class.php に出力します

var_dump(__ROOT__);
var_dump(__PUBLIC__); 

(上記はデフォルトです。設定していません。)

出力:

string(0) ""
string(10) "__PUBLIC__" // if var_dump(__ABCDE__);// string(9) "__ABCDE__"
我想大声告诉你我想大声告诉你2782日前759

全員に返信(7)返信します

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 13:11:39

    リーリー

    返事
    0
  • 習慣沉默

    習慣沉默2017-05-16 13:11:39

    1. まず、PHP 执行 Xaction 这个方法的时候对应的路径是什么?
      ThinkPHP 中的入口文件担当着入口的作用,意味着方法的执行实际上都是在这一文件中去完成的(各种 require),所以执行 Xaction 的方法所在路径即为 index.phpが配置されているディレクトリを理解する必要があります

    2. 相対パスを使用することをお勧めします
      現在のスクリプトのパスがわかったので、Public

      の下にあるリソース ファイルを取得することは非常に明確です。 リーリー

    返事
    0
  • PHP中文网

    PHP中文网2017-05-16 13:11:39

    リーリー

    返事
    0
  • 迷茫

    迷茫2017-05-16 13:11:39

    デフォルト__PUBLIC__ 印刷して確認できます。
    あなたのテスト方法が正しいとは思えません。自分のアイデアを証明するために、急いで複数の方法を使用しないでください。

    返事
    0
  • 某草草

    某草草2017-05-16 13:11:39

    fopen を使用する場合は、ディレクトリ ファイルに対応するアクセス許可が設定されているかどうかを確認してください。これが原因である可能性があります。

    返事
    0
  • 漂亮男人

    漂亮男人2017-05-16 13:11:39

    ご招待ありがとうございます! TP的系统常量__PUBLIC__引用

    を使用する

    返事
    0
  • 天蓬老师

    天蓬老师2017-05-16 13:11:39

    ご招待ありがとうございます。tp はシステム定数 _PUBLIC_ を提供します。これは、config でパスを定義することで直接参照できます

    返事
    0
  • キャンセル返事