>  기사  >  백엔드 개발  >  php中的fopen的路径有关问题

php中的fopen的路径有关问题

WBOY
WBOY원래의
2016-06-13 12:27:061929검색

php中的fopen的路径问题
本人新手
在使用thinkPHP时,我想用fopen这种函数写入数据,但是出现一些问题如下

$file="./menu.json";//这种不行,①<br />		//$file=JS_URL.'menu.json';这种也不行②<br />		//$file="C:/Users/Administrator/Desktop/qq.php";但是这种却可以成功写入数据③<br />		$fp=fopen($file,'w');<br />		fwrite($fp,$str);<br />		fclose($fp);

JS_URL为下面
define("SITE_URL","http://myblog.com/");<br />define("CSS_URL",SITE_URL."Public/css/");<br />define("IMG_URL",SITE_URL."Public/images/");<br />define("JS_URL",SITE_URL."Public/js/");

------解决思路----------------------

引用:
Quote: 引用:

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

那我就用同一个文件来讲好了,就那个menu.json文件
代码是这样的
$file="../View/Menu/menu.json";<br />	//第二种路径<br />	$file="D:/myphp/Apache/htdocs/myblog/Application/Admin/View/Menu/menu.json"<br />	//第三种<br />	$file=JS_URL.'menu.json';<br />	$fp=fopen($file,'w');<br />	fwrite($fp,$str);<br />	fclose($fp);<br />	//JS_URL是下面这个<br />	define("SITE_URL","http://myblog.com/");<br />    define("JS_URL",SITE_URL."Application/Admin/View/Menu/menu.json");<br />	

出现的问题是:
第一种和第三种路径方式无法将$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路径写入。
需要是相对或绝对路径写入才可以。

首先你需要定义常量指定到根目录。
然后再加上路径。
例如:在当前目录写入一个文件
               $file = dirname(__FILE__).'/abc.json';
$fp=fopen($file,'w');
fwrite($fp,$str);
fclose($fp);
?>

你echo dirname(__FILE__)就知道当前目录是什么了。
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.