file_get_contents替换声明的变量

时间:2015-05-15 18:53:46

标签: php file-get-contents

我需要打开一个包含php和html代码的文件,并将一些声明的变量更改为用户选择的值:

文件开始:

<?php mb_internal_encoding("UTF-8"); ?>
<div class="redshop_product td"><!-- for <?php echo basename(__FILE__, '.php')?> //-->

<!-- REDshop entry for A Bigger Bundle /title --> <?php $outofstock=1; $explanation="Expected back in stock 12 June"; ?> 
AND THEN LOTS OF HTML AND JAVASCRIPT WHICH MAKES UP THE ITEM DISPLAY

我需要打开文件,检查$ outofstock和$说明的值,并用用户选择的任何内容替换它们,然后使用新值保存文件。我有一个功能

function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}

我用来从文件中选择字符串,并且非常适合普通的html和javascript。例如

get_string_between($contents, "<!-- REDshop entry for ", " /title");

会给你“更大的捆绑”。 但是我无法弄清楚如何使用php声明。所以

$outofstock=get_string_between($contents, '<?php $outofstock=', ';');

什么都不返回(应该是1)

以下是有问题的代码部分:

 $contents = strstr(file_get_contents("products/".$_POST['StockToggle'].".php"), ' -->', true);     
 $outofstock=get_string_between($contents, '<?php $outofstock=', ';');  $explanation=get_string_between($contents, '$explanation="', '";');     
 $productname=get_string_between($contents, "<!-- REDshop entry for ", " /title");

我如何实现我想要的任何想法?

2 个答案:

答案 0 :(得分:1)

outofstock为空的原因是因为它$contents中不存在。继续打印$contents您会发现它是:

<?php mb_internal_encoding("UTF-8"); ?>
<div class="redshop_product td"><!-- for <?php echo basename(__FILE__,'.php')?> //

这是因为您对strstr的结果使用了file_get_contents并且只返回了文件的内容,直到第一个&#34; - &gt;& #34;,这是在第一个echo和basename业务之后。

要修复此问题,您应该加载完整文件而不要使用strstr

答案 1 :(得分:0)

您当前的实施不适合此类操作。只需使用数据库并存储所有变量。如果您没有数据库服务器,请使用SQLite。如果您不能使用SQLite,那么您可以创建两个名为1.dat和2.dat的文件并将所有变量存储在那里,然后只需将它们读入您的变量。