請問ThinkPHP 3.2 怎麼讀取 Public 下的資源檔案?
我想大声告诉你
我想大声告诉你 2017-05-16 13:09:39
0
7
733

目錄結構:

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__"
我想大声告诉你
我想大声告诉你

全部回覆(7)
曾经蜡笔没有小新

雷雷

習慣沉默
  1. 首先你要明白當 PHP 执行 Xaction 这个方法的时候对应的路径是什么?
    ThinkPHP 中的入口文件担当着入口的作用,意味着方法的执行实际上都是在这一文件中去完成的(各种 require),所以执行 Xaction 的方法所在路径即为 index.php 所在的目錄

  2. 建議使用相對路徑
    既然知道目前腳本的所在路徑,那麼要取得 Public 下的資源檔案就很清楚了

    $file = './Public/blog-frontend/Home/xxx.md'
Ty80

雷雷

迷茫

預設的 __PUBLIC__ 你可以列印看看。
我看你測試的方式都不像是對的,不要急著換多種方式去證明自己的想法,整理好一個方式去一步一步來。

某草草

使用fopen的時候查看目錄檔案是否配置了對應權限,可能是這個原因。

漂亮男人

謝邀!使用TP的系统常量__PUBLIC__引用

Peter_Zhu

謝邀,tp提供系統常數_PUBLIC_,可以在config下面定義好路徑直接引用

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!