本人新手
在使用thinkPHP时,我想用fopen这种函数写入数据,但是出现一些问题如下
$file="./menu.json";//这种不行,①
//$file=JS_URL.'menu.json';这种也不行②
//$file="C:/Users/Administrator/Desktop/qq.php";但是这种却可以成功写入数据③
$fp=fopen($file,'w');
fwrite($fp,$str);
fclose($fp);
JS_URL为下面
define("SITE_URL","http://myblog.com/");
define("CSS_URL",SITE_URL."Public/css/");
define("IMG_URL",SITE_URL."Public/images/");
define("JS_URL",SITE_URL."Public/js/");
------解决思路----------------------
define("SITE_URL","http://myblog.com/");//这个语句等同于 SITE_URL=http://myblog.com/
define("JS_URL",SITE_URL."Application/Admin/View/Menu/menu.json");
/*这个语句之后等同于JS_URL=SITE_URL."Application/Admin/View/Menu/menu.json"
即等同于JS_URL=http://myblog.com/Application/Admin/View/Menu/menu.json
*/
所以//第三种
$file=JS_URL.'menu.json';
即 $file=http://myblog.com/Application/Admin/View/Menu/menu.json
这样的值当然不等同文件本来的路径
//第二种路径
$file="D:/myphp/Apache/htdocs/myblog/Application/Admin/View/Menu/menu.json"
难道你认为上面两个会相等??!!http://myblog.com/怎么可能会等于D:/myphp/Apache/htdocs/myblog 。即便你在apache的配置文件中配置了该http://myblog.com/的跟目录是D:/myphp/Apache/htdocs/myblog。但是亲 那是在URL的解析里 你这是服务器后台 。不是一个概念。你混淆了。
所以正确应该这么写
$file="../View/Menu/menu.json";
//第二种路径
$file="D:/myphp/Apache/htdocs/myblog/Application/Admin/View/Menu/menu.json"
//第三种
$file=JS_URL.'menu.json';
$fp=fopen($file,'w');
fwrite($fp,$str);
fclose($fp);
//JS_URL是下面这个
define("SITE_URL","D:/myphp/Apache/htdocs/myblog");
define("JS_URL",SITE_URL."Application/Admin/View/Menu/menu.json");
//--------------我是分割线
至于你说的第一种方法 ,$file="../View/Menu/menu.json";的意思是当前目录下的根目录下的View/Menu/menu.json。可是你这个本php在哪个路径我不知道(你没告诉我 我怎么可能知道!!)
------解决思路----------------------
这样当然不行,用http路径写入。
需要是相对或绝对路径写入才可以。
首先你需要定义常量指定到根目录。
然后再加上路径。
例如:在当前目录写入一个文件
<?php
$file = dirname(__FILE__).'/abc.json';
$fp=fopen($file,'w');
fwrite($fp,$str);
fclose($fp);
?>
你echo dirname(__FILE__)就知道当前目录是什么了。