정상 작동 하다가 PHP7.4로 업데이트 하면서 발생되는 문제
본문
<?
include_once('./_common.php');
$tree_data = '0';
function findUser($wr_id)
{
global $model;
global $tree_data;
$childs = [];
foreach ($model as $key => $val) {
if ($val['wr_6'] == $wr_id) {
$tree_data++;
$childs[] = $val;
}
}
foreach ($childs as $key => $val) {
findUser($val['wr_id']);
}
}
$sql = "SELECT a.wr_id , a.mb_id , a.wr_6 , a.wr_2 , a.wr_9 , a.wr_10
FROM g5_write_plan_a a
WHERE a.wr_id = 1";
$my_result = sql_query($sql);
$model = array();
$start = microtime(true);
for ($i = 0; $row = sql_fetch_array($my_result); $i++) {
$model[] = $row;
}
foreach ($model as $key => $val) {
$tree_data = '0';
findUser($val['wr_id']);
$level = '0';
if ($tree_data < '2') {
$level = '0';
}
if ($tree_data >= '2' and $tree_data <= '5') {
$level = '1';
}
if ($tree_data >= '6' and $tree_data <= '13') {
$level = '2';
}
if ($tree_data >= '14' and $tree_data <= '29') {
$level = '3';
}
if ($tree_data >= '30' and $tree_data <= '61') {
$level = '4';
}
if ($tree_data >= '62' and $tree_data <= '125') {
$level = '5';
}
if ($tree_data >= '126' and $tree_data <= '253') {
$level = '6';
}
if ($tree_data >= '254' and $tree_data <= '509') {
$level = '7';
}
if ($tree_data >= '510' and $tree_data <= '1021') {
$level = '8';
}
if ($tree_data >= '1022' and $tree_data <= '2045') {
$level = '9';
}
if ($tree_data >= '2046' and $tree_data <= '4093') {
$level = '10';
}
echo "tree_data:".$tree_data."<br>";
echo "level:".$level."<br>";
$sql = " update g5_write_plan_a set wr_9 = ".$level." where wr_id = ".$val['wr_id'];
sql_query($sql);
}
$end = microtime(true);
$time = $end - $start;
echo number_format($time, 8) . "<br>";
wr_id 기준으로
wr_6필드에 추천처럼 wr_id 값을 가지고 있고 그 wr_id값을 wr_6필드에 또 지정된걸
반복해서 수를 파악하고 레벨을 뿌려주는 소스입니다.
g5_member 테이블에서 추천코드 mb_recommend 랑 비슷하다고 보시면되요
내 추천자가 그 추천자 또 그 추천자 이런식으로 무한반복 수를 뽑아 내는것입니다
근데 문제는 이제 잘 되다가
단독서버인데 php7.4.13 으로 재 설치를 하고 나서
에러도 안나오고 ㅠ 정상실행은 되는데 계속 $tree_data 값이 0으로 나옵니다.
데이터는 모두 정상으로 들어가 있습니다. ㅠㅠ
처음부터 안됬음 이해되는데 잘 되던게 php 재설치 후 안되네요 ㅠ
고수님들 한번 봐주세요!~
부탁드립니다.
!-->답변 2
안녕하세요.
1. 상단에 에러코드 출력으로 어떤 에러가 나는지 한번 보시기 바랍니다.
error_reporting(E_ALL);
ini_set('display_errors', 1);
2. 아래의 코드 참고를 해보시겠어요?
function findUser($wr_id, $tree_data)
{
global $model;
$childs = [];
foreach ($model as $key => $val) {
if ($val['wr_6'] == $wr_id) {
$tree_data++;
$childs[] = $val;
}
}
foreach ($childs as $key => $val) {
$tree_data = findUser($val['wr_id'], $tree_data);
}
return $tree_data;
}
<?
include_once('./_common.php');
$tree_data = 0;
function findUser($wr_id)
{
global $model;
global $tree_data;
$childs = [];
foreach ($model as $key => $val) {
if ($val['wr_6'] == $wr_id) {
$tree_data++;
$childs[] = $val;
}
}
foreach ($childs as $key => $val) {
findUser($val['wr_id']);
}
}
$sql = "SELECT a.wr_id , a.mb_id , a.wr_6 , a.wr_2 , a.wr_9 , a.wr_10
FROM g5_write_plan_a a
WHERE a.wr_id = 1";
$my_result = sql_query($sql);
$model = array();
$start = microtime(true);
for ($i = 0; $row = sql_fetch_array($my_result); $i++) {
$model[] = $row;
}
foreach ($model as $key => $val) {
$tree_data = 0;
findUser($val['wr_id']);
$level = 0;
if ($tree_data < 2) {
$level = 0;
}
if ($tree_data >= 2 and $tree_data <= 5) {
$level = 1;
}
if ($tree_data >= 6 and $tree_data <= 13) {
$level = 2;
}
if ($tree_data >= 14 and $tree_data <= 29) {
$level = 3;
}
if ($tree_data >= 30 and $tree_data <= 61) {
$level = 4;
}
if ($tree_data >= 62 and $tree_data <= 125) {
$level = 5;
}
if ($tree_data >= 126 and $tree_data <= 253) {
$level = 6;
}
if ($tree_data >= 254 and $tree_data <= 509) {
$level = 7;
}
if ($tree_data >= 510 and $tree_data <= 1021) {
$level = 8;
}
if ($tree_data >= 1022 and $tree_data <= 2045) {
$level = 9;
}
if ($tree_data >= 2046 and $tree_data <= 4093) {
$level = 10;
}
echo "tree_data:".$tree_data."<br>";
echo "level:".$level."<br>";
$sql = " update g5_write_plan_a set wr_9 = ".$level." where wr_id = ".$val['wr_id'];
sql_query($sql);
}
$end = microtime(true);
$time = $end - $start;
echo number_format($time, 8) . "<br>";
!-->