Intereting Posts
html <a> активировать при нажатии на ввод нажатой Поиск класса, на который нажата кнопка Добавление дополнительного объявления после установленного номера абзаца Как включить файл меню .asp внутри php-файла? (Папка WordPress в папке ASP) Данные массива AngularJS и php Ajax-вызов успешный, но не может получать значения радио от $ _POST Отправить кнопку нужно дважды щелкнуть, чтобы получить результаты от переключателей в php-скрипте Будет ли лучше использовать фреймворк для разработки сайта или просто его код вручную? Мне нужно знать, что предопределенная точка находится в море или на земле Конвертировать формат даты yyyy-mm-dd => dd-mm-yyyy Значения текстового поля Autofill из результата запроса mysql при изменении выпадающего списка в php Использование более одного условия WHERE в запросе mysql WooCommerce показывает образ заполнителя при использовании get_image () WordPress: переместить Multisite с сервера на localhost Открытая запрещенная ошибка

PHP + PhantomJS Rasterize

Я использую PhantomJS 64 бит в моем приложении PHP для динамического захвата HTML-страницы, которая будет отправляться пользователю по электронной почте.

phantomjs rasterize.js "http://..." /path_to_images/image.png 

Этот метод отлично работает, когда я запускаю вышеуказанное в командной строке, но когда PHP-скрипт запускает команду с помощью exec она терпит неудачу без вывода и возвращает код выхода 11.

Если я переключу его на использование 32-битного двоичного кода phantomJS, команда будет успешной, но не сможет загрузить JSAPI google на странице, поскольку с ошибкой Reference Error: can't find variable google . Это проблема, потому что не все содержимое страницы загружается и записывается как изображение. JSAPI включен с использованием HTTPS. Если я переключусь на HTTP, эта ошибка будет утеряна, но изображение будет черным.

Я тестировал команду как тот же пользователь, что и php.

Подвести итог:

 command> phantomjs_64 rasterize.js "http://..." /path_to_images/image.png 

ОК

 exec('phantomjs_64 rasterize.js "http://..." /path_to_images/image.png'); 

Нет выхода, код выхода 11

 command> phantomjs rasterize.js "http://..." /path_to_images/image.png exec('phantomjs rasterize.js "http://..." /path_to_images/image.png'); 

Неполный выход

Кто-нибудь знает, почему скрипт по умолчанию phantomJS rasterize.js завершился с ошибкой при работе на PHP или обходным путем для этого?

ОБНОВЛЕНИЕ: Эта замечательная статья Арло Карреона указывает, как сделать эту работу на хостинге HostGator (это была моя проблема). Просто добавьте 2>&1 в конце команды, чтобы перенаправить вывод. 64-разрядная версия все еще не работает, но это исправляет 32-битную версию.

Оказывается, это происходит только тогда, когда PHP-скрипт запрашивается через веб-сервер Apache. Обходной путь заключается в создании записи базы данных для пользователей, которым необходимо получить электронное письмо, и настроить cron для выполнения скрипта PHP, который вызывает PhantomJS для каждой пользовательской записи в БД. Когда cron настроен на работу с наименьшим интервалом, пользователь понимает, что электронное письмо было сгенерировано и отправлено немедленно.