Ваша проблема в том, что даже в случае сбоя поиска веб-сайт возвращает действительный JSON, поэтому вызов json_decode
возвращает объект (который в логическом контексте является правдивым), что приводит к выполнению кода в вашем if
заявление, давая вам ошибку, которую вы видите.Спасибо @Tgr за предоставление API-ссылки , которая указывает, как выглядят возвращаемые данные, когда страница отсутствует, этот код должен делать то, что вы хотите:
if (@$_GET['search']) {
$url = "https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&titles=".ucwords($_GET['search'])."&redirects=true";
$url = str_replace(' ', '%20', $url);
$data = json_decode(file_get_contents($url));
$found_data = false;
foreach ($data->query->pages as $page) {
if (property_exists($page, 'missing')) continue;
$found_data = true;
$content = $page->extract;
echo $content;
}
if (!$found_data) {
echo "No data for {$_GET['search']} found!";
}
}