Ich fand heraus, dass der richtige Weg, um JSON-Daten direkt in PHP (über file_get_contents('php://input')
) zu behandeln, sicherstellen, dass die Anfrage den richtigen Inhaltstyp, d. H. Content-type: application/json
in der HTTP-Anfrage-Header.
In meinem Fall bin ich Ihr Interesse an Seiten von php curl mit mit diesem Code:
function curl_post($url, array $post = NULL, array $options = array()) {
$defaults = array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => $url,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FORBID_REUSE => 1,
CURLOPT_TIMEOUT => 600
);
if(!is_null($post))
$defaults['CURLOPT_POSTFIELDS'] = http_build_query($post);
$ch = curl_init();
curl_setopt_array($ch, ($options + $defaults));
if(($result = curl_exec($ch)) === false) {
throw new Exception(curl_error($ch) . "\n $url");
}
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) {
throw new Exception("Curl error: ".
curl_getinfo($ch, CURLINFO_HTTP_CODE) ."\n".$result . "\n");
}
curl_close($ch);
return $result;
}
$curl_result = curl_post(URL, NULL,
array(CURLOPT_HTTPHEADER => array('Content-Type: application/json'),
CURLOPT_POSTFIELDS => json_encode($out))
);
die CURLOPT_HTTPHEADER => array('Content-Type: application/json')
Teil beachten Sie.
Auf der Empfangsseite verwende ich den folgenden Code:
$rawData = file_get_contents('php://input');
$postedJson = json_decode($rawData,true);
if(json_last_error() != JSON_ERROR_NONE) {
error_log('Last JSON error: '. json_last_error().
json_last_error_msg() . PHP_EOL. PHP_EOL,0);
}
nicht die max_input_vars
Variable ändern Sie. Seit die Anfrage geändert wurde, um richtige Header zu setzen, ging mein Problem mit max_input_vars
weg. Offenbar bewertet PHP die Post-Variablen nicht mit bestimmten Content-type
gesetzt ist.
Warum nicht 'max_input_vars' ändern, wie die Warnung empfiehlt? –
Da mir die Idee, sie zu ändern, nicht gefällt, könnten meine geposteten JSON-Daten sehr groß sein. Ich brauche keine Hilfe von PHP, um meine Variablen zu analysieren, da ich keine Variablen sende, nur JSON-codierte Daten. –
PHP ist es egal, dass Sie JSON verwenden. Die Daten werden als Eingangsvariablen gezählt, sodass die Warnung ausgelöst wird. Welche Nachteile sehen Sie, wenn Sie die Konfigurationsoption so verwenden, wie sie beabsichtigt war? –