首页 > 解决方案 > PHP cURL 例程返回警告消息

问题描述

当我点击一个按钮,编程为从 Protected Planet 的 API 接收数据时,我收到一个似乎无法解决的错误。我已经看到isset()了解决方案,但不知道它们是否适用于我的情况,因为我已经在他们从数据库请求密码/登录请求的设置中看到了它的建议。

我收到此错误:

<br />
<b>Warning</b>:  Trying to access array offset on value of type null in <b>C:\xampp\htdocs\project1\libs\php\getProtectedPlanet.php</b> on line <b>25</b><br />
{"status":{"code":"200","name":"ok","description":"success","returnedIn":"101 ms"},"output":null}

Url 正在返回预期的结果。

<?php

    ini_set('display_errors', 'On');
    error_reporting(E_ALL);

    $executionStartTime = microtime(true);

    $url='http://api.protectedplanet.net/v3/countries/' . $_REQUEST['iso'] . '?token=[REDACTED API TOKEN]';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL,$url);

    $result=curl_exec($ch);

    curl_close($ch);

    $decode = json_decode($result,true);    

    $output['status']['code'] = "200";
    $output['status']['name'] = "ok";
    $output['status']['description'] = "success";
    $output['status']['returnedIn'] = intval((microtime(true) - $executionStartTime) * 1000) . " ms";
    $output['output'] = $decode["statistics"];
    
    header('Content-Type: application/json; charset=UTF-8');

    echo json_encode($output); 

?>

示例返回 json:

{"country":{
    "name":"Canada",
    "iso_3":"CAN",
    "id":"CAN",
    "geojson":{
        "type":"Feature",
        "properties":{
            "fill-opacity":0.7,
            "stroke-width":0.05,
            "stroke":"#40541b",
            "fill":"#83ad35",
            "marker-color":"#2B3146"
        },
        "geometry":{
            "type":"Polygon",
            "coordinates":[
                [[-141.006,41.669],[-141.006,83.117],[-52.617,83.117],[-52.617,41.669],[-141.006,41.669]]
            ]
        }
    },
    "statistics":{
        "pa_land_area":1185787.371,
        "pa_marine_area":504723.3908,
        "land_area":9955032.941,
        "percentage_pa_land_cover":11.91143608,
        "percentage_pa_marine_cover":8.857775688,
        "marine_area":5698082.708,
        "polygons_count":9110,
        "points_count":20},
        "pame_statistics":{
            "assessments":74,
            "assessed_pas":60,
            "pame_pa_land_area":307619.9491,
            "pame_percentage_pa_land_cover":3.090094805,
            "pame_pa_marine_area":6980.110537,
            "pame_percentage_pa_marine_cover":0.122499287
        },
        "region":{
            "name":"North America","iso":"NA"
        },
        "pas_count":9130,
        "pas_national_count":7958,
        "pas_regional_count":0,
        "pas_international_count":64,
        "pas_with_iucn_category_count":9130,
        "pas_with_iucn_category_percentage":100.0,
        "links": ...data truncated

主要是我想访问"statistics"密钥。

ajax 调用开始:

var getProtectedPlanetAPI = function() {
    console.log("Button clicked");
    console.log(isoa3);

    $.ajax({
        url: "libs/php/getProtectedPlanet.php",
        type: 'POST',
        dataType: 'json',
        data: {
            iso: isoa3
        },
        success: function(result) {...

正确的 iso 记录到控制台

标签: phpajaxcurl

解决方案


你需要改变

$output['output'] = $decode["statistics"];

$output['output'] = $decode['country']['statistics'];

根据返回的json。


推荐阅读