Rumah  >  Soal Jawab  >  teks badan

请问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__"
我想大声告诉你我想大声告诉你2737 hari yang lalu736

membalas semua(7)saya akan balas

  • 曾经蜡笔没有小新

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

    function Xaction(){
        $file = $_SERVER['DOCUMENT_ROOT']."/Public/blog-frontend/Home/xxx.md";
        $fopen = fopen($file,'r');
        var_dump($fopen);
    }
    //在控制器里要这么写 $_SERVER['DOCUMENT_ROOT'] 

    balas
    0
  • 習慣沉默

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

    1. Pertama sekali, anda perlu memahami apakah laluan yang sepadan apabila PHP melaksanakan kaedah Xaction? Fail masukan dalam
      ThinkPHP berfungsi sebagai titik masuk, yang bermaksud bahawa pelaksanaan kaedah sebenarnya telah selesai dalam fail ini (pelbagai memerlukan) , jadi laluan di mana kaedah melaksanakan Xaction terletak ialah direktori di mana index.php terletakPHP 执行 Xaction 这个方法的时候对应的路径是什么?
      ThinkPHP 中的入口文件担当着入口的作用,意味着方法的执行实际上都是在这一文件中去完成的(各种 require),所以执行 Xaction 的方法所在路径即为 index.php 所在的目录

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

    Adalah disyorkan untuk menggunakan laluan relatif
    Sekarang anda mengetahui laluan skrip semasa, adalah sangat jelas untuk mendapatkan fail sumber di bawah Awam🎜
    $file = './Public/blog-frontend/Home/xxx.md'
    🎜 🎜

    balas
    0
  • PHP中文网

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

    我一般用$file = __ROOT__."/Public/Home/xxx.md";

    balas
    0
  • 迷茫

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

    Lalai __PUBLIC__ Anda boleh mencetak dan melihatnya.
    Saya tidak fikir cara anda menguji adalah betul. Jangan tergesa-gesa menggunakan pelbagai cara untuk membuktikan idea anda dan lakukan langkah demi langkah.

    balas
    0
  • 某草草

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

    Apabila menggunakan fopen, semak sama ada fail direktori dikonfigurasikan dengan kebenaran yang sepadan Ini mungkin sebabnya.

    balas
    0
  • 漂亮男人

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

    Terima kasih atas jemputan! Gunakan TP的系统常量__PUBLIC__Petikan

    balas
    0
  • 天蓬老师

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

    Terima kasih atas jemputan, tp menyediakan pemalar sistem _PUBLIC_, yang boleh dirujuk terus dengan menentukan laluan di bawah konfigurasi

    balas
    0
  • Batalbalas