EOF; echo $str; } // 辅助函数:调用TuShare API function callTushareApi($method, $params){ $token = TUSHARE_API_TOKEN; // 将参数编码为JSON格式 $postData = json_encode([ "api_name" => $method, "token" => $token, "params" => $params, "fields" => "" // 其他字段需要根据具体API调整 ]); // 初始化cURL会话 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://api.tushare.pro'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($postData) ]); // 执行cURL请求 $response = curl_exec($ch); $err = curl_error($ch); curl_close($ch); // 调试输出:打印请求和响应信息 if (debug_enabled()) { // 假设这是一个函数,用于检查是否启用了调试模式 error_log("TuShare API Request: " . $postData); error_log("TuShare API Response: " . $response); } // 错误处理 if ($err) { error_log("cURL error: " . $err); return "cURL error: " . $err; } $responseData = json_decode($response, true); // 检查API调用是否成功 if (isset($responseData['code']) && $responseData['code'] != 200) { error_log("TuShare API Error: " . $responseData['msg']); return "TuShare API Error: " . $responseData['msg']; } if (isset($responseData['data']) && isset($responseData['data']['items'])) { return $responseData['data']['items']; } else { return []; } } /** * 调用 api.doorcome.cn 获取实时数据 */ function callDoorcomeApi($endpoint, $params = []) { $url = 'https://api.doorcome.cn/api/' . $endpoint; if ($params) { $url .= '?' . http_build_query($params); } $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_SSL_VERIFYPEER => false, ]); $resp = curl_exec($ch); $err = curl_error($ch); curl_close($ch); if ($err) { error_log("Doorcome API error [$endpoint]: " . $err); return null; } return json_decode($resp, true); } // 假设的调试模式开关函数 function debug_enabled() { return true; } /** * 记录页面访问日志 */ function log_pv(){ $mysqli = get_mysqli_connection(); $vpage = $_SERVER['PHP_SELF']; $ua = $_SERVER['HTTP_USER_AGENT']; $ip = $_SERVER['REMOTE_ADDR']; $qs = $_SERVER['QUERY_STRING']; $vtime = date("Y-m-d H:i:s"); $sql = "insert into pv_log(vpage,querystring,remoteip,ua,vtime) values (?,?,?,?,?)"; db_query($mysqli, $sql, [$vpage, $qs, $ip, $ua, $vtime]); $mysqli->close(); } /** * 页面访问计数器,输出命中数 */ function pv_counter($user=''){ $mysqli = get_mysqli_connection(); $page = $_SERVER['PHP_SELF']; $lmtime = date("Y-m-d H:i:s"); $ip = $_SERVER['REMOTE_ADDR']; $result = db_query($mysqli, "select hits from pv_counter where page_name = ?", [$page]); $rt = $result->fetch_all(MYSQLI_ASSOC); $n = count($rt); if($n < 1){ db_query($mysqli, "insert into pv_counter(page_id,Page_name,hits,lm_date,lm_ip,lm_user) values (null,?,1,?,?,?)", [$page, $lmtime, $ip, $user]); $hits = 1; } elseif($n == 1){ $hits = $rt[0]['hits'] + 1; db_query($mysqli, "update pv_counter set hits = ?, lm_date = ?, lm_ip = ?, lm_user = ? where page_name = ?", [$hits, $lmtime, $ip, $user, $page]); } else { $mysqli->close(); return "

There is error on pv_counter

"; } $result = db_query($mysqli, "select sum(hits) hits_all from pv_counter"); $hits_all = $result->fetch_all(MYSQLI_ASSOC); $mysqli->close(); echo "Page hits: " . $hits . " Total: " . $hits_all[0]['hits_all']; } /** * 页面访问统计(日志+计数器) */ function page_counter(){ log_pv(); pv_counter(); } ?>