Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,913

HOME > PHP > PHP Forum > สอบถามเรื่อง ข้อมูล JSONจาก url กับการใช้ file_get_contents



 

สอบถามเรื่อง ข้อมูล JSONจาก url กับการใช้ file_get_contents

 



Topic : 134428



โพสกระทู้ ( 11 )
บทความ ( 0 )



สถานะออฟไลน์




ผมมีลิงค์ข้อมูล json แล้วผมก็ใช้ file_get_contents("link") มา แต่พอนำไป decode
มันฟ้องว่า Input is not an array
(ข้อมูล json ในลิงค์ >>>

[{"AC_AC_FUB":{"line":"AC_AC_FUB","PROCESS":"AC. MODEL CHANGE L\/M","START":"10:42:17","LOSS":"10"}}]

)

Code (PHP)
<?php
// Define recursive function to extract nested values
function printValues($arr) {
    global $count;
    global $values;
    
    // Check input is an array
    if(!is_array($arr)){
        die("ERROR: Input is not an array");
    }
    
    /*
    Loop through array, if value is itself an array recursively call the
    function else add the value found to the output items array,
    and increment counter by 1 for each value found
    */
    foreach($arr as $key=>$value){
        if(is_array($value)){
            printValues($value);
        } else{
            $values[] = $value;
            $count++;
        }
    }
    
    // Return total count and values found in array
    return array('total' => $count, 'values' => $values);
}
 

 $jsont = file_get_contents("http://43.72.52.84/monitor/mc_status/downtime_layout.php?business=AC");


// Decode JSON data into PHP associative array format
$arr = json_decode($jsont,true);

// Call the function and print all the values
$result = printValues($arr);
echo "<h3>" . $result["total"] . " value(s) found: </h3>";
echo implode("<br>", $result["values"]);
 
echo "<hr>";
 
// Print a single value
echo $arr["AC_AC_FUM"]["line"] . "<br>";  
echo $arr["AC_AC_FUM"]["PROCESS"] . "<br>";  
echo $arr["AC_AC_FUM"]["START"] . "<br>";  
?>                                		




Tag : PHP, HTML, JavaScript, Ajax, jQuery









ประวัติการแก้ไข
2019-10-29 11:19:20
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-10-29 11:18:30 By : peemmer View : 55 Reply : 3
 

 

No. 1



โพสกระทู้ ( 7,977 )
บทความ ( 2 )



สถานะออฟไลน์


Code (PHP)
$arr = json_decode($jsont,true);
echo '<pre>'.print_r($arr,true).'</pre>'; // check ด้วยตาดูก่อนว่าข้อมูลเป็นอะไร







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-29 11:26:11 By : Chaidhanan
 


 

No. 2



โพสกระทู้ ( 11 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2019-10-29 11:26:11
รายละเอียดของการตอบ ::
ข้อมูลเป็นอ๊อบเจ็ค ต้องทำเป็น array ผมเข้าใจถูกใช่ไหมครับ แล้วใช้วิธีไหนทำเป็น array ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-29 13:17:12 By : peemmer
 

 

No. 3



โพสกระทู้ ( 3,539 )
บทความ ( 8 )



สถานะออฟไลน์


มันมี error ที่ถูกซ่อนอยู่มันจึงไม่เห็นว่าอะไรผิด นี่คือผลของการเขียนโค้ดโดยที่ปิดแสดง error.
https://rundiz.com/?p=171


ผมลองเอาโค้ดไปรันดู พบว่ามี error warning นี้
Quote:
Warning: file_get_contents(http://43.72.52.84/monitor/mc_status/downtime_layout.php?business=AC): failed to open stream: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

ง่ายๆคือมันเรียกจนหมดเวลา หาลิ้งค์ไม่เจอนั่นเอง.

เมื่อเปลี่ยน $jsont จาก file_get_contents() มาเป็น json string ตรงๆเลยเพื่อทดสอบ
Code (PHP)
$jsont = '[{"AC_AC_FUB":{"line":"AC_AC_FUB","PROCESS":"AC. MODEL CHANGE L\/M","START":"10:42:17","LOSS":"10"}}]';


ก็พบว่ามีปัญหา Undefined index: AC_AC_FUM คือตัว array key AC_AC_FUM มันไม่มีนั่นเอง แก้โดยเอา isset หรือ array_key_exists ทำเงื่อนไขครอบไว้
ส่วนกรณี file_get_contents() ไม่เจอหรือไม่ได้ผลลัพธ์ ก่อนเอามา json_decode ก็ควรตรวจซะก่อน
Code (PHP)
$jsont = file_get_contents("http://43.72.52.84/monitor/mc_status/downtime_layout.php?business=AC");
//$jsont = '[{"AC_AC_FUB":{"line":"AC_AC_FUB","PROCESS":"AC. MODEL CHANGE L\/M","START":"10:42:17","LOSS":"10"}}]';

if (empty($jsont)) {
    echo 'Cannot get target JSON.<br>';
} else {
    // Decode JSON data into PHP associative array format
    $arr = json_decode($jsont,true);

    // Call the function and print all the values
    $result = printValues($arr);
    echo "<h3>" . $result["total"] . " value(s) found: </h3>";
    echo implode("<br>", $result["values"]);
     
    echo "<hr>";
     
    // Print a single value
    echo $arr["AC_AC_FUM"]["line"] . "<br>";  
    echo $arr["AC_AC_FUM"]["PROCESS"] . "<br>";  
    echo $arr["AC_AC_FUM"]["START"] . "<br>";  
}

และการป้องกัน timeout error แนะนำให้ใช้ curl จะดีกว่า

ตัวอย่างการใช้ curl ไปปรับตัวเลขและค่าต่างๆเอานะครับ
Code (PHP)
<?php


$testUrl = 'http://43.72.52.84/monitor/mc_status/downtime_layout.php?business=AC';


$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $testUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// localhost, development only.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);// localhost, development only.

$output = curl_exec($ch);
if ($output === false) {
    // if curl error.
    $curlError = curl_error($ch);
    $curlErrorNo = curl_errno($ch);
}

curl_close($ch);


echo 'curl result:<br>' . PHP_EOL;
var_dump($output);

if (isset($curlError)) {
    echo 'Error:<br>' . PHP_EOL;
    var_dump($curlError);
    echo 'Error code:<br>' . PHP_EOL;
    var_dump($curlErrorNo);
}



ประวัติการแก้ไข
2019-10-30 07:14:22
2019-10-30 07:15:03
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-30 06:37:02 By : mr.v
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามเรื่อง ข้อมูล JSONจาก url กับการใช้ file_get_contents
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่