0

我目前正在开发一个创建 xml 文件的 PHP 脚本。当我在浏览器中运行脚本时,它不会被写出。当我使用 shell 命令“php /filelocation”时,它工作得很好。为什么是这样?

<?php
include('parse.php');

$test;

$test[0] = "Name:Actinium";
$test[1] = "Symbol:Ac";
$test[2] = "Atomic number:89";
$test[3] = "Atomic weight:[227]";

xml_write($test);
?>

<?php
function xml_write($s)
{
  $temp = explode(":",$s[0]);
  $data;
  $count = 0;

  for($i = 0;$i< sizeof($s);$i++)
    {
      $temp = explode(":",$s[$i]);
      $data[$count] = $temp[1];
      $count++; 

    }
  //creates the root element
  $xml = new DOMDocument("1.0");
  $root = $xml->createElement("table");
  $xml->appendChild($root);

  //creates name element
  $name = $xml->createElement("name");
  $nameText = $xml->createTextNode($data[0]);
  $name->appendChild($nameText);

  //creates symbol element
  $symbol = $xml->createElement("symbol");
  $symbolText= $xml->createTextNode($data[1]);
  $symbol->appendChild($symbolText);

  //creates atomic number element
  $number = $xml->createElement("number");
  $numberText = $xml->createTextNode($data[2]);
  $number->appendChild($numberText);

  //creates atomic mass element
  $mass = $xml->createElement("mass");
  $massText = $xml->createTextNode($data[3]);
  $mass->appendChild($massText);

  //creates "element" element and binds the properties to it
  $ele = $xml->createElement("element");
  $ele->appendChild($name);
  $ele->appendChild($symbol);
  $ele->appendChild($number);
  $ele->appendChild($mass);

  //attaches ele to root
  $root->appendChild($ele);

  $xml->formatOutput = true;
  echo "<xmp>".$xml->saveXML()."</xmp>";

  $xml->save("/home/anthony/database/table.xml") or die("Error");
}
4

2 回答 2

0

如果您没有通过 'application/xml' 或类似设置内容类型header(),则浏览器正在尝试将 xml 呈现为 html...它将显示为空白页面。如果您从浏览器“查看源代码”,您应该能够看到一些输出。

或者您可以设置一个内容类型标题,浏览器会将其显示为 XML。

编辑

重读后可能理解有误。我以为你只是echo把数据拿出来。我必须同意上述评论者的观点,即 apache 进程运行的任何人都没有对该文件的权限。

要排除权限,您可能(取决于主机)设置路径/tmp/table.xml并查看它是否有效。假设存在权限问题,那么 apache 用户(可能是 www-data?)将需要文件的 rw 权限。如果 apache 要创建一个新文件,它还需要父目录的 rw 权限。

于 2013-08-07T19:29:51.703 回答
0

我以前也遇到过类似的问题。我最好的猜测是 r/w 权限只授予所有者而不是 _www,这会导致 shell 命令工作并且浏览器访问失败。如果可以,请尝试chmod 666看看是否有效。

或者,您可以转到 Apache 的 httpd.conf 文件并将用户从 _www 更改为您的用户名。但我不建议将此作为永久解决方案,因为它会引发许多潜在的安全问题。

于 2013-08-07T19:50:37.610 回答