51 lines
1.9 KiB
PHP
51 lines
1.9 KiB
PHP
<?php
|
|
/**
|
|
* sync_users.php - 낮 12시, 밤 12시 자동 실행용
|
|
*/
|
|
declare(strict_types=1);
|
|
require_once __DIR__ . '/db_conn.php';
|
|
|
|
try {
|
|
$pdo = db_conn();
|
|
|
|
// 1. 현재 우리 DB에 등록된 전체 사용자 ID 가져오기
|
|
$stmt = $pdo->query("SELECT member_id FROM edu_users WHERE is_active = 'Y'");
|
|
$members = $stmt->fetchAll(PDO::FETCH_COLUMN);
|
|
|
|
echo "[" . date('Y-m-d H:i:s') . "] 동기화 시작 (대상: " . count($members) . "명)\n";
|
|
|
|
foreach ($members as $mid) {
|
|
// 2. 인트라넷 API 호출
|
|
$apiUrl = "http://erp.hanmaceng.co.kr/intranet/sys/model/EduJsonAPI.php?member_id=" . urlencode($mid);
|
|
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, $apiUrl);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
|
$response = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
if ($response) {
|
|
$apiData = json_decode($response, true);
|
|
if (($apiData['rstCd'] ?? '') == 200 && !empty($apiData['data'])) {
|
|
$userData = $apiData['data'][0];
|
|
$name = $userData['NM'] ?? $userData['name']; // 실제 API 키값 확인 필요
|
|
$rank = $userData['RANK_NM'] ?? $userData['rank_name'];
|
|
|
|
// 3. 정보 업데이트 (이름이나 직책이 변경되었을 수 있으니 갱신)
|
|
$upd = $pdo->prepare("UPDATE edu_users SET name = ?, rank_name = ?, updated_at = NOW() WHERE member_id = ?");
|
|
$upd->execute([$name, $rank, $mid]);
|
|
|
|
echo " - ID {$mid}: 업데이트 완료 ({$name} {$rank})\n";
|
|
}
|
|
}
|
|
// 서버 부하 방지를 위해 0.1초씩 쉬어줌
|
|
usleep(100000);
|
|
}
|
|
|
|
echo "전체 동기화 완료!\n";
|
|
|
|
} catch (Exception $e) {
|
|
error_log("[Sync Error] " . $e->getMessage());
|
|
echo "오류 발생: " . $e->getMessage();
|
|
} |