【问题标题】:include statement using a variable in the filename在文件名中使用变量的 include 语句
【发布时间】:2013-03-05 04:20:56
【问题描述】:

(请耐心等待,这确实与包含有关。)我正在等待一个域转移过来,并尝试提前在新的托管服务上设置它。我意识到在旧网站上所有的路径名都是绝对的,所以我在新主机上的所有链接都指向旧主机上的页面。我决定将它们全部设为相对(也用于未来可能的移动)。我第一次这样做是这样的:

index.php

include ('./header.php');

header.php

include "./panel.php";

panel.php

Contents of panel.

这有效,我的页面显示:

面板的内容。

然后我决定为域设置一个变量,因为我想从子目录中的文件中包含这个头文件,并且我可以使用域变量来创建一个绝对路径。现在我有一个临时域名,稍后我可以在转移完成时将其更改为真实域名。所以我将 header.php 更改为:

$domain="http://tempdomain.com"; //I can change this after the transfer 
$panel=$domain."/panel.php";
echo $panel;
if ((include $panel) !== 1)
{
  echo "<br>include failed";
}

我得到的是:

http://tempdomain.com/panel.php
包含失败

我查看了各种站点的包含语法,但在我的代码中找不到任何错误。所有这些文件都在 / 目录中。有什么想法吗?

【问题讨论】:

  • 我希望您了解文件系统和通过 http 协议访问文件之间的区别。 :) IE。要包含脚本,您应该在文件系统上使用物理路径。
  • if((include "$panel") !== 1) 周围添加双引号。看看会发生什么
  • @PLB :该代码的解决方案是什么..
  • @Ranjith 我能想到两种解决方案。首先,在文件系统上使用路径(通常每个人都应该这样做)。其次,使用file_get_contents 通过http 获取内容并使用eval 执行该脚本。第二种方法可以,但千万不要使用!

标签: php variables include filenames


【解决方案1】:

包含时,您必须提供结构化的目录,而不是 url。

您的托管服务器路径可能是 home/public/www/htdocs/your_directory_name/panel.php 之类的。然后就可以了。

【讨论】:

  • 如果我理解正确,我应该忘记域变量并将 header.php 中的代码更改为: if ((include "/panel.php") !== 1) { echo "包含失败";我刚试过这个,但仍然包含失败。我错过了什么?
  • 试试这个,include($_SERVER['DOCUMENT_ROOT'].'/header.php');
【解决方案2】:

remort include 也是可行的 如果 1. 服务器的 php.ini 应该允许它。 2. 将被包含的文件不应在包含之前预先处理。这意味着它必须返回未处理的代码:)

【讨论】:

    【解决方案3】:
    • 首先,allow_url_fopen 标志必须在php.ini 中设置。否则远程 include() 无法完成。运行var_dump(ini_get("allow_url_fopen")); 看看是不是这样。

      • 其次,“PHP 4.3.0 之前的 Windows 版本的 PHP 不支持通过此函数访问远程文件,即使启用了 allow_url_fopen。” - 见PHP docs

      • 第三,您的远程 PHP 脚本必须生成有效的 PHP 代码作为输出。如果您通过 http 包含(),则 不是 脚本本身,但它的输出将被包含在内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 2011-01-12
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      相关资源
      最近更新 更多