2015-01-14 1 views
0

При использовании wkhtmltopdf я не могу сгенерировать изображения, когда URL-адрес содержит %20.wkhtmltopdf - Пробелы в URL

Это не проблема при выполнении одной и той же команды локально через командную строку.

Есть ли способ, которым я могу заставить его работать, когда он в сети?

Мой код до сих пор:

<?php 
$url = $_GET['url']; // Website URL to Create Image 
$name = $_GET['img']; // Output Image Name 
$command = "/usr/local/bin/wkhtmltoimage --no-images --crop-w 580"; 
$dir_img = "images/";  // Image files will be saved here 
$ex_cmd = "$command $url " . $dir_img . $name; 
$output = shell_exec($ex_cmd); 
?> 

Это прекрасно работает, если нет в URL %20.

На странице, необходимой для скриншота , есть, чтобы иметь URL-адрес %20, поэтому функция его удаления не будет решением, к сожалению.

ответ

2

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

$url = escapeshellarg($_GET['url']); // Website URL to Create Image 
$name = escapeshellarg($_GET['img']); // Output Image Name 
$command = "/usr/local/bin/wkhtmltoimage --no-images --crop-w 580"; 
$dir_img = "images/";  // Image files will be saved here 
$ex_cmd = "$command $url " . $dir_img . $name; 
$output = shell_exec($ex_cmd); 

Это просто, чтобы вы начали, вы должны также проверить $_GET['url'] является URL, а не, например, ./config/database.php, и $_GET['img'] также должны быть дезинфицированы.