如何将PHP文件加载到变量中?


98

我需要将PHP文件加载到变量中。喜欢include();

我已经加载了一个简单的HTML文件,如下所示:

$Vdata = file_get_contents("textfile.txt");

但是现在我需要加载一个PHP文件。

Answers:


116

我想您想获取PHP生成内容,如果使用,请使用:

$Vdata = file_get_contents('http://YOUR_HOST/YOUR/FILE.php');

否则,如果您想获取PHP文件源代码,则它与.txt文件相同:

$Vdata = file_get_contents('path/to/YOUR/FILE.php');

6
如果我想不使用http而直接使用路径来获取“ PHP生成的内容”怎么办?
Osa 2012年

4
@Osa:根据您的需要,您可能会使用,eval()或者正在处理更复杂的代码:github.com/nikic/PHP-Parser
Alix Axel 2012年

2
为此实现一个PHP解析器似乎是一个巨大的过大杀伤力
DavidFariña2013年

1
我看不到它将如何通过POST或GET。我认为neobie的答案会更加正确和适当,因为外部PHP文件将在当前文件的上下文中进行处理。
ADTC

使用上面的示例,您可以使用get_template_directory_uri()并连接到文件路径。这将解决使用直接路径的问题。 $Vdata = file_get_contents(get_template_directory_uri() . '/path/to/file/in/theme.text');
伊恩·布鲁斯

124
ob_start();
include "yourfile.php";
$myvar = ob_get_clean();

ob_get_clean()


1
这样可行!但是,每当我尝试包含:yourfile.php?id = 3时,它都将不起作用。有什么建议?
tvgemert 2011年

1
由于不再使用http,因此在这种情况下,您需要通过$ _GET传递值。
Francesco Belladonna 2012年

图像呢?
kta

1
提示:自PHP 4.3.0起,您可以将最后两行缩短为$myvar = ob_get_clean();(请参见ob_get_clean文档
ADTC

完善!谢谢。
lowtechsun

7

如果您使用的是http://,正如eyze所建议的那样,那么您将只能读取PHP脚本的输出。如果PHP脚本本身与运行的脚本位于同一服务器上,则只能读取它。然后,您可以使用类似

$Vdata = file_get_contents('/path/to/your/file.php");

嗨,这只能得到静态的HTML。看到这个例子。如果这是我们要加载的文件;//////////////// <?php echo(“ text1”); ?> Text2 ///////////////这是我得到的输出;/////////////////// Text2 //////////////////
Kombuwa

@Kombuwa,能否请您在对原始问题的修改中澄清您的回答,在此您有更多空间可以清晰地说明?谢谢=)
大卫说要

7

如果要加载文件而不通过网络服务器运行文件,则应执行以下操作。

$string = eval(file_get_contents("file.php"));

这将加载然后评估文件内容。必须使用<?php?>标记来完整形成PHP文件,eval以便对其进行评估。


我喜欢这种方法。只是我的文件没有使用<?php和?>标记完全形成,以便eval对其进行评估。还有其他办法吗?
ItsMeDom

4

从理论上讲,您可以只使用fopen,然后使用stream_get_contents。

$stream = fopen("file.php","r");
$string = stream_get_contents($stream);
fclose($stream);

那应该为您将整个文件读入$ string,而不应该对其进行评估。尽管令您惊讶的是,当您指定本地路径时,file_get_contents无法正常工作。


3

或者,您可以开始输出缓冲,执行include / require,然后停止缓冲。使用ob_get_contents(),您可以将其他PHP文件输出的内容转换为变量。


3

如果您的文件具有如下的return语句:

<?php return array(
  'AF' => 'Afeganistão',
  'ZA' => 'África do Sul',
  ...
  'ZW' => 'Zimbabué'
);

您可以将其添加到这样的变量中:

$data = include $filePath;

1
plus1谢谢,这就是我想要的
whitesiroi

1

如果您的服务器已关闭allow_url_fopen,则file_get_contents()将不起作用。由于安全风险,大多数共享的Web主机默认情况下都将其关闭。另外,在PHP6中allow_url_fopen选项将不再存在,并且所有功能都将被永久设置为off。因此,这是一种非常糟糕的使用方法。

如果您通过http访问文件,最好的选择是cURL

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.