如何使用PHP在Web服务器上保存XML文件?

时间:2010-07-28 09:46:42

标签: php xml simplexml

我是PHP的初学者,我对XML操作一无所知。我正在制作如下所示的Google CSE注释XML:

  <?xml version="1.0" encoding="UTF-8" ?> 
- <Annotations>
- <Annotation about="http://sanspace.in/">
  <Label name="_cse_byxamvbyjpc" /> 
  </Annotation>
- <Annotation about="http://blog.sanspace.in/">
  <Label name="_cse_byxamvbyjpc" /> 
  </Annotation>
- <Annotation about="http://google.com/">
  <Label name="_cse_exclude_byxamvbyjpc" /> 
  </Annotation>
  </Annotations>

我想从上面显示的文件中实现这一点:

  <?xml version="1.0" encoding="UTF-8" ?> 
- <Annotations>
- <Annotation about="http://sanspace.in/">
  <Label name="testString1" /> 
  </Annotation>
- <Annotation about="http://blog.sanspace.in/">
  <Label name="testString2" /> 
  </Annotation>
- <Annotation about="http://google.com/">
  <Label name="testString2" /> 
  </Annotation>
  </Annotations>

到目前为止,我已经尝试过:

<?php
if (file_exists('test.xml'))
  {
  $xml = simplexml_load_file('test.xml');
  }
else
  {
  exit('Error.');
  }
foreach($xml->Annotation as $annotation)
    {
    if ($annotation["about"]=="http://sanspace.in/") 
        {  $annotation->Label["name"]="testString1";  } 
    else 
        {  $annotation->Label["name"]="testString2";  } } 

$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($xml->asXML()); 
echo $dom->saveXML();
$dom->save("test.xml");
?> 

此代码执行任务但不将其保存到文件中。

我的问题是,$dom->save("test.xml");声明出了什么问题? 如何在服务器上保存XML文件?

2 个答案:

答案 0 :(得分:3)

$dom->save("test.xml");没有错 你不需要用DOM进行保存。也可以使用SimpleXML:

$xml->saveXML("test.xml");

确保目标文件夹是可写的。使用绝对路径确保您实际上在正确的位置查找文件。

答案 1 :(得分:3)

我认为您的代码没有任何问题。我认为你有许可问题。

PHP作为以下两个用户之一运行:

  • nobody或可能www-data(也就是网络服务器使用的系统用户)
  • 您的用户名

要让PHP以拥有Web根目录(即您)的用户身份运行,必须为PHP启用suexec。您无法写入具有0644权限的文件的事实表明它不是。

您有两种选择:

  • 重新配置服务器,以便PHP以拥有Web根目录的用户身份运行
  • 使文件世界可写

我强烈推荐第一个第一个。但是,你并不总是有这个选择。如果您的主机(或系统管理员或任何人)不能或不会为PHP启用suexec,则必须提供文件0777权限,即rwxrwxrwx

您可能希望首先使用touch命令(或目录,如果您需要通过mkdir)通过ssh登录并创建输出文件,然后为其提供所需的权限。