简体   繁体   中英

PHP prints out a buffer string into web-page on certain circuntances?

I don't know how to explain it but, I'm gonna give it a try.

This problem concerns 2 servers, a local and a hosting server. Both servers are running the same PHP version which is 7.0 [with almost same configurations]. And 2 controller actions. And the problem comes from $app->run($input, $out); from the codes below.

I have in my controller that action:

     /**
     * @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"]));
    }

Calling this action from the local and hosting server returns "{"a":"b","c":"d"}" and with Content-Type
application/json
Content-Type
application/json
Content-Type
application/json
which is great, it's the expected result.

Now, here comes the problem:

That almost same code above, I set it inside another class, I call it from another controller action, which passes through 4 methods from different classes to call the method that has the code above [callCommand]

This is the method that implement the code:

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);
    }

From that other controller action, I also return a json content at the end. I can't show the code because it's too big.

When I call that controller action from my localhost, I get the JSON content and Content-Type: application/json which is fine.

But calling it from the hosting server I get extra texts like:

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 :).

Which is the output texts from the console when calling $app->run($input, $out); . After that I get the HTTP header that I set then the json content. And also the content-type is application/x-httpd-php5 .

That error only happens on a specific hosting server. I tested other hosting server the code works like on my local server.

My question is why am I getting the error on that specific hosting? Is there something I can change from the PHP.ini to fix it? Because I really need to host my website on that hosting because it offers me great features that I need but the others don't or they are too expensive.

Well, After I debugged the code I noticed that error happened because I did not set the --no-interaction option. So without that option, Symfony was waiting for input when no fields are specified for an Entity.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM