2015-08-24 3 views
7

Я использую phantomJS для создания PDF-файлов в PHP через оболочку (shell_exec). Скрипт отлично работает на рабочем сервере, а также отлично работает, если я подключаю команду PhantomJS непосредственно к моему терминалу.Сценарий PhantomJS, возвращающий пустую веб-страницу

Но это не работает, когда я запускаю сценарий в локальной локальной среде. Мне интересно, есть ли проблемы с разрешениями. Я не буду погружаться в специфику моей местной окружающей среды на данный момент, так как я предполагаю, что это является проблемой высокого уровня ...

Команда, которая должна выполняться с помощью shell_exec():

/usr/local/bin/phantomjs --ignore-ssl-errors=true --debug=true ../scripts/renderTeamProfile.js https://127.0.0.1/app_dev.php/pdf/enterprise-lpc-enterprise/profile/render /private/var/tmp/pjsK2N16E.pdf

php код:

public function pdfResponse($url, $script, $remote_filename) 
{ 
    $tempFile = tempnam('/tmp', 'pjs'); 
    // The extension specifies output format. Use pdf 
    $tempFilePdf = $tempFile . '.pdf'; 
    rename($tempFile, $tempFilePdf); 

    # nginx should restrict access to the localhost URL 
    $urlLocal = preg_replace('/^https:..[^\/]+/', 'https://127.0.0.1', $url); 

    $phantomJs = $this->container->getParameter('testsite.phantomjs_cmd'); 
    $command = $phantomJs.' --debug=true '.$script.' '.$urlLocal.' '.$tempFilePdf; 
    $output = shell_exec($command); 
    $content = file_get_contents($tempFilePdf); 
    $response = new Response($content, 200); 
    $response->headers->set('Content-Type', 'application/pdf'); 
    $response->headers->set('Content-Disposition', 
    ('inline; filename="' . $remote_filename . '"')); 
    return $response; 
} 
+1

У вас установлены одинаковые версии? Пожалуйста, зарегистрируйтесь в событиях onConsoleMessage, 'onError',' onResourceError', 'onResourceTimeout' ([Пример] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf)). Возможно, есть ошибки. –

+0

Вы пробовали записывать значение '$ output'? – VolenD

+0

@ user3584460 $ output оценивается как false, так что это не проблема –

ответ

1

Оказывается, там была другая версия phantomjs, установленный локально, на сервере prod. Интересно, что ошибка произошла с более новой версией (2.0.0) и 1.9.8.

+2

Вы должны отметить свой собственный ответ как принятый, таким образом он не будет отображаться в оставшемся без ответа списке. –

Смежные вопросы