Symfony - как выполнить другой скрипт php и получить результаты? - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть скрипт, который генерирует некоторую графику и возвращает ее в результате, также она кэширует эту графику и т. Д.

Я использую symfony2, и в контроллере мне нужно вызвать этот скрипт, сейчас я использую эту функцию для вызова моего php-скрипта:

        private function http_post($url, $data)
            {
                $data_url = http_build_query ($data);
                $data_len = strlen ($data_url);

                return array ('content'=>file_get_contents ($url, false, stream_context_create (array ('http'=>array ('method'=>'POST'
                        , 'header'=>"Connection: close\r\nContent-Length: $data_len\r\nContent-Type: application/x-www-form-urlencoded\r\n"
                        , 'content'=>$data_url
                        ))))
                    , 'headers'=>$http_response_header
                    );
            } 

Я думаю, что этот путь не самый лучший, и, насколько я помню, file_get_contents довольно медленный? Итак, мой вопрос: это хороший способ отправить POST в этот скрипт через "http_post"? Если нет, то что было бы лучше?

РЕДАКТИРОВАТЬ: Я не хочу, чтобы этот скрипт был в контроллере, поэтому не включайте решения, пожалуйста:).

Ответы [ 2 ]

2 голосов
/ 05 февраля 2012

Если вы хотите реализовать генератор изображений в качестве контроллера, вы просто вернете ответ как обычно: return new Response($generated_image);.

Так что это может быть ваш контроллер:

namespace Acme\MyBundle\Controller;
use Symfony\Component\HttpFoundation\Response;

class ImageGeneratorController
{
    public function generateAction($parameters)
    {
      //Generate an image using parameters and store it in $image
      $image = ....

      return new Response($image);
    }
}

Затем вы можете вызвать генератор изображений с любого контроллера , используя forward()

public function indexActionInAnotherController($name)
{
    $response = $this->forward('AcmeMyBundle:ImageGenerator:generate', array(
        'name'  => $name,
        'color' => 'green'
    ));

    // further modify the response or return it directly

    return $response;
}
2 голосов
/ 05 февраля 2012

Нет ничего плохого в том, что вы делаете, однако, если вы хотите изучить альтернативу, многие люди используют библиотеку curl, которая быстра и надежна.

...