PHP 在某些情况下将缓冲区字符串打印到 web-page 中?
PHP prints out a buffer string into web-page on certain circuntances?
我不知道怎么解释,但是,我要试一试。
此问题涉及 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"]));
}
从本地和托管服务器 returns "{\u0022a\u0022:\u0022b\u0022,\u0022c\u0022:\u0022d\u0022}"
和 Content-Type<br> 调用此操作
application/json
太好了,这是预期的结果。
现在,问题来了:
上面几乎相同的代码,我将它设置在另一个 class 中,我从另一个控制器操作调用它,它通过来自不同 classes 的 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);
}
从其他控制器操作中,我也 return 一个 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 header,然后是 json 内容。而且 content-type 是 application/x-httpd-php5
.
该错误只发生在特定的托管服务器上。我测试了其他托管服务器代码在我的本地服务器上的工作方式。
我的问题是为什么我会在特定主机上收到错误消息?有什么我可以从 PHP.ini 更改来修复它的吗?因为我真的需要在该主机上托管我的网站,因为它提供了我需要的强大功能,但其他主机没有,或者它们太贵了。
好吧,在我调试代码后,我注意到发生了错误,因为我没有设置 --no-interaction
选项。因此,如果没有该选项,Symfony 在没有为实体指定字段时等待输入。
我不知道怎么解释,但是,我要试一试。
此问题涉及 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"]));
}
从本地和托管服务器 returns "{\u0022a\u0022:\u0022b\u0022,\u0022c\u0022:\u0022d\u0022}"
和 Content-Type<br> 调用此操作
application/json
太好了,这是预期的结果。
现在,问题来了:
上面几乎相同的代码,我将它设置在另一个 class 中,我从另一个控制器操作调用它,它通过来自不同 classes 的 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);
}
从其他控制器操作中,我也 return 一个 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 header,然后是 json 内容。而且 content-type 是 application/x-httpd-php5
.
该错误只发生在特定的托管服务器上。我测试了其他托管服务器代码在我的本地服务器上的工作方式。
我的问题是为什么我会在特定主机上收到错误消息?有什么我可以从 PHP.ini 更改来修复它的吗?因为我真的需要在该主机上托管我的网站,因为它提供了我需要的强大功能,但其他主机没有,或者它们太贵了。
好吧,在我调试代码后,我注意到发生了错误,因为我没有设置 --no-interaction
选项。因此,如果没有该选项,Symfony 在没有为实体指定字段时等待输入。