【问题标题】:Including different types of files in PHP在 PHP 中包含不同类型的文件
【发布时间】:2009-04-04 22:31:09
【问题描述】:

我接手了一个 PHP 项目,并试图让它在我的开发盒上运行。我是开发人员而不是系统管理员,所以我无法让它正常工作。

以前的开发人员使用 .h 文件来包含 PHP。我当前的配置是采用该 .h 文件并包含它而不执行它。我需要在我的 apache 配置中寻找什么(或者是我的 php.ini)?

编辑:

当我阅读下面的其中一个 cmets 时,有些东西点击了。该代码使用 ASP 样式标签“<?”。我在 php.ini 中打开了该选项,根据 phpinfo(),它已启用,但 apache 仍然只是将代码包含为文本。

我刚刚检查了它并使用完整的 PHP 开头标签“<?php”运行代码解决了这个问题。话虽如此,我仍然希望它以另一种方式工作。

我正在使用最新版本的 Macbook 上运行代码。 PHP 5.2.6、postgresql 8.3 和 apache 2。

代码在登台服务器上工作,但我不知道它有什么区别。

编辑

Durrr...我没有在 php.ini 中启用 short_open_tags。

【问题讨论】:

  • 我会更改它们,因为如果您将其安装在另一台服务器上并且忘记使 .h 文件不可下载,基本上忘记告诉 apache 不可以将其视为文本文件
  • 当你说“包含它”时,你的意思是用户去(比如说)site.com/somepage.php,然后 somepage.php 发出一个 include("whatever.h") 命令?你的意思是用户实际上去了site.com/whatver.h?
  • Kip - 后者。它包含在 include_once("whatever.h")
  • Thomas - 包含文件在公共网站之外,因此它们没有被下载的风险。

标签: php include apache2


【解决方案1】:

问题可能是您包含的 .h 文件刚刚开始进入 php 代码而没有打开“<?php”标签?

来自include 文档:

当包含一个文件时,解析会在目标文件的开头退出 PHP 模式并进入 HTML 模式,并在结尾处再次恢复。因此,目标文件中应作为 PHP 代码执行的任何代码都必须包含在 valid PHP start and end tags 中。

【讨论】:

    【解决方案2】:

    PHP 是一种解释性语言,因此您不能在不执行文件的情况下“包含”文件。请记住,'.h' 只是一个文件扩展名,所以虽然之前的编码人员可能将 PHP 放在了一个 '.h' 文件中,但它仍然只是 PHP。

    有关您遇到的问题的更多详细信息会有所帮助。

    【讨论】:

    • 唐是正确的。 include、include_once、require 和 require_once 所有功能都通过执行目标文件来实现。 PHP 没有“包含但不执行”的概念。
    【解决方案3】:

    您可以使用 .htaccess 文件并添加:

    php_value auto_prepend_file /path/to/include-file.h


    编辑

    我刚刚读到 .htaccess 仅适用于 php 的模块版本。

    【讨论】:

      【解决方案4】:

      您应该将它们全部更改为 .php 扩展名。但是,如果您打算将它们保留为 .h,则需要更改 Apache 中的映射。通过适当的解释器运行文件的是 Apache,而不是 PHP。 PHP 引擎将处理传递给它的任何内容。

      【讨论】:

      • 如果他说的是准确的,他正在加载一个 php 文件,并且它执行了一个 include("whatever.h") 命令,所以 apache 设置是什么并不重要。
      • 重读这个问题,还不清楚,但我想也许你是对的,用户实际上是去 site.com/whatever.h
      • 不,我要去site.com/index.html。 apache 配置将 .html 文件作为 PHP 执行并运行 include_once("whatever.h")。我还不想更改所有的 .h 文件——它们有很多。网站正在改写。
      【解决方案5】:

      includerequire 将执行包含的文件。如果您使用的是readfile,它只是简单地回显文件而不将其视为 PHP 代码。

      【讨论】:

        【解决方案6】:

        如果 .h 文件“缺少”<?php 指令,那么您可能必须从包含切换到类似:

        eval( file_get_contents("file.h") );
        

        我个人尽量避免使用 eval,但有时别无选择。

        【讨论】:

          猜你喜欢
          • 2011-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-09
          • 1970-01-01
          • 2017-04-09
          • 1970-01-01
          • 2012-08-06
          相关资源
          最近更新 更多