我想知道,为什么PHP file_put_contents()
函数以奇怪的方式工作。
我在循环中使用它来将一些日志写入文件,一切都很好(即使没有指定标志,也会附加新行)。当我再次启动脚本时,它重新创建了我的文件。
来自PHP doc:
如果filename不存在,则创建该文件。否则, 除非设置了FILE_APPEND标志,否则将覆盖现有文件。
好的,所以我的问题是:为什么(当在一个循环中使用时)它不会覆盖我的文件(当然没有FILE_APPEND标志)?错误或功能? :)
编辑:发生这种情况时使用的示例上下文:
$logFile = dirname ( __FILE__ ) . '/example.log';
foreach($something1 as $sth1) {
$logData .= "Something\n";
foreach($something2 as $sth2) {
if($something_else) {
$logData .= "Line: \t" . $sth2 . "\n";
file_put_contents($logFile, $logData);
}
}
}
答案 0 :(得分:1)
正如this link中标记内容(您应该阅读)中已经非常明确地提到的那样,它明确指出如果文件文件名已经存在,则将数据附加到文件而不是覆盖它(当这个时候标志设置)。因此,当设置FILE_APPEND的标志时,它会附加,而不会重写。希望这能帮到你。
答案 1 :(得分:0)
替代方式
<?php
$file = 'file.txt';
$append = true;
if (file_exists($file)) {
if ($append) {
// append file
$file = fopen($file, 'a+');
} else {
// overwrite file
$file = fopen($file, 'a');
}
} else {
// create file
$file = fopen($file, 'a');
}
fwrite($file, 'text');
fclose($file);
?>
阅读相关主题
答案 2 :(得分:-1)
好的,当你每次尝试使用random number or currentdate timestamp
重命名日志文件时运行脚本并尝试将其保存在数据库中
当你再次运行脚本并从数据库获取日志文件名并在需要时更新它