file_get_contents 替换声明的变量

file_get_contents replace declared variables

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

文件开始:

<?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 和 $explanation 的值并将它们替换为用户 selected 的任何值,然后用新值保存文件。我有一个功能

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);
}

我将其用于文件中的 select 字符串,并且非常适合正常的 html 和 javascript。例如

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

会给你"A Bigger Bundle"。 但是我无法弄清楚如何让它与 php 声明一起使用。所以

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

returns 没有(应该是 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");

有什么想法可以实现我想要的吗?

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

outofstock 为空的原因是 $contents 中不存在。继续打印 $contents 你会注意到它是:

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

这是因为您在 file_get_contents 的结果上使用了 strstr 并且只返回文件的内容直到 first "--> ",这是在第一个 echo 和 basename 业务之后。

要修复它,您应该加载完整文件而不是使用 strstr