PHP代码运行报错:尝试获取非对象的'data'属性,请求协助
解决PHP中Trying to get property 'data' of non-object及foreach无效参数问题
用户代码尝试远程获取JSON数据并解析遍历,但出现以下报错:
Notice: Trying to get property 'data' of non-object in /storage/ssd4/665/18079665/public_html/OurGrocery/TESTING_FOLDER/testing.php on line 28
Warning: Invalid argument supplied for foreach() in /storage/ssd4/665/18079665/public_html/OurGrocery/TESTING_FOLDER/testing.php on line 28
虽然手动验证JSON内容有效,但代码执行时$json并非预期对象,核心原因是远程请求失败或JSON解码失败,以下是具体排查和修复方案:
1. 排查file_get_contents远程请求是否成功
很多服务器默认禁用allow_url_fopen,或存在网络/跨域限制,导致file_get_contents无法获取远程内容,返回false。先添加请求结果检查:
$path_to_file = 'https://kamboz.000webhostapp.com/OurGrocery/OurItemsGet/all_items.php'; $file_contents = file_get_contents($path_to_file); // 检查请求是否成功 if ($file_contents === false) { die('无法获取远程文件内容,请检查allow_url_fopen设置或网络连接'); }
2. 捕获JSON解码错误
即使JSON内容有效,解码过程也可能因编码问题、特殊字符等失败,返回null。添加解码错误检查:
$json = json_decode($file_contents); // 检查JSON解码是否成功 if (json_last_error() !== JSON_ERROR_NONE) { die('JSON解码失败:' . json_last_error_msg()); }
3. 验证data属性存在且为可遍历类型
确保解码后的对象包含data属性,并且是数组或可遍历对象:
// 验证data属性存在且是数组/对象 if (isset($json->data) && is_iterable($json->data)) { foreach ($json->data as $item) { echo $item->id . '<br>'; } } else { die('JSON结构中不存在可遍历的data属性'); }
完整修复后的代码
<?php $path_to_file = 'https://kamboz.000webhostapp.com/OurGrocery/OurItemsGet/all_items.php'; $file_contents = file_get_contents($path_to_file); // 检查远程请求结果 if ($file_contents === false) { die('无法获取远程文件内容,请检查allow_url_fopen设置或网络连接'); } $json = json_decode($file_contents); // 检查JSON解码状态 if (json_last_error() !== JSON_ERROR_NONE) { die('JSON解码失败:' . json_last_error_msg()); } // 验证data属性并遍历 if (isset($json->data) && is_iterable($json->data)) { foreach ($json->data as $item) { echo $item->id . '<br>'; } } else { die('JSON结构中不存在可遍历的data属性'); } ?>
额外建议
如果服务器禁用了allow_url_fopen,可以改用cURL发起请求,兼容性更好:
$ch = curl_init($path_to_file); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $file_contents = curl_exec($ch); curl_close($ch); // 后续检查和解码逻辑同上
内容的提问来源于stack exchange,提问作者Ayush Kamboj
相关产品推荐
相关产品推荐

