我有一个脚本,我们称之为“主”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';
}
?>
我认为这是所有人,没什么特别的。但是嗯,为什么它不会重写,我不知道。
答案 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"