PHP使用变量的file_get_contents函数

3

我有一个函数:

myfunc () {
   $a = "John";
   $str = "Hello $a, how are you today?"
   return $str;
}

echo myfunc(); //Hello John, how are you today?

我希望将该函数中的所有句子保存到另一个文件中,因为它们的长度太长了,无法放在我的函数中。

myfunc () {
  $a = "John";
  $str = file_get_contents("inc_file.html");
  return $str;
}

inc_file.html:

Hello $a, how are you today?

但是它没有如我所期望的返回。变量 $a 没有被改为 John。 请帮助我! 谢谢。

不,我不想用某些函数保存文件。我手动创建html文件。php代码仅用于读取和显示html文件中的内容。 - Phong Hoang
5个回答

3

file_get_contents()函数只是返回文件的内容,就像函数名称所示。它不会解析内容,这就是使用字符串中的"s发生的事情。

在返回的文件内容上使用str_replace()似乎可以实现你想要的效果。

$str = file_get_contents("inc_file.html");
$str = str_replace('$a', 'John', $str);
return $str;

如果您想要替换多个'变量',可以将数组传递给str_replace函数。例如:
$search = [$a, $b];
$replace = ['John', 'Brian'];

$str = file_get_contents("inc_file.html");
$str = str_replace($search, $replace, $str);
return $str;

请见http://php.net/manual/en/function.str-replace.php

没问题。但是我的函数中有很多变量。我在代码中定义了所有这些变量。我必须在str_replace函数中重新编写它们吗?我真的希望它能自动检测到现有的变量而不是替换它们。 - Phong Hoang

1

$str = file_get_contents("inc_file.html");这行代码只是获取文件内容。它不会对内容进行评估,也不会用其值替换变量。

假设文件很大或者包含一些关于php变量的特定文本,那么会发生什么?

它们都应该被替换为某些值吗?我想不是这样。所以,你只有一个带有$a之类符号的字符串。

如果你需要在字符串中替换某些内容,请使用str_replace,简单的代码如下:

function myfunc () {
    $a = "John";
    $str = file_get_contents("inc_file.html");
    return str_replace('$a', $a, $str);
}

1
你所拥有的已经足够了,你可以使用 preg_replace_callback() 或在这种情况下使用 str_replace() 来做你想要的事情。只需进行一些调整即可:

HTML:

"Hello ~val~, how are you today?"

PHP

function myfunc ($a)
    {
        $str = str_replace('~val~',$a,file_get_contents("inc_file.html"));
        return $str;
    }

echo myfunc('John');

简单的preg_replace_callback()示例:

function myfunc ($string,$a)
    {

        $str = preg_replace_callback('/(~[^~]{1,}~)/',function($v) use (&$a)
            {
                return array_shift($a);
            },$string);

        return $str;
    }

$string = "hello my name is ~name~. I come from ~city~";
echo myfunc($string,array('John','San Francisco'));

0

你可以包含 .php 文件,但是包含 .html 文件不起作用,因为你包含的是 HTML 而不是 PHP 代码。如果你编写代码并且文件像这样:

<?php
function myfunc() 
{
  $a = "John";
  $str = file_get_contents("inc_file.php");
  return $str;
}
?>

inc_file.php:

Hello <?php echo $a; ?>, how are you today?

它不起作用。我认为是因为函数“file_get_contents”没有传递变量。但是如果我使用“include”代替,它不会返回我的变量$ str的值。 - Phong Hoang

0

这里有一个方法,可以替换加载文件字符串中的任何匹配变量。它是从下面链接中的代码修改而来。我修改了它以检查字符串类型。它假设变量是全局的。

如何在不使用 eval 的情况下输出此动态数据?

function interpolate( $string ){
foreach ($GLOBALS as $name => $value){
    // avoid array to string and object conversion errors
  if(is_string($value)){
    $string = str_replace( '$'.$name, $value, $string );
  }
}
$string = preg_replace( '/[$]\\w+/', '', $string );
return $string;
}
$emailTemplate = file_get_contents('inc_file.html');
$emailTemplate = interpolate($emailTemplate);
echo $emailTemplate;

我在搜索了一种不使用 eval() 的方法后找到了这个,如下所示:

$emailTemplate = file_get_contents('inc_file.html');
$emailTemplate = htmlentities($emailTemplate);
eval("\$emailTemplate = \"$emailTemplate\";");
echo html_entity_decode($emailTemplate) ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接