CodeIgniter中函数执行后将时间戳保存到文本文件的实现方法
CodeIgniter 实现函数执行时自动写入时间戳到文本文件
核心逻辑
每次触发updateData方法时,获取当前时间戳,以追加写入模式打开指定文本文件,将时间戳写入后释放文件资源即可,提前配置好目标路径的读写权限即可避免写入失败。
实现代码
推荐将存储时间戳的文件放在框架自带的可写目录下:CI4 对应writable目录,CI3 对应application/logs目录,这类目录默认已经配置好Web进程的读写权限,不需要额外调整权限。
通用原生写法(兼容所有CI版本,无框架依赖)
直接修改对应控制器内的updateData方法即可:
public function updateData(){ // 定义存储文件路径,根据自身CI版本调整 // CI4写法: $logFile = WRITEPATH . 'timestamp_log.txt'; // CI3写法替换为:$logFile = APPPATH . 'logs/timestamp_log.txt'; // 定义写入的时间内容,按需调整格式 // 纯Unix时间戳写法:$timestamp = time() . PHP_EOL; // 可读格式化时间写法: $timestamp = date('Y-m-d H:i:s') . ' | Unix时间戳:' . time() . PHP_EOL; // 末尾加PHP_EOL换行符,保证每次记录单独占一行,方便查看 // 以追加模式打开文件,文件不存在时会自动创建 $fp = fopen($logFile, 'a'); if ($fp) { fwrite($fp, $timestamp); fclose($fp); } // 此处保留方法原有的业务逻辑 // ...... }
框架自带方法写法
CI4 版本
直接调用框架内置的文件系统服务,写法更简洁:
public function updateData(){ $logFile = WRITEPATH . 'timestamp_log.txt'; $timestamp = date('Y-m-d H:i:s') . ' | Unix时间戳:' . time() . PHP_EOL; // 调用文件系统服务,第三个参数true代表追加写入,默认false为覆盖写入 $filesystem = service('filesystem'); $filesystem->write($logFile, $timestamp, true); // 此处保留方法原有的业务逻辑 // ...... }
CI3 版本
先加载框架文件辅助函数,再调用写入方法:
public function updateData(){ // 加载文件辅助函数 $this->load->helper('file'); $logFile = APPPATH . 'logs/timestamp_log.txt'; $timestamp = date('Y-m-d H:i:s') . ' | Unix时间戳:' . time() . PHP_EOL; // 第三个参数传'a'为追加写入模式,传'w'为覆盖写入模式 if (!write_file($logFile, $timestamp, 'a')) { // 写入失败可按需加错误处理逻辑,比如记录框架错误日志 log_message('error', '时间戳写入文件失败,请检查路径权限'); } // 此处保留方法原有的业务逻辑 // ...... }
注意事项
- 不要将存储时间戳的日志文件放在
public等对外可直接访问的目录下,避免文件被公开访问造成信息泄露 - Linux环境下如果出现写入失败,优先检查目标目录的所属用户和权限,一般目录设置
755权限、文件设置644权限即可满足写入需求 - 如果不需要保留历史执行记录,只需要存最后一次执行的时间戳,把写入模式从追加
a改成覆盖w即可
内容的提问来源于stack exchange,提问作者Sarkar
相关产品推荐
相关产品推荐

