目录结构:
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__"
雷雷
首先你要明白当
PHP
执行Xaction
这个方法的时候对应的路径是什么?ThinkPHP
中的入口文件担当着入口的作用,意味着方法的执行实际上都是在这一文件中去完成的(各种require
),所以执行Xaction
的方法所在路径即为index.php
所在的目录建议使用相对路径
既然知道当前脚本的所在路径,那么要获取
Public
下的资源文件就很清楚了雷雷
默认的
__PUBLIC__
你可以打印看看。我看你测试的方式都不像是对的,不要急着换多种方式去证明自己的想法,整理好一个方式去一步一步来。
使用fopen的时候查看目录文件是否配置了相应权限,可能是这个原因。
谢邀!使用
TP
的系统常量__PUBLIC__
引用谢邀,tp提供系统常量_PUBLIC_,可以在config下面定义好路径直接引用