PHP从包含的脚本文件写入文件

时间:2013-05-23 21:01:25

标签: php include fwrite

我有一个脚本,我们称之为“主”php脚本,还有另一个脚本,称之为“writer”。我有一个xml文件。我的“作家”从db获取信息并将其写入xml。如果我直接执行我的作家,一切正常。

现在我想从我的“主”脚本执行“writer”。问题是,我可以在我的main中看到来自writer文件的输出(为了测试目的,我添加了一些echo),但它没有像我直接执行它时那样重写我的xml文件。

我该如何解决这个问题?

感谢。

主要代码:

<?php 
session_start();
include_once("./../writer.php");


    $_SESSION['make_sitemap'] = true;

    echo 'ok';

?>

作家代码:

<?php
session_start();
// include some utility files and header, also connection to db    

if($_SESSION['make_sitemap']){ 

$xml = '<?xml version="1.0" encoding="UTF-8"?>';

// some boring stuff with xml variable 


$fp = fopen('./myxml.xml', 'w');

fwrite($fp, $xml, strlen($xml));

fclose($fp);

echo 'done';

}

?> 

我认为这是所有人,没什么特别的。但是嗯,为什么它不会重写,我不知道。

1 个答案:

答案 0 :(得分:2)

php中的相对路径根据它们的执行位置进行解析,这意味着php最初开始运行请求的文件。这意味着,当您直接点击writer.php时,意味着./myxml.xml将出现在您编写的同一目录中.php与main.php同样存在。

更好的选择是建立一个所有路径都相对于$_SERVER["DOCUMENT_ROOT"]的公共场所。

所以而不是

./myxml.xml
你会说

$_SERVER["DOCUMENT_ROOT"]."/path/to/my/myxml.xml"

如果这变得太繁琐,您可以在常见的包含中定义几个已知位置,例如。

define("XML_PATH", $_SERVER["DOCUMENT_ROOT"]."/path/to/my");

然后将其用作

XML_SAVE_PATH."/myxml.xml"