Home  >  Article  >  Backend Development  >  php中的fopen的路径有关问题

php中的fopen的路径有关问题

WBOY
WBOYOriginal
2016-06-13 12:27:061929browse

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__)就知道当前目录是什么了。
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn