Outils pour utilisateurs

Outils du site


php:cutycapteur

IMPORTANT: cette idée et le code qui en résulte ont été pondus un samedi soir 23h30 après deux verres d'alcool à 21° en conjoncture avec un certain ennui et seulement 2 heures de code/test. Bref c'est une horreur, mais l'idée à la base n'est pas mauvaise. Soyez libres de développer ça :-)

  • machine Debian/Ubuntu
    • cutycapt
    • xvfb
    • php5-cli
    • php5-cgi

Structure des fichiers:

  • /
  • /db/
  • /work/
  • /index.php
  • /webcapt.run

Principe de base: on appelle index.php avec une URL en paramètre GET, index.php passe l'URL via fichier dans /work/ à webcapt, ce dernier génère des captures d'écran PNG et SVG avec cutycapt, renomme selon hash sha1 de l'URL et déplace dans /db/, index.php enfin redirige vers le fichier s'il existe.

Intérêt: combiné à un Autoblog, fournir un instantané en image de la page autobloguée (permettant ainsi de sauvegarder le design et extraire d'autres éléments de la page grâce au SVG ouvert dans Inkscape)

Bémols:

  • ça bouffe pas mal de ressources, la génération de captures d'écran.. d'où le forbidden qui limite les IP pouvant appeler le script
  • un entrecroisement PHP/Bash assez moche avec une passation de données ridicule (via nom d'un fichier avec un “for file in *”)
  • vous en connaissez beaucoup, vous, d'hébergeurs mutualisés qui autorisent exec() ? Niveau sécu c'est assez horrible

** Le code**

index.php
<?php
if($_SERVER['REMOTE_ADDR'] === '8.8.8.8') { } else { header('HTTP/1.1 403 Forbidden');die('forbidden');}
if(isset($_GET['url'])) { } else {header('HTTP/1.1 403 Forbidden');die('no url given');}
$request = $_GET['url'];
if(isset($_GET['svg'])) { $type="svg";} else {$type="png";}
$filename = base64_encode($request);
$urlhash = sha1($request);
if(file_exists("db/$urlhash.$type"))
	{ header("Location: db/$urlhash.$type");die; }
else
	{
	file_put_contents("work/$filename", '');
	exec('./webcapt.run');
		if(file_exists("db/$urlhash.$type"))
		{ header("Location: db/$urlhash.$type");die; }
		else {die('error');}
	}
?>

webcapt.run
#!/bin/bash
mkdir -p "work"
mkdir -p "db"
cd "work/"
for file in *; do
url=$(echo "$file" | base64 -d); urlhash=$(php -r "echo sha1(\"$url\");")
xvfb-run --server-args="-screen 0, 1280x720x24" cutycapt --url=$url --private-browsing=on --user-agent="Mozilla/5.0 (X11; U; Linux x86_64; C) CutyCapt" --header=DNT:1 --min-width=1280 --min-height=720 --out="$file.svg"
xvfb-run --server-args="-screen 0, 1280x720x24" cutycapt --url=$url --private-browsing=on --user-agent="Mozilla/5.0 (X11; U; Linux x86_64; C) CutyCapt" --header=DNT:1 --min-width=1280 --min-height=720 --out="$file.png"
rm "$file"
mv "$file.svg" "../db/$urlhash.svg"
mv "$file.png" "../db/$urlhash.png"
done
php/cutycapteur.txt · Dernière modification: 2013/02/19 19:28 (modification externe)