У меня очень странная проблема ... на моем удаленном веб-сервере для этого конкретного приложения, когда я пытаюсь получить вход JSON (любым способом), я получаю либо NULL, либо пустое ("") возвращение. Странная часть этой проблемы в том, что она отлично работает на моей локальной машине. И когда я говорю «работает нормально», это означает, что я могу сделать запрос через Postman к конечной точке API моей локальной машины, и он делает то, что должен делать. Другая странность в том, что на этом самом веб-сервере (в разных файлах, но все же на этом веб-сервере) я могу получать входные данные JSON очень хорошо.
Я пробовал разные способы отправки данных JSON на этот удаленный сервер. Я обработал необработанные данные, отправил их почтальоном, отправил из приложения webhooks в Zapier и отправил из другого веб-приложения. Все эти разные приложения дали мне нулевой возврат при попытке получить данные JSON. Вот как я пытаюсь получить его:
// index.php, the API endpoint processing file
<?php
declare(strict_types=1);
require_once '../../vendor/autoload.php';
require_once '../../model/model.php';
use ShinePHP\{Crud, CrudException, EasyHttp, EasyHttpException, HandleData, HandleDataException};
try {
$data = EasyHttp::turnJsonInputIntoArray();
} catch (EasyHttpException $ehe) {
echo json_encode(['status' => 'failure', 'message' => $ehe->getMessage()]);
exit;
}
И это метод turnJsonInputIntoArray()
в классе EasyHttp:
public static function turnJsonInputIntoArray(string $urlToRetrieveFrom = 'php://input') : array {
// Check if JSON is null, if it is, throw EasyHttpException, if not, return the decoded assoc array.
if (json_decode(file_get_contents($urlToRetrieveFrom), true) === null) {
throw new EasyHttpException('No data retrieved from url: '.$urlToRetrieveFrom);
} else {
return json_decode(file_get_contents($urlToRetrieveFrom), true);
}
}
У меня var_dumped $_POST
(возвращен пустой массив), $HTTP_RAW_POST_DATA
(возвращен NULL) и file_get_contents('php://input')
(возвращена пустая строка). В журнале ошибок nginx ничего не существует, кроме пользовательского исключения, которое существует, потому что в php: // input ничего нет. Ничего не помогло, и я действительно не знаю, как еще получить мои данные JSON.
Как я могу получить данные JSON в мой PHP-скрипт, работающий на удаленном сервере?