代码之家  ›  专栏  ›  技术社区  ›  San

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

  •  2
  • San  · 技术社区  · 16 年前

    我是PHP初学者,对XML操作一无所知。我正在研究下面显示的谷歌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 回复  |  直到 10 年前
        1
  •  3
  •   Tim Post Samir J M Araujo    16 年前

    我看不出你的代码有什么问题。我认为你有许可问题。

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

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

    为了让php作为拥有web根的用户(即您)运行,必须为php启用suexec。无法写入文件的事实 0644 权限几乎可以说它不是。

    您有两种选择:

    • 重新配置服务器,使php作为拥有web根目录的用户运行
    • 使文件世界可写

    我强烈推荐第一个超过第二个。然而,你并不总是有这样的选择。如果您的主机(或sysadmin或任何人)不能或不会为php启用suexec,则必须提供该文件 0777 权限,又名 rwxrwxrwx .

    您可能希望通过ssh登录并使用 touch 命令优先(或目录,如果您需要通过 mkdir ,然后授予它所需的权限。

        2
  •  3
  •   Gordon Haim Evgi    16 年前

    没有什么问题 $dom->save("test.xml"); .
    不过,您不需要使用dom进行保存。也可以使用simpleXML:

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

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

    推荐文章