@midarovrk

Почему на одном сервере php скрипт работает, а на другом нет?

Привет всем.

Вот уже 4 часа голову ломаю и никак не могу найти причину.
Есть у меня PHP скрипт вытягивания инфы из API

<?php 
if(preg_match('/^[0-9]*$/',$_GET['id'])!=true) exit('Ошибка');
header("Access-Control-Allow-Origin: ссылка");

	$data=json_decode(file_get_contents('ссылка='.$_GET['id']),true);
	//print_r($data);
	$name=$data['nameRU'];
    $nameEN=$data['nameEN'];
	$growth=$data['growth'];
	$birthday=$data['birthday'];
    $age=$data['age'];
	$birthplace=$data['birthplace'];
	$profession=$data['profession'];
	$photo=$data['posterURL'];
	$photo='ссылка_'.$data['peopleID'].'.jpg';

	$count=0;
	for($i=0;$i<count($data['filmography']);$i++) {
		if(count($data['filmography'][$i])>1) {
			for($j=0;$j<count($data['filmography'][$i]);$j++) $count++;
		}
		else $count++;
	}

	$array['name']=(isset($name) AND $name!='') ? $name : '-';
    $array['nameEN']=(isset($nameEN) AND $nameEN!='') ? $nameEN : '-';
	$array['growth']=(isset($growth) AND $growth!='') ? $growth : '-';
	$array['birthday']=(isset($birthday) AND $birthday!='') ? $birthday : '-';
	$array['age']=(isset($age) AND $age!='') ? $age : '-';
    $array['birthplace']=(isset($birthplace) AND $birthplace!='') ? $birthplace : '-';
	$array['profession']=(isset($profession) AND $profession!='') ? $profession : '-';
	$array['photo']=(isset($photo) AND $photo!='') ? $photo : '-';
	$array['films']=(isset($count) AND $count !='') ? $count : '-';

    if($array['name']=='NaN')
    echo json_encode(Array('error'=>'Данные не найдены :('));
	else {
		$data=json_encode($array);
 
		echo $data;
}
?>

Так вот, на пробном сервере хостинга timeweb.ru (не знаю что за панель упавления) всё работает как надо.
А на моём сервере VPS (ISPmanager 4.4 Lite панель) от thehost.ua срабатывает не всегда.
А не срабатывает он в тех случаях, когда в API вообще нет к примеру ['birthday'] или ['age'] и т.д.
Так вот первый серв он ставит прочерки так как и прописано в скрипте.
А второй сервер (ISPmanager 4.4 Lite панель) вообще не выдаёт ничего, т.е. не срабатывает вообще. Из за чего такое может происходить? Я думаю из за панели управления чтоли?
  • Вопрос задан
  • 482 просмотра
Решения вопроса 1
vyshkant
@vyshkant
developer
Вероятно на разных серверах по-разному настроен error_reporting. К счастью, его можно задать не только через конфигурацию сервера, но и в ходе выполнения скрипта.

А вообще, приведённый фрагмент кода выглядит как жутчайший костыль. Я бы советовал вам использовать функцию array_key_exists для проверки наличия соответствующего ключа в массиве $data. Что-то вроде:

$array['birthplace'] = array_key_exists('birthplace', $data) ? $data['birthplace'] : '-';


Таким образом вы гарантированно будете обращаться к элементу массива только в случае, если такой ключ в нём существует.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Смотрите лог ошибок php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы