PHP
다중 요청에 대한 처리(?) 고수님들 도와주세요 ㅠㅠ

안녕하세요 고수님들

현재 요청을 받아 다음 보기 소스와 같은 API 요청 처리 파일을 하나 작성했습니다.
1개 요청이 들어오는 경우 요청에 대한 정상 처리가 이루어지지만 동시에 여러 개의 요청이 들어오는 경우 처리를 못하는 문제가 발생하였는데 아무래도 비동기 처리 방식이 아니여서 그런거 같습니다. 하지만 아무리   고민을 해도 제가 가지고 있는 지식으로는 해결을 못해서 이렇게 질문을 올립니다. ㅠㅠ 고수님들 어떻게 소스를 수정해야 할까요? 도와주시면 정말 많은 공부가 될거라고 믿습니다.(꾸벅 꾸벅)

-문제 사항
 해당 페이지로 동시에 여러 개의 요청 시 요청에 대한 누락이 발생함
 ex : 2개 요청 시 1개 처리
 ex : 6개 요청 시 3개 처리
 ex : 18개 요청 시 6개 처리

<?php
    $ip=$_GET["ip"];

    $url ="https://api.meraki.com/api/v0/networks/xxxxxxxxxxxxxx/switch/accessControlLists";
    
    $header = array(
         "Content-Type:application/json",
         "Accept:application/json",
         "X-Cisco-Meraki-API-Key:xxxxxxxxxxxxxxxx"
    );
    
    $ch = curl_init(); //curl 로딩
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    
    $res = curl_exec ($ch); 
    curl_close($ch);
    
    $ACL_list = json_decode($res,TRUE); //

    foreach ( $ACL_list['rules'] as $key=>$value ) {
        if ( $value['policy']=='allow')unset($ACL_list['rules'][$key]);//오류 방지를 위해 삭제
        if ( $value['srcCidr']=="$ip/32") $policy = $ACL_list["rules"][$key];//중복 검사
    }
    
   
   if(isset($policy)){
        echo "fail";
   }else{
        echo "succeed";
        
        $ip_add =array(
        "comment"=>"policy",
        "policy" => "deny",
        "ipVersion"=> "ipv4",
        "protocol"=> "tcp",
        "srcCidr"=> "$ip",
        "srcPort"=> "any",
        "dstCidr"=> "any",
        "dstPort"=> "any",
        "vlan"=> "any"
        );

        array_unshift($ACL_list["rules"],$ip_add);
    
        $data_json = json_encode($ACL_list);// json 형태로 변환
        print_r($data_json);
        $ch1 = curl_init();

        curl_setopt($ch1, CURLOPT_URL, $url); 
        curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false); 
        curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch1, CURLOPT_CUSTOMREQUEST, "PUT"); 
        curl_setopt($ch1, CURLOPT_HEADER, 0);
        curl_setopt($ch1, CURLOPT_HTTPHEADER, $header); 
        curl_setopt($ch1, CURLOPT_POSTFIELDS, $data_json); 
        curl_setopt ($ch1, CURLOPT_RETURNTRANSFER, 1);
        $res=curl_exec($ch1);
        
        
        curl_close($ch1);
    };
?>

 

댓글 1