>  Q&A  >  본문

请问ThinkPHP 3.2 怎么读取 Public 下的资源文件?

目录结构:

project
|---App
|---Public
    |---blog-frontend
        |---Home
            |---js
            |---css
            |---img
            |---xxx.md
|---ThinkPHP
|---index.php

入口文件index.php内容如下:

if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',true);
// 定义应用目录
define('APP_PATH','./App/');
// 引入ThinkPHP入口文件
require './ThinkPHP/ThinkPHP.php';
// 亲^_^ 后面不需要任何代码了 就是如此简单

在公共 config.php 配置过

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

并且使用在view中使用 Public 的资源:引入静态资源

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

上面代码是没有问题,引入成功。

然而在控制器中

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

输出

false

奇怪,我又在 view 里面去试着 fopen

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

输出

false

我又试了 fopen 换成 file_get_contents 结果不管是控制器中或者view中的输出还是false。我于是把后缀的.md换成了.txt结果还是false

请问如何解决?
补充:
谢谢各位的帮助,通过 @jiny 的方法,问题已经解决了。

不知道出于什么原因,在下在 IndexController.class.php 打印

var_dump(__ROOT__); 
var_dump(__PUBLIC__); 

(以上是默认的,我没有配置过。)

output:

string(0) "" 
string(10) "__PUBLIC__" // 如果var_dump(__ABCDE__);// string(9) "__ABCDE__"
我想大声告诉你我想大声告诉你2734일 전734

모든 응답(7)나는 대답할 것이다

  • 曾经蜡笔没有小新

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

    으아아아

    회신하다
    0
  • 習慣沉默

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

    1. 먼저 PHPXaction 메서드를 실행할 때 해당 경로가 무엇인지 이해해야 합니까?
      ThinkPHP의 항목 파일은 진입점 역할을 하는데, 이는 메소드의 실행이 실제로 이 파일(다양한 require)에서 완료됨을 의미하므로 경로는 Xaction을 실행하는 메소드가 있는 곳은 index.php가 있는 디렉토리입니다PHP 执行 Xaction 这个方法的时候对应的路径是什么?
      ThinkPHP 中的入口文件担当着入口的作用,意味着方法的执行实际上都是在这一文件中去完成的(各种 require),所以执行 Xaction 的方法所在路径即为 index.php 所在的目录

    2. 建议使用相对路径
      既然知道当前脚本的所在路径,那么要获取 Public

    상대 경로를 사용하는 것이 좋습니다.
    현재 스크립트의 경로를 알았으니 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는 config에서 경로를 정의하여 직접 참조할 수 있는 시스템 상수 _PUBLIC_을 제공합니다

    회신하다
    0
  • 취소회신하다