当前位置: 代码迷 >> PHP >> php中的fopen的路径有关问题
  详细解决方案

php中的fopen的路径有关问题

热度:35   发布时间:2016-04-28 16:49:25.0
php中的fopen的路径问题
本人新手
在使用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/");

------解决思路----------------------
引用:
Quote: 引用:

你说“同一个文件的三种方法我都试过” 可是亲我没有看到你的电脑 我不知道你menu.json文件的绝对路径也不知道你这个php文件的绝对路径   虽然你很清楚知道 可是你不贴上来 我不知道 我不知道路径 就不能明确告诉你哪儿出错了。。。。。。

那我就用同一个文件来讲好了,就那个menu.json文件
代码是这样的
$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","http://myblog.com/");
    define("JS_URL",SITE_URL."Application/Admin/View/Menu/menu.json");

出现的问题是:
第一种和第三种路径方式无法将$str表示的字符串写入menu.json文件中,文件是空的。但是第二种路径可以写入文件。问题就是这样。

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__)就知道当前目录是什么了。
  相关解决方案