테스트 사이트 - 개발 중인 베타 버전입니다

정상 작동 하다가 PHP7.4로 업데이트 하면서 발생되는 문제 채택완료

요고꽁 1년 전 조회 1,907

</p>

<p><?

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']);

    }

}</p>

<p>

$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";</p>

<p>          </p>

<p>$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."
";

     echo "level:".$level."
";

    $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) . "
";

 

wr_id 기준으로

wr_6필드에 추천처럼 wr_id 값을 가지고 있고 그 wr_id값을 wr_6필드에 또 지정된걸

반복해서 수를 파악하고 레벨을 뿌려주는 소스입니다.

g5_member 테이블에서 추천코드 mb_recommend 랑 비슷하다고 보시면되요

내 추천자가 그 추천자 또 그 추천자 이런식으로 무한반복 수를 뽑아 내는것입니다

 

근데 문제는 이제 잘 되다가

단독서버인데 php7.4.13 으로 재 설치를 하고 나서

에러도 안나오고 ㅠ 정상실행은 되는데 계속 $tree_data 값이 0으로 나옵니다.

데이터는 모두 정상으로 들어가 있습니다. ㅠㅠ

처음부터 안됬음 이해되는데 잘 되던게 php 재설치 후 안되네요 ㅠ

 

고수님들 한번 봐주세요!~

부탁드립니다.

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

R
1년 전

</p>

<p><?

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']);

    }

}</p>

<p>$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."
";

     echo "level:".$level."
";

    $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) . "
";

 </p>

<p>

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

요고꽁
1년 전
'' 따옴표 빼신거 같은데 그거 문제는 아닌걸로 나옵니다. ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

1년 전

안녕하세요.

 

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;
}
 

 

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

요고꽁
1년 전
1번 찍어보니 에러는 안납니다. ㅠ

2번 주신대로 한번 해보니 여기서는 아래와 같이 에러 나네요
Fatal error: Uncaught ArgumentCountError: Too few arguments to function findUser(), 1 passed in level_up.php on line 53 and exactly 2 expected in level_up.php:9 Stack trace: #0 level_up.php(53): findUser('1') #1 {main} thrown in level_up.php on line 9

라인9 >> function findUser($wr_id, $tree_data) 이부분입니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인