Liburl / curl / copie de site.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 352 fois - Téléchargée 15 fois

Contenu du snippet

Il est nécessaire d'installer les librairies adéquates.

Le concept est la copie d'un site,
La lib permet de copier le site en question dans un fichier texte.
Ce fichier texte est ensuite interprété tout en ajoutant l'url du site en tant que baseurl.

Navré pour la tronche du code, j'ai fait ça en mangeant :D

N'hésite pas à critiquer !

N.

Source / Exemple :


<?php
# permet la gestion des erreurs pendant le Dev
ini_set("error_repoting",NULL);
ini_set('display_errors', 0);
ini_set('register_globals',0); 
ini_set("magic_quotes_gpc" , 0);

# attribution du chemin absolu du fichier texte
define(FILE,'buffer.txt');
define(PATH,'/var/www/');

# cette fonction permet d'une part de parser l'url du site demandé et retourner le
# baseurl (afin de permet à tout les fichiers d'aller être chercher ou il faut.
function baseUrl($url){
	$theUrl = parse_url($url);
	$ret = "http://";
	foreach ($theUrl as $k=>$v){
		if ($k == "host")
    		$ret .= $v;
  }
  return "<BASE href=\"".$ret."/\"/>";
}

# effacer le fichier s'il existe puis le recréer, afin qu'il soit tjrs vide.
if (file_exists(PATH.FILE))
  unlink(PATH.FILE);
touch(PATH.FILE);

$url = $_POST['url'];

if (isset($url) && !empty($url)){
	# ouverture du fichier et écriture via la lib 
	$ch = curl_init($url);
	$fp = fopen(FILE, "w");
	
	curl_setopt($ch, CURLOPT_FILE, $fp);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_exec($ch);
	curl_close($ch);
	
	fclose($fp);

	# interpretation du fichier et écriture du base url juste apres le <head>
	$handle = @fopen(PATH.FILE, "r+");
	if ($handle) {
    	while (($buffer = fgets($handle, 4096)) !== false) {
			if (strtolower(rtrim($buffer)) == "<head>")
				echo $buffer.baseUrl($url);
      		else
				echo $buffer;
    	}
		if (!feof($handle))
			echo "Erreur: fgets() a &#8730;©chou&#8730;©\n";
		fclose($handle);
	}
}
?>

<form method='post'>
  <input type='text' name='url'/>
  <input type='submit'/>
</form>

A voir également

Ajouter un commentaire

Commentaires

frunkp
Messages postés
1
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
28 février 2011
-
Afin d'éclaircir quelques points, je travaille dans la publicité et il est souvent demandé de tester des tags(de pubs) sur des sites.
Au lieu de scrapbooker le site, cela allège le travail.

0/ Oui :)
1) Je mettrai des commentaires d'ici peu si tu le souhaite :)
2) S'pas faux mais c'est pas dérangeant. Ca evite de toucher au php.ini)
3) non j'ai pas essayé sur des sites contenant d'énormes images (je n'y trouve pas trop d'intérêt)
4) avec wget ?
cs_hornetbzz
Messages postés
60
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
3 janvier 2011
-
5 petites remarques
0) heu stocker dans un txt, ça fait "moche", tu aurais pu appeler ça "site_foo.html" :-)
1) ça manque un peu de commentaires tout ça, à faire avant le dessert,
2) tipo à revoir : ini_set("error_repoting",NULL); (et il faut avoir accès au php.ini, pas possible sur certains mutualisés me semble-t-il)
3) as-tu essayé la limite de 4096 avec des sites avec de grosses images ? (je pense au fgets($handle, 4096) )
4) en bash, tu peux faire la même chose en 1 ligne :-), se pose alors la question, quelle est l'utilité de le faire en php ?

et un commentaire:
ça ressemble à une incitation à la débauche de pomper des sites, indigne d'un codeur, sans compter qu'avec cette technique, tu pompes une "image" d'un site à un instant "t" vu que tous les sites sont dynamiques (php/python/perl etc..). Il faudrait donc p-ê mieux positionner le contexte d'utilisation.
phpAnonyme
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
20 -
lut,

Le code a peut être une sale tronche, sous-entendu qu'il est réduit au strict minimum, mais ça le fait ! Après l'utilité me semble douteuse :D

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.