PHP中如何用Session ID替换文件名固定数字读取TXT文件
解决PHP中用Session ID替换文件名后缀的问题
你之前的问题出在误用了session_id()函数——这个函数返回的是PHP默认生成的会话ID字符串,而你实际需要的是存在$_SESSION["id"]里的自定义会话ID值。
直接替换文件名变量的写法即可,同时建议增加文件存在性检查,避免因文件不存在引发报错:
<?php // Initialize the session session_start(); // Check if the user is logged in, if not then redirect him to login page if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){ header("location: login.php"); exit; } // 使用$_SESSION["id"]构建文件名 $filename = 'challenge-' . $_SESSION["id"] . '.txt'; // 增加文件存在性检查 if (!file_exists($filename)) { $current = 0; // 可根据需求设置默认值 } else { $handle = fopen($filename, 'r'); $current = fread($handle, filesize($filename)); fclose($handle); } ?> <p class="details"><?php echo 'You have <strong>'.$current.'</strong> coins saved!'; ?></p>
关键修改说明:
- 替换
$filename的赋值逻辑,直接拼接$_SESSION["id"]而非调用session_id() - 增加
file_exists()检查,防止文件不存在时fopen和filesize抛出错误 - 如果
$_SESSION["id"]可能包含非法文件名字符,建议提前过滤,比如用preg_replace('/[^\w\-.]/', '', $_SESSION["id"])移除危险字符
内容的提问来源于stack exchange,提问作者MPG
相关产品推荐
相关产品推荐

