You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP循环生成内容调用file_put_contents写入仅保留最后值问题

问题根因

循环内对$etage使用赋值运算符=,每次迭代都会覆盖上一轮存储的值,循环结束后变量仅保留最后一次迭代生成的内容。同时超长双引号字符串内嵌多层转义字符、变量,也容易出现解析错误。

修复方案
  1. 提前初始化存储楼层配置的变量,循环中使用拼接运算符.=追加每一轮生成的配置内容,不要直接覆盖变量
  2. 使用PHP的heredoc语法组装大段JS内容,避免多层引号嵌套导致的转义混乱
  3. 对用户传入的POST参数做基础校验和转义,避免生成的JS出现语法错误或恶意注入问题
  4. 补全缺失的session_start()调用,否则$_SESSION的存值逻辑不会生效

修复后的完整代码如下:

<?php
// 启用SESSION,原代码缺失这一行会导致SESSION存值失效
session_start();
// 对传入参数做类型校验和转义
$floor = intval($_POST['floor']);
$xmlpath = addslashes($_POST['xml']);
$_SESSION["floor"] = $floor;

// 初始化楼层配置,先存入底层rdc的配置
$etagesContent = "'rdc': { 'a': 'rdc.png', 'b': 'rdc_b.png', 'v': '0' },"; 

// 循环拼接所有楼层配置,使用.= 追加内容而非覆盖
for ($x = 1; $x <= $floor ; $x++) {
    $etagesContent .= "'r$x' : { 'a': 'r$x.png', 'b': 'r${x}_b.png', 'v': '$x' },";
}

// 使用heredoc语法组装完整JS内容,无需额外转义内部双引号
$jsContent = <<<JS
var appConfig = {
    'helpwindow': {
        'active': false,
        'background': '#ffffff',
        'text': '#333333',
        'title': 'Aide',
        'content': 'Naviguer autour de la résidence en saisissant avec la souris et en la faisant tourner <img src = "images/hand_icon.png" style = "vertical-align:middle;height:18px;"/><br/>Zoomer / dézoomer en utilisant les boutons <img src = "images/zooms.png" style = "vertical-align:middle;height:18px;"/><br/>Rechercher un bien en cliquant sur l\'icône <img src = "images/menu.png" style = "vertical-align:middle;height:18px;"/>'
    },
    'mainmenu': {
        'background': '#ffffff',
        'width': '160px',
        'borderwidth': '2px',
        'bordercolor': '#000000'
    },
    'margins': '30px',
    'xmlPath': '$xmlpath',
    'imagesPath': 'images',
    'plansPath': '',
    'photo_link': '',
    'play_link': '',
    'types': {
        'active': true,
        'items': {
        }
    },
    'etages_display': 'block',
    'etages': {
        $etagesContent
    },
    'logos_padding': '10px',
    'logos': {
    },
    'images': {
        'aerial_4': 'aerial4.png',
        'aerial_4_b': 'aerial4_b.png',
        'aerial_5': '',
        'aerial_5_b': '',
        'photo': '',
        'play': '',
        'compass': 'compass.png',
        'zoom_minus': 'zoom_minus.png',
        'zoom_plus': 'zoom_plus.png',
        'zoom_button': 'zoombutton.png',
        'left': 'left.png',
        'right': 'right.png',
        'zoomin': 'zoomin.png',
        'zoomout': 'zoomout.png',
        'fullscreen': 'fullscreen.png',
        'autorotate': 'autorotate.png',
        'menu': 'menu.png',
        'menu_open': 'menu_open.png',
        'vues': 'vues.png',
        'types': 'type_de_bien.png',
        'close': 'close.png'
    }
};
JS;

// 写入配置文件,确保当前目录有PHP写入权限
file_put_contents("conf.js", $jsContent);
?>
额外说明
  • 原代码中images配置块最后一项末尾多了冗余逗号,在旧版IE浏览器中会触发JS语法错误,修复代码中已移除该冗余逗号
  • 执行写入前请确认conf.js所在目录对PHP运行进程开放写入权限,否则会出现写入失败的问题

内容的提问来源于stack exchange,提问作者tontongako

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:30:45