2015-01-06 3 views
1

Проблема, с которой я сталкиваюсь, немного странная, но я объясню, насколько смогу.Отправка JSON через python внешнему слушателю PHP

В настоящее время я запускаю ряд сценариев, которые создают файл JSON, в котором хранятся сведения о серверной комнате. Этот JSON-файл затем передается в PHP-прослушиватель, который заполняет базу данных, анализируя JSON и извлекая информацию.

The JSON сообщений в штрафе базы данных при использовании Mozilla добавить на «Плакат», однако всякий раз, когда я запускаю это из моей виртуальной машины и попытаться автоматизировать его, я получаю эту ошибку -

Фатальная ошибка: только переменные могут передаваться по ссылке

Я также получаю кучу этих ошибок

Illegal строка смещение 'аббревиатурой' в C: \ XAMPP \ HTDOCS \ globalHEC \ php_http_request \ hecdashboard.php на линии

Передающий метод питон:

def send_json_results(result_dict, server_ip, server_port): 
'''Send the json file usinf http to the listening monitoring server''' 
    url="http://%s:%s/globalHEC/php_http_request/hecdashboard.php?id=ni100&type=json" %(server_ip, server_port) 
    data=json.dumps(result_dict) 
    req = urllib2.Request(url, data, {'Content-Type': 'application/json'}) 
    f = urllib2.urlopen(req) 
    resp = f.read() 
    print "Results sent to %s with response: %s" % (server_ip, resp) 

Сегмент PHP кода слушателя:

$locres = $mysqli->query("SELECT loc1.Id FROM `location` AS loc1 WHERE loc1.Timestamp = (SELECT MAX(loc2.Timestamp) FROM location AS loc2 WHERE loc2.Id = loc1.Id LIMIT 1) AND 
        loc1.Id = '".$jsonArray_new["acronym"]."' AND 
        loc1.Continent= '".$jsonArray_new["continent"]."' AND 
        loc1.Country = '".$jsonArray_new["country"]."' AND 
        loc1.City = '".$jsonArray_new["city"]."' AND 
        loc1.Latitude = '".$jsonArray_new["latitude"]."' AND 
        loc1.Longitude = '".$jsonArray_new["longitude"]."' AND 
        loc1.CellVersion = '".$jsonArray_new["cell_version"]."' AND 
        loc1.NumberOfCells = '".$jsonArray_new["number_of_cells"]."' LIMIT 1;"); 

//any changes or fresh Location, so add it 
if ($locres->num_rows == 0) { 
if ($stmt = $mysqli->prepare('INSERT INTO location (Id, Continent, Country, City, Latitude, Longitude, CellVersion, NumberOfCells, Timestamp) VALUES (?,?,?,?,?,?,?,?,?)')) { 
$res = $stmt->bind_param("ssssddsis", $jsonArray_new['acronym'], $jsonArray_new['continent'], $jsonArray_new['country'], $jsonArray_new['city'], $jsonArray_new['latitude'], $jsonArray_new['longitude'], $jsonArray_new['cell_version'], $jsonArray_new['number_of_cells'], $jsonArray_new['timestamp']); 
     $finishings += (int)$stmt->execute(); 
     $finishingQuota++; 
     } 
} 

jsonArray_new инициализируется следующим образом:

$file_content = file_get_contents('php://input'); 
echo "try to create file: ".$folder.$location.".json"; 
$numbytes = file_put_contents($folder.$location.".json", $file_content) OR EXIT("ERROR: Creation of ".$location.".json was not possible."); 
print "$numbytes bytes written\n"; 
//} 
$jsonString_new = $file_content; 

$jsonArray_new = json_decode($jsonString_new, true); 
+2

Обе ошибки являются ** ошибками PHP **. Вы также должны показать нам код PHP. Код Python выглядит вполне нормальным. –

+0

http://pastebin.com/cbA9NPhF - ссылка Pastebin сегмента PHP-кода, которая, по-видимому, вызывает ошибку. – McCourt2364

+0

Измените свой вопрос, чтобы добавить это, не помещайте его в комментарии. –

ответ

1

Вам может понадобиться, чтобы проверить, ваш json создан правильно. После json_decode вызова, результирующий массив может состоять из вложенных массивов как

$jsonArray_new = array (
    array(
     'your JSON data here as key=>value pairs' 
    ), 
); 

следовательно запрещая вам получить массив значений по ключу.

Перед использованием декодированных данных я бы рекомендовал простой empty() проверить, что декодирование может завершиться неудачно, и $jsonArray_new может иметь false в качестве значения.

Сторона Замечание: ваш код требует рефакторинга. Слишком много потенциальных точек отказа.

+0

Привет @ s3nt1nel, я узнал свою ошибку.PHP-код был прав, но код python вызывал ошибку. Он отправил уже объект parse json и возникла ошибка, что я подумал, что это строка, поэтому я пытался обработать json-объект уже json. Если это имеет смысл! – McCourt2364

Смежные вопросы