带有变量的PHP file_get_contents

时间:2016-09-25 15:10:31

标签: php variables file-get-contents

我有一个功能:

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。 请帮我 ! 感谢

5 个答案:

答案 0 :(得分: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 :(得分: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'));

答案 2 :(得分:1)

file_get_contents()所做的就是返回文件的内容,正如函数名所示。它不会解析" s中字符串所发生的内容。

在返回的文件内容上使用str_replace()似乎达到了你想要的效果。

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

如果您想要替换多个变量&#39;您可以将数组传递给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

答案 3 :(得分:0)

你可以包含.php文件,但机智.html是没有用的,因为你包含html而不是php代码。如果您创建代码和您的文件:

    app:popupTheme="@style/AppTheme.PopupOverlay"

inc_file.php:

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

答案 4 :(得分:0)

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

How can I output this dynamic data without 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) ;