【问题标题】:Pass a variable from the source file to an included file in PHP将变量从源文件传递到 PHP 中的包含文件
【发布时间】:2010-06-18 11:57:15
【问题描述】:

对于我的网站,我想将网站的一般格式存储在单个位置的单个 PHP 文件中,并将每个不同页面的内容存储在页面的本地位置。然后我想通过变量将标题和内容地址传递给包含的文件。

但是我无法获取包含的格式文件来读取存储标题和内容数据的变量。

AKA,单个页面的调用文件将是:

<?php
$title = 'Some Title';
$source_file = 'content.php';
readfile('http:...../format.php');
?>

格式文件为:

<html> ...
<title>
<?php
echo $title;
?>
</title>
...
<?php
include($source_file);
?>
...

我记得在某处读过我需要在格式文件开头包含一些内容以获取变量的内容,但是我不记得它是什么或在哪里找到该信息。

【问题讨论】:

  • 你为什么在 HTTP 上使用 readfile?

标签: php variables include


【解决方案1】:

如果你的意思是使用include() 使用include() 而不是readfile() 用于输出文件的实际内容...readfile() 根本不会解析 PHP 代码,所以没有办法将变量传递给它。

您看到 PHP 代码正在执行的原因是您的 Web 服务器实际上正在发出第二个 HTTP 请求(对自己?),并运行第二个进程来执行您的 PHP。第二个进程将没有相同的会话,也无法访问第一个进程的任何 cookie 或其他变量。

您可以使用 GET 参数传递一些变量,但如果您要包含的文件位于同一服务器上,则应使用 include()。如果您要包含的文件位于另一台服务器上,您应该停下来想一想您在做什么,因为您自找麻烦

【讨论】:

  • 澄清:如果您使用 readfile() 加载 http:// url,那么结果页面将已经用 php 解析(即 - 它是一个包含 html 代码的字符串)
  • 我尝试使用包含而不是读取文件,但托管服务讨厌它并且不加载所需的文件。奇怪的是 readfile() 确实加载了 PHP 代码并正确执行它,除非该文件与调用文件位于同一位置。这是非常令人困惑的行为!
  • @Alpha1 托管服务不讨厌任何东西。它不是人类。这是一个程序。你刚刚遇到了某种错误,你必须修复它,而不是采取其他方式,反击一个。
【解决方案2】:

您需要显式传递参数。

<?php
$title = 'Some Title';
$source_file = 'content.php';
readfile('http:...../format.php?title='.urlencode($title).'&source_file='.urlencode($source_file));
?>

.

<html> ...
<title>
<?php
echo $_GET['title'];
?>
</title>
...
<?php
include($_GET['source_file']); // Don't do that! 
                               // Never use include with argument that came from outside
?>
...

不要将 include() 与来自外部的参数一起使用(如上所示)。 这是一个巨大的安全漏洞。

【讨论】:

  • 酷 .. 一个可以自己运行的网络应用程序!
  • 你们都是对的。我过于温和地陈述了这种解决方案的危险。现已更正。
  • 供将来参考 - 这是一个可怕的“解决方案”
  • 致反对者:如果您知道我如何向未来的观众强调此解决方案的更多危险,请告诉我。我不会删除这个答案,因为它解决了所提出的问题。不管这个问题本身是多么误导。
  • 我还是会删除它。问题作者 - 无论出于何种原因 - 无法正确使用 include(),并且使用 HTTP 请求绝对是不是解决方案。
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 2016-06-08
  • 2014-02-03
  • 1970-01-01
相关资源
最近更新 更多