나는 PHP에서 다소 새로운 것이며 중첩 배열로 json 객체를 업로드하고 데이터베이스에 업로드하는 가장 효율적인 방법을 찾고있었습니다. 내 json 객체는 다음과 같습니다.
"FINAL_entries": [
{
"serverIPAddresss": "116.202.80.27",
"waitTimings": 85.62899999570101,
"startedDateTimee": "2020-12-27T15:39:45.340Z",
"response": {
"StatusResult": 200,
"StatusTextResult": "",
"header": [
{
"name": "content-type",
"value": "text/html;charset=UTF-8"
},
{
"name": "cache-control",
"value": "public, max-age=160.000, stale-if-error=172800"
},
{
"name": "expires",
"value": "Sun, 27 Dec 2020 15:42:02 GMT"
},
{
"name": "age",
"value": "21"
}
]
},
"request": {
"methods": "GET",
"url": "www.sport-fm.gr",
"header": []
}
},
{
"serverIPAddresss": "116.202.80.27",
"waitTimings": 69.66299999350682,
"startedDateTimee": "2020-12-27T15:39:34.308Z",
"response": {
"StatusResult": 200,
"StatusTextResult": "",
"header": [
{
"name": "content-type",
"value": "text/html;charset=UTF-8"
},
{
"name": "cache-control",
"value": "public, max-age=160.000, stale-if-error=172800"
},
{
"name": "expires",
"value": "Sun, 27 Dec 2020 15:39:18 GMT"
},
{
"name": "age",
"value": "174"
}
]
},
"request": {
"methods": "GET",
"url": "www.sport-fm.gr",
"header": []
}
},
{
"serverIPAddresss": "116.202.80.27",
"waitTimings": 68.22399999810942,
"startedDateTimee": "2020-12-27T15:39:30.411Z",
"response": {
"StatusResult": 200,
"StatusTextResult": "",
"header": [
{
"name": "content-type",
"value": "text/html;charset=UTF-8"
},
{
"name": "cache-control",
"value": "public, max-age=120.000, stale-if-error=172800"
},
{
"name": "expires",
"value": "Sun, 27 Dec 2020 15:39:47 GMT"
},
{
"name": "age",
"value": "100"
}
]
},
"request": {
"methods": "GET",
"url": "www.sport-fm.gr",
"header": []
}
},
{
"serverIPAddresss": "116.202.80.27",
"waitTimings": 95.72899999656156,
"startedDateTimee": "2020-12-27T15:39:21.846Z",
"response": {
"StatusResult": 200,
"StatusTextResult": "",
"header": [
{
"name": "content-type",
"value": "text/html;charset=UTF-8"
},
{
"name": "cache-control",
"value": "public, max-age=160.000, stale-if-error=172800"
},
{
"name": "expires",
"value": "Sun, 27 Dec 2020 15:41:28 GMT"
},
{
"name": "age",
"value": "31"
}
]
},
"request": {
"methods": "GET",
"url": "www.sport-fm.gr",
"header": []
}
},
{
"serverIPAddresss": "",
"waitTimings": 0,
"startedDateTimee": "2020-12-27T15:39:21.824Z",
"response": {
"StatusResult": 0,
"StatusTextResult": "",
"header": []
},
"request": {
"methods": "POST",
"url": "prod-sb-appanalytics-us1.servicebus.windows.net",
"header": [
{
"name": "Content-Type",
"value": "application/atom+xml;type=entry;charset=UTF-8"
}
]
}
}
객체를 구문 분석하는 내 코드는 다음과 같습니다.
<?php
session_start();
function alertBox($message) {
echo "<script>alert('$message');</script>";
}
include 'debug.php';
if($_SERVER['REQUEST_METHOD'] === 'POST'){
$harfile = $_POST["arapis"];
$array = json_decode($harfile, true);
$client_id = $_SESSION['client_id'];
$IP = $_POST["arap"];
$array_ip = json_decode($IP,true);
//IP address analyze
$IP_address = $array_ip[0];
$IP_latitude= $array_ip[1];
$IP_longitude= $array_ip[2];
$IP_ISP= $array_ip[3];
//date, time and day
$my_date = date("Y-m-d H:i:s");
$day = date('l',strtotime($my_date));
//harfiles insert
$result = "INSERT INTO harfiles(user_id, IP, ISP, latitude,longitude,dates_times,day) VALUES ('$client_id', '$IP_address','$IP_ISP','$IP_latitude','$IP_longitude','$my_date','$day')";
mysqli_query($db,$result);
//Get har_id
$har_id = mysqli_query($db,"SELECT har_id FROM harfiles ORDER BY har_id DESC LIMIT 1");
$har_id = mysqli_fetch_assoc($har_id);
$har_id = $har_id['har_id'];
if(isset($array['FINAL_entries'])){
foreach($array['FINAL_entries'] as $data){
if(isset($data['serverIPAddresss'])){
$entries_serverIP = $data['serverIPAddresss'];
}
if(isset($data['waitTimings'])){
$waitTimings = $data['waitTimings'];
}
if(isset($data['startedDateTimee'])){
$startedDateTime = $data['startedDateTimee'];
}
if(isset($data['response']['StatusResult'])){
$StatusResult = $data['response']['StatusResult'];
}
if(isset($data['response']['StatusTextResult'])){
$StatusTextResult = $data['response']['StatusTextResult'];
}
if(isset($data['response']['header'])){
foreach($data['response']['header'] as $data => $value){
if($value['name'] == "content-type" || $value['name'] == "Content-Type") {
$response_value_content_type = $value['value'];
}
if($value['name'] == "cache-control" || $value['name'] == "Cache-Control"){
$response_value_cache_control = $value['value'];
}
if($value['name'] == "pragma" || $value['name'] == "Pragma"){
$response_value_pragma = $value['value'];
}
if($value['name'] == "expires" || $value['name'] == "Expires"){
$response_value_expires = $value['value'];
}
if($value['name'] == "age" || $value['name'] == "Age" ){
$response_value_age = $value['value'];
}
if($value['name'] == "last-modified" || $value['name'] == "Last-Modified"){
$response_value_last_modified = $value['value'];
}
}
}
if(isset($data['request']['methods'])){
$request_method = $data['request']['methods'];
}
if(isset($data['request']['url'])){
$request_urls = $data['request']['url'];
}
if(isset($data['request']['header'])){
foreach($data['request']['header'] as $data => $value){
if($value['name'] == "content-type" || $value['name'] == "Content-Type"){
$request_value_content_type = $value['value'];
}
if($value['name'] == "cache-control" || $value['name'] == "Cache-Control"){
$request_value_cache_control = $value['value'];
}
if($value['name'] == "pragma" || $value['name'] == "Pragma"){
$request_value_pragma = $value['value'];
}
if($value['name'] == "host" || $value['name'] == "Host"){
$request_value_host = $value['value'];
}
}
}
if(isset($entries_serverIP) != true){
$entries_serverIP = "null";
}
if(isset($waitTimings ) != true){
$waitTimings = "null";
}
if(isset($startedDateTime) != true){
$startedDateTime = "null";
}
if(isset($StatusResult) != true){
$StatusResult = "null";
}
if(isset($StatusTextResult) != true){
$StatusTextResult= "null";
}
if(isset($request_method) != true){
$request_method = "null";
}
if(isset($request_urls) != true){
$request_urls = "null";
}
if(isset($request_value_content_type ) != true){
$request_value_content_type = "null";
}
if(isset($request_value_cache_control ) != true){
$request_value_cache_control = "null";
}
if(isset($request_value_pragma ) != true){
$request_value_pragma = "null";
}
if(isset($request_value_host ) != true){
$request_value_host = "null";
}
if(isset($response_value_content_type) != true){
$response_value_content_type = "null";
}
if(isset($response_value_cache_control ) != true){
$response_value_cache_control = "null";
}
if(isset($response_value_pragma ) != true){
$response_value_pragma = "null";
}
if(isset($response_value_expires ) != true){
$response_value_expires = "null";
}
if(isset($response_value_age ) != true){
$response_value_age = "null";
}
if(isset($response_value_last_modified) != true){
$response_value_last_modified = "null";
}
//mysqli_stmt_execute($stmt);
mysqli_query($db,"INSERT INTO hardata(har_id, entries_serverIPaddress, entries_startedDate, entries_timings, user_id, request_method, request_urls, Rq_Content_Type, Rq_Cache_Control, Rq_Pragma, Rq_Host, response_Status, response_Status_Text, Rs_Content_Type, Rs_Cache_Control, Rs_Pragma, Rs_Expires, Rs_Age, Rs_Last_Modified) VALUES('$har_id', '$entries_serverIP', '$startedDateTime', '$waitTimings', '$client_id', '$request_method', '$request_urls', '$request_value_content_type', '$request_value_cache_control', '$request_value_pragma', '$request_value_host', '$StatusResult', '$StatusTextResult', '$response_value_content_type', '$response_value_cache_control', '$response_value_pragma', '$response_value_expires','$response_value_age', '$response_value_last_modified')");
}
}
alertBox("Insertion done");
//header("Location:index.php");
}
?>
이 코드의 문제점은 값이 정의되면 값이 없어도 정의 된 상태로 남아 있다는 것입니다. 예를 들어, 내 json 객체에서 마지막 응답 헤더는 비어 있지만 $ response_value_content_type과 같은 응답 헤더의 값은 이전 값을 유지합니다. 그 코드의 또 다른 문제는 내 생각에 삽입이 너무 느리다고 생각합니다. 의견을 주시기 바랍니다. 미리 감사드립니다!
겸손한 생각으로는 두 가지를 바꿔야합니다
이 문제를 해결하려면 다음과 같이 조건 정의에 다른 항목을 추가해야합니다.
// old version
if (isset($data['serverIPAddresss'])){
$entries_serverIP = $data['serverIPAddresss'];
}
// new version
if (isset($data['serverIPAddresss'])){
$entries_serverIP = $data['serverIPAddresss'];
} else {
$entries_serverIP = null;
}
그런 다음이 조건을 제거하십시오.
if (isset($entries_serverIP) != true){
$entries_serverIP = "null";
}
당신은 메이크업에 의해 모두 삽입 한 다음 바로이 일에 시간을 절약 할 수 있고 그 DB에서 여러 행을 추가하는 올바른 방법이다, 한 번 실행이 예에서 보면 그 하나 개의 쿼리이 문제를 해결할 수
의 insted를
INSERT INTO table(c1,c2,...)
VALUES
(v11,v12,...);
과
INSERT INTO table(c1,c2,...)
VALUES
(v21,v22,...);
그리고 ...
이 쿼리를 시도
INSERT INTO table(c1,c2,...)
VALUES
(v11,v12,...),
(v21,v22,...),
...
(vnn,vn2,...);
대신 :
if ($value['name'] == "content-type" || $value['name'] == "Content-Type") {
$response_value_content_type = $value['value'];
}
// and
if (isset($response_value_content_type) != true){
$response_value_content_type = "null";
}
그냥 해
if ($value['name'] == "content-type" || $value['name'] == "Content-Type") {
$response_value_content_type = $value['value'];
} else {
$response_value_content_type = "null";
}
그리고 이것 대신
if(isset($data['request']['header'])){
foreach($data['request']['header'] as $data => $value){
if($value['name'] == "content-type" || $value['name'] == "Content-Type"){
$request_value_content_type = $value['value'];
}
if($value['name'] == "cache-control" || $value['name'] == "Cache-Control"){
$request_value_cache_control = $value['value'];
}
if($value['name'] == "pragma" || $value['name'] == "Pragma"){
$request_value_pragma = $value['value'];
}
if($value['name'] == "host" || $value['name'] == "Host"){
$request_value_host = $value['value'];
}
}
}
이 작업을 수행
if(isset($data['request']['header'])){
if (empty($data['request']['header'])) {
$request_value_content_type = null;
$request_value_cache_control = null;
$request_value_pragma = null;
$request_value_host = null;
} else {
foreach($data['request']['header'] as $data => $value){
if($value['name'] == "content-type" || $value['name'] == "Content-Type"){
$request_value_content_type = $value['value'];
}
if($value['name'] == "cache-control" || $value['name'] == "Cache-Control"){
$request_value_cache_control = $value['value'];
}
if($value['name'] == "pragma" || $value['name'] == "Pragma"){
$request_value_pragma = $value['value'];
}
if($value['name'] == "host" || $value['name'] == "Host"){
$request_value_host = $value['value'];
}
}
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다