Снимок экрана сайта с использованием переполнения стека

Сейчас работаем над небольшой концепцией создания скриншотов сайта по URL. При ссылке на многие сайты используется wkhtmltoimage. В настоящее время использую Mac. Установил wkhtmltoimage успешно, также попробовал

wkhtmltoimage www.google.com ggss.png

в терминале. Успешно выводит скриншот сайта. Но когда я пытаюсь выполнить вышеупомянутую команду, используя PHP, я не вижу выходного изображения или каких-либо ошибок. Ниже приведен код, который я попробовал

<?php
$output = shell_exec('wkhtmltoimage http://www.bbc.com bbc.jpg');
?>

Любая помощь будет оценена

0

Решение

Попробуйте указать полный путь к команде wkhtmltoimage,

РЕДАКТИРОВАТЬ

получить команду wkhtmltoimage полный путь, запустите эту команду: whereis wkhtmltoimage

Таким образом, вы должны это, как:

<?php
$output = shell_exec('/full_path_to_wkhtmltoimage_here/wkhtmltoimage http://www.bbc.com /full_path_to_img_here/bbc.jpg');
?>
1

Другие решения

ОК, наконец, выполнил команду оболочки через php через браузер. Поэтому я подумал, что могу поделиться, может быть полезно для кого-то. Итак, настоящая проблема — разрешение.

Поэтому, когда я использовал команду whoami на выходе терминала, был macuser.
Но когда я попытался выполнить команду, используя shell_exec в выводе php, никого не было. Это потому, что у apache не было разрешения. Поэтому я сделал следующее, чтобы выполнить команду оболочки через PHP

найдите файл httpd.conf в / etc и найдите

Пользователь никто
Группа Ногрупп

измените nobody на имя пользователя, которое вы хотите установить в качестве пользователя, которого хотите выполнить. Для меня его пользователь macuser

Затем выполните следующие команды. (Чтобы убедиться, что я выполнил их как su в терминале)

  • cd / directory / of / htdocs (для меня cd / Applications / XAMPP / xamppfiles / htdocs)
  • находить . -exec chown macuser: macuser {} \;
  • CD ..
  • Чоун Макузер

Теперь, когда я выполняю следующий код, он работает

<?php
$output = shell_exec('/usr/local/bin/wkhtmltoimage http://www.google.com /Applications/XAMPP/xamppfiles/htdocs/demotasks/google.jpg');
?>

Благодаря boulderapps!

1

Другой способ сделать снимок экрана с помощью PHP без каких-либо дополнительных ресурсов сервера — использовать Google API PageSpeed ​​Insights, который не требует какой-либо аутентификации. Это бесплатно и открыто прямо сейчас, так что воспользуйтесь им.

Детали реализации для того же здесь: Создание скриншотов URL с использованием секретного магического API Google.

Исходный код

<?php
// Creating a proxy to use GET request to hit the Google Page Speed API and receive a screenshot.
// Check if the URL parameter for our proxy is set.
if (!empty($_GET['url'])) {
// Make sure the given value is a URL.
if (filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
// Hit the Google PageSpeed Insights API.
// Catch: Your server needs to allow file_get_contents() to make this run. Or you need to use cURL.
$googlePagespeedResponse = file_get_contents("https://www.googleapis.com/pagespeedonline/v2/runPagespeed?screenshot=true&url={$_GET['url']}");

// Convert the JSON response into an array.
$googlePagespeedObject = json_decode($googlePagespeedResponse, true);

// Grab the Screenshot data.
$screenshot = $googlePagespeedObject['screenshot']['data'];
// Replace Google's anamolies.
$screenshot = str_replace(array('_','-'), array('/','+'), $screenshot);

// Build the Data URI scheme and spit out an <img /> Tag.
echo "<img src=\"data:image/jpeg;base64,{$screenshot}\" alt=\"Screenshot\" />";
} else {
// If not a valid URL.
echo "Given URL is not valid.";
}
} else {
// URL not set.
echo "You need to specify the URL.";
}
?>

Вы также можете сделать это с помощью Client Side:

$(function () {
// Get the URL.
var url = "https://praveen.science/";
// Prepare the URL.
url = encodeURIComponent(url);
// Hit the Google Page Speed API.
$.get("https://www.googleapis.com/pagespeedonline/v1/runPagespeed?screenshot=true&strategy=mobile&url=" + url, function (data) {
// Get the screenshot data.
var screenshot = data.screenshot;
// Convert the Google's Data to Data URI scheme.
var imageData = screenshot.data.replace(/_/g, "/").replace(/-/g, "+");
// Build the Data URI.
var dataURI = "data:" + screenshot.mime_type + ";base64," + imageData;
// Set the image's source.
$("img").attr("src", dataURI);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Hard Coded Screenshot of my Website:</h1>
<img src="//placehold.it/300x50?text=Loading+Screenshot..." alt="Screenshot" />
1
По вопросам рекламы [email protected]