我不知道该怎么解释,但是,我来试试看。
此问题涉及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中进行更改以进行修复吗?因为我确实需要在该主机上托管我的网站,因为它为我提供了我需要的强大功能,而其他功能则不需要,或者它们太昂贵了。
答案 0 :(得分:0)
好吧,在调试代码后,我注意到发生了错误,因为我没有设置--no-interaction
选项。因此,如果没有该选项,当没有为实体指定任何字段时,Symfony将等待输入。