为了提高安全性和可维护性,可以对代码进行以下改进:

  1. 验证IP地址的有效性,防止恶意伪造IP地址

使用filter_var()函数验证IP地址的有效性:

$ip = $_SERVER['REMOTE_ADDR']; if(filter_var($ip, FILTER_VALIDATE_IP)){ //有效IP地址 } else{ //无效IP地址,不记录 }

  1. 考虑使用预处理语句来防止SQL注入

使用预处理语句和绑定参数来防止SQL注入:

$stmt = $conn->prepare("INSERT INTO visitor_record (ip_address, browser_info, visit_time, visit_url) VALUES (?, ?, ?, ?)"); $stmt->bind_param("ssss", $ip, $browser, $time, $url); if($stmt->execute()){ echo "记录成功"; } else { echo "记录失败:" . $stmt->error; } $stmt->close();

  1. 使用PDO或者ORM框架来操作数据库,提高安全性和可维护性

使用PDO来操作数据库:

$dsn = "mysql:host=$servername;dbname=$dbname"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $username, $password, $options); } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } $stmt = $pdo->prepare("INSERT INTO visitor_record (ip_address, browser_info, visit_time, visit_url) VALUES (?, ?, ?, ?)"); $stmt->execute([$ip, $browser, $time, $url]); echo "记录成功";

  1. 将访问记录写入日志文件的方式改为使用日志库,如Monolog,提高日志的可读性和可操作性

使用Monolog库来记录日志:

use Monolog\Logger; use Monolog\Handler\StreamHandler; $log = new Logger('visitor'); $log->pushHandler(new StreamHandler('visitor.log', Logger::INFO)); $log->info('Visited', ['ip' => $ip, 'browser' => $browser, 'time' => $time, 'url' => $url]);

  1. 统计访问量时,考虑使用缓存技术来减少数据库的读取次数,提高性能

使用缓存来减少数据库的读取次数:

$cache = new Memcached(); $cache->addServer('localhost', 11211); $key = 'visitor_count'; $count = $cache->get($key); if($count === false){ $sql = "SELECT COUNT(*) FROM visitor_record"; $result = $conn->query($sql); if($result){ $row = $result->fetch_row(); $count = $row[0]; $cache->set($key, $count, 60); //缓存1分钟 } else{ echo "查询失败:" . $conn->error; } } echo "访问量:" . $count;

1 验证IP地址的有效性防止恶意伪造IP地址;2 考虑使用预处理语句来防止SQL注入;3 使用PDO或者ORM框架来操作数据库提高安全性和可维护性;4 将访问记录写入日志文件的方式改为使用日志库如Monolog提高日志的可读性和可操作性;5 统计访问量时考虑使用缓存技术来减少数据库的读取次数提高性能。php获取访客的IP地址$ip = $_SERVERREMOTE_ADDR;获取访客的浏览器信息$

原文地址: https://www.cveoy.top/t/topic/N5G 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录