【问题标题】:Why browser is trying to download my php script file?为什么浏览器试图下载我的 php 脚本文件?
【发布时间】:2011-03-12 05:54:55
【问题描述】:

只是一个快速的 - 我最近编写了一个使用 API DOM 动态创建 XML 文件的 php 脚本。所以我一开始就用这个:

$dom = new DOMDocument('1.0', 'UTF-8');

最后看起来像这样:

$server = $_SERVER['DOCUMENT_ROOT'];
$path_to_xml = "$server/project/file.xml"; 
file_put_contents($path_to_xml, $dom->saveXML());

它做了我想要的一切,但为什么浏览器试图下载这个 php 脚本而不是仅仅运行它?请有人可以帮我解决这个问题。我很确定这很容易。 //------------------------------------已编辑 感谢所有回复。是的,我正在发送自定义标题,因为它是我动态创建的谷歌地图 kml 文件。

header('Content-type: application/vnd.google-earth.kml');

// Creates the root KML element and appends it to the root document.
$node = $dom->createElementNS('http://earth.google.com/kml/2.0', 'kml');
$parNode = $dom->appendChild($node);

这可能是造成这种情况的原因吗?

【问题讨论】:

  • 您使用的是什么网络服务器?是阿帕奇吗?
  • 您是否发送任何自定义标题?其他 PHP 脚本之前是否运行良好?你能把剩下的代码贴出来吗?

标签: php firefox browser


【解决方案1】:

因为您的网络服务器未正确配置为处理 PHP 脚本。

【讨论】:

  • 感谢您的提示。您能否提供更多详细信息?我必须在我的服务器配置中更改什么?
  • @Pavel 请先回答评论问题。是否安装了 PHP?你用的是什么服务器?
  • 它是apache并且安装了php,因为我正在运行其他脚本没有任何问题。
【解决方案2】:

我经历过这是由于 .htaccess 中的一些错误而发生的,这可能看起来很荒谬,因为我没有提到在 .htaccess 中看到的任何内容。你应该仔细看看。

【讨论】:

    【解决方案3】:

    如果浏览器尝试下载 PHP 源代码,则意味着 Apache 未配置为运行 PHP 解释器和/或,如果您使用的是 Linux、Unix 或 Mac OS X 操作系统,则 Apache 已配置无权执行 PHP 脚本。

    您需要按照Manually Configure PHP5 and Apache2 的说明操作,以确保您的httpd.conf 正确。

    此外,如果您在 Linux、Unix 或 Mac OS X 上运行 Apache,那么您需要打开一个终端 cd 到包含您的 PHP 脚本的目录中,并且:

    chmod a+x SCRIPT.php
    

    SCRIPT.php 是您的 PHP 脚本的名称。

    【讨论】:

      【解决方案4】:

      我假设这个命令发送了一个标头:

      header('Content-type: application/vnd.google-earth.kml');
      

      如果您正在服务器上编写文件并且不打算向客户端发送任何响应,为什么要向客户端发送标头?

      如果您的 PHP 文件只是应该在服务器上写入文件而不执行其他任何操作,请不要向客户端发送标头或其他任何内容。

      如果这没有帮助,请尝试重新表述您的问题。到目前为止,您已经收到了针对各种不同问题的各种回复。

      【讨论】:

        【解决方案5】:

        如果文件扩展名是 .php 并且您的网络服务器配置正确,它将运行它。

        您指定 application/xxx 内容类型,因此大多数浏览器将强制下载并使用您的脚本名称作为文件名。

        如果您想强制使用与您的 php 文件名不同的文件名,请使用:

        header('Content-Disposition: attachment; filename=your_requested_file.kml');
        

        【讨论】:

        • 感谢 Virtual 的回答,但这不是我想要的。问题是我不想在这里下载任何东西。我只想在后台创建 .kml 文件并将其放在服务器上的文件夹中,仅此而已 - 无需下载
        • 那么,如果您不希望这样,为什么要通过 header() 为 USER BROWSER 指定 Content-Type ???????你告诉浏览器你要给他发一个文件,他下载,就这么简单,即使你什么都不发他也会下载一个 0k 的文件。如果您不想让他下载文件,请不要发送此标头。
        【解决方案6】:

        您可能没有发送正确的标头:

        <?php header ("content-type: text/xml");
        

        【讨论】:

          【解决方案7】:

          我的猜测是浏览器不是在尝试下载 PHP 脚本,而是在尝试下载 KML 文件。注释掉header() 行,看看它是否有效。在本地保存文件时,您不需要包含header()

          【讨论】:

          • 又太慢了。马克先得到它。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多