在 Ubuntu 上使用 ThinkPHP 进行数据分析的实操指南
一 环境准备与项目初始化
composer create-project topthink tp6cd tp6 && php think run(默认端口 8000)。root /var/www/html/tp6/public;try_files $uri $uri/ /index.php?$query_string;fastcgi_pass unix:/run/php/php8.2-fpm.sock;(按实际 PHP 版本调整)。CREATE DATABASE tp6_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;chown -R www-data:www-data /var/www/html/tp6 && chmod -R 755 /var/www/html/tp6/runtime)。二 数据分析常用方法与示例
count();求和:sum('field');平均值:avg('field');最大值:max('field');最小值:min('field')。whereTime('create_time', 'today')。student(id, name, age, sex, score)。namespace app\index\controller;
use app\index\model\Student;
use think\Controller;
class Index extends Controller
{
public function scoreStats()
{
$m = new Student();
$total = $m->count();
$avg = $m->avg('score');
$max = $m->max('score');
$min = $m->min('score');
return json([
'total' => $total,
'avg' => round($avg, 2),
'max' => $max,
'min' => $min,
]);
}
}
use think\facade\Db;
$totalSales = Db::name('order')->sum('total_price');
$avgSales = Db::name('order')->avg('total_price');
$maxSales = Db::name('order')->max('total_price');
$minSales = Db::name('order')->min('total_price');
return json(compact('totalSales','avgSales','maxSales','minSales'));
use app\index\model\Student;
$stats = Student::field('age, count(*) as cnt, avg(score) as avg_score')
->group('age')
->order('age')
->select();
return json($stats);
三 结果展示与导出
return json($data);,前端或 BI 工具可通过 HTTP API 拉取数据。use think\facade\Db;
public function exportCsv()
{
$rows = Db::name('order')
->field('order_no, total_price, create_time')
->whereTime('create_time', 'today')
->select();
$csv = "订单号,金额,下单时间\n";
foreach ($rows as $r) {
$csv .= "{$r['order_no']},{$r['total_price']},{$r['create_time']}\n";
}
return response($csv, 200, [
'Content-Type' => 'text/csv',
'Content-Disposition' => 'attachment; filename="orders_' . date('Ymd') . '.csv"',
]);
}
四 性能与安全建议
SELECT *),合理使用缓存(如 Redis)存储热点指标。app_debug => false,限制接口访问权限(如 Token/JWT)。nginx -t && systemctl reload nginx。