Я не знаю, как это объяснить, но я попробую.
Эта проблема касается 2 серверов, локального и хостинг-сервера. На обоих серверах установлена одна и та же версия PHP 7.0 [с почти одинаковыми конфигурациями]. И 2 действия контроллера. И проблема исходит от $app->run($input, $out);
из кодов ниже.
У меня в контроллере это действие:
/**
* @Route("/testJson")
*/
public function testJsonAction() {
$app = new \Symfony\Bundle\FrameworkBundle\Console\Application($this->get("kernel"));
$app->setAutoExit(false);
$opt = array("command" =>
"doctrine:generate:entity",
"--entity" => "GuervylEditorBundle:TestOnline",
"--fields" => "kl:string");
$input = new \Symfony\Component\Console\Input\ArrayInput($opt);
$out = new \Symfony\Component\Console\Output\BufferedOutput();
$app->run($input, $out);
$out->fetch();
return new JsonResponse(\json_encode(["a" => "b", "c" => "d"]));
}
Вызов этого действия с локального и хост-сервера возвращает "{\u0022a\u0022:\u0022b\u0022,\u0022c\u0022:\u0022d\u0022}"
и с Content-Type
это здорово, это ожидаемый результат.
application/json
Теперь возникает проблема:
Этот почти такой же код выше, я установил его внутри другого класса, я вызываю его из другого действия контроллера, который проходит через 4 метода из разных классов, чтобы вызвать метод с кодом выше [callCommand]
Это метод, который реализует код:
public function callCommand($cmd, $opt, &$mykernel = null) {
if ($mykernel == NULL) {
$mykernel = new myKernel("dev", false, __DIR__ . "/../Resources/template_2.8/app");
}
$app = new \Symfony\Bundle\FrameworkBundle\Console\Application($mykernel);
$app->setAutoExit(false);
$opt = array("command" => $cmd) + $opt;
$input = new \Symfony\Component\Console\Input\ArrayInput($opt);
$out = new \Symfony\Component\Console\Output\BufferedOutput();
$app->run($input, $out);
}
Из этого другого действия контроллера я также возвращаю контент json в конце. Я не могу показать код, потому что он слишком большой.
Когда я вызываю это действие контроллера с моего локального хоста, я получаю контент JSON и Content-Type: application/json
что хорошо
Но, позвонив с хостинг-сервера, я получаю дополнительные сообщения:
Entity generation
created ./src/Guervyl/EditorBundle/Entity/TestCase.php
> Generating entity class src/Guervyl/EditorBundle/Entity/TestCase.php: OK!
> Generating repository class src/Guervyl/EditorBundle/Repository/TestCaseRepository.php: OK!
Everything is OK! Now get to work :).
Какой вывод текста из консоли при звонке $app->run($input, $out);
, После этого я получаю HTTP-заголовок, который я устанавливаю, затем содержимое json. А также тип контента application/x-httpd-php5
,
Эта ошибка происходит только на конкретном хостинг-сервере. Я проверил другой хостинг-сервер, код работает как на моем локальном сервере.
У меня вопрос, почему я получаю ошибку на этом конкретном хостинге? Могу ли я что-то изменить в PHP.ini, чтобы это исправить? Потому что мне действительно нужно разместить свой сайт на этом хостинге, потому что он предлагает мне отличные функции, которые мне нужны, а другие нет, или они слишком дороги.
Ну, после отладки кода я заметил, что ошибка произошла, потому что я не установил --no-interaction
вариант. Поэтому без этой опции Symfony ждал ввода, когда для сущности не было указано никаких полей.
Других решений пока нет …