PhantomJS не визуализируется при выполнении с PHP


Новичок в phantomjs решил использовать это для печати скриншотов с веб-страниц. С терминала все работает нормально, но при выполнении из PHP-скрипта с функцией shell_exec рендеринг не работает.

Это как раз та часть, которая выполняет phantom из PHP. Другие команды, выполняемые с помощью shell_exec, работают, только не рендеринг.

$output = shell_exec("phantomjs phantom.js");
echo $output;

Это фантомный скрипт, который отлично работает при выполнении в оболочке

var page = require('webpage').create();
page.open( "http://www.google.co.uk" , function(s){
    var title = page.evaluate(function(){
        var main = document.getElementsByTagName("center");
        main[0].style.visibility = "hidden";
        return document.title;
    });
    console.log("rendering now");
    page.render("title" + ".png");
phantom.exit();
});
Author: nhenrique, 2013-04-19

1 answers

Это может привести к более предсказуемым результатам -

Для целей тестирования просто используйте:

 exec("phantomjs phantom.js");

Убедитесь, что у вас есть phantomjs, который можно выполнить в той же папке, что и ваш выполняемый php-скрипт.

Во-вторых, потеряйте выходную переменную $. Я попробовал что-то похожее на то, что вы пробовали, и это не сработало - ваш фантомный сценарий ничего не вернет в его текущем состоянии, а shell_exec находится на пути к тому, чтобы стать устаревшим из-за его непредсказуемой и небезопасной природы. ИМХО shell_exec в лучшем случае хакерский и временный.

В-третьих, измените свою папку на "777" для тестирования. Или сохраните вывод рендеринга страницы в папку с правами на запись.

Что касается возврата полезных данных (читай: пригодных для использования несколькими одновременными пользователями, поскольку это медленная и блокирующая операция) из скрипта PhantomJS в ваш PHP-скрипт.... хорошо... в этом и заключается проблема...

 2
Author: FredTheWebGuy, 2013-06-27 10:56:16