【问题标题】:file_get_contents replace declared variablesfile_get_contents 替换声明的变量
【发布时间】:2015-05-15 18:53:45
【问题描述】:

我需要打开一个包含 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 和 $explanation 的值并用用户选择的任何值替换它们,然后用新值保存文件。我有一个功能

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

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

【问题讨论】:

  • 听起来你应该使用模板系统。
  • 显示get_string_between的定义。
  • 谢谢@Barmar。刚刚这样做了!
  • $outofstock=get_string_between($contents, '&lt;?php $outofstock=', ';'); 为我工作,它返回 1
  • strstr 使它只返回--&gt; 之前的文件部分。所以$content 没有分配。

标签: php file-get-contents


【解决方案1】:

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 "-->",这是在第一次回显之后基本名称业务。

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

【讨论】:

  • 优秀的@EdgeCaseBerg。谢谢你的细心。不知道我是怎么错过的!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2012-06-20
    • 1970-01-01
    相关资源
    最近更新 更多