PHP文件中追加GET参数与换行失效问题排查求助
Hey Tony, let's get this sorted out for you! The issue has two main parts—a syntax error breaking your code and a minor compatibility tweak for line breaks. Let's break it down:
为什么原来的代码换行不生效?
Your original code has a syntax mistake: you forgot a semicolon after $current .= "\r\n", and you tried to chain file_put_contents right onto that line. This means the line break never actually gets added to your $current variable, and the code might even throw a parse error (depending on your error settings). That's why all your gclids are stuck together.
修复方案1:修正原有逻辑(兼容所有系统)
We'll fix the syntax error, use PHP's built-in PHP_EOL constant (which automatically uses the correct line break for your OS—\n for Linux/macOS, \r\n for Windows), and add a safety check for the file existence:
$file = 'gclids.php'; // 先检查文件是否存在,避免首次运行时file_get_contents报错 $current = file_exists($file) ? file_get_contents($file) : ''; // 获取gclid,同时避免未定义索引警告 $gclid = $_GET['gclid'] ?? ''; // 仅当gclid不为空时才追加 if (!empty($gclid)) { // 先加gclid,再加系统兼容的换行符 $current .= $gclid . PHP_EOL; // 写入文件 file_put_contents($file, $current); }
修复方案2:更高效的追加方式(推荐)
Reading the entire file every time to append a single line is inefficient, especially as the file grows. Instead, use the FILE_APPEND flag with file_put_contents to add content directly to the end of the file without reading it first:
$file = 'gclids.php'; $gclid = $_GET['gclid'] ?? ''; if (!empty($gclid)) { // 直接追加gclid和换行符到文件末尾 file_put_contents($file, $gclid . PHP_EOL, FILE_APPEND); }
重要安全提示
Never trust user input directly! Someone could send malicious code via the gclid parameter, which would get written to your gclids.php file. To prevent this, sanitize the input:
// 转义特殊字符,避免注入风险 $gclid = htmlspecialchars($_GET['gclid'] ?? '', ENT_QUOTES);
内容的提问来源于stack exchange,提问作者Tony88

