limites=$infos["limites"]; unset($infos["limites"]); $erreur_ok=false; foreach ($infos as $attribut => $valeur) { $methode="set_$attribut"; if (method_exists(__CLASS__,$methode)) { if(!$this->$methode($valeur)) $erreur_ok=true; } else $this->$attribut=$valeur; } if(($erreur_ok)&&(empty($this->erreurs))) $this->erreurs=(array) ERREUR_IMPREVUE; } } /** * Méthode testant la validité de la désignation du lien * et l'attribuant à l'objet si ok * * @param la désignation à contrôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_designation($designation) { $long_min=(!empty($this->limites["designation_long_min"]))?$this->limites["designation_long_min"]:0; if(empty($this->limites["designation_long_max"])) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $long_max=$this->limites["designation_long_max"]; if((($long_min!=0)&&(!is_int($long_min)))||(!is_int($long_max))||($long_max<$long_min)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $designation=strip_tags(strval(trim($designation))); $longueur=strlen($designation); if(($longueur<$long_min)||($longueur>$long_max)) { $this->erreurs=array_merge($this->erreurs,(array) (str_replace(array("__MIN__","__MAX__"),array($long_min,$long_max),ERREUR_LIEN_DESIGNATION_LONG))); return false; } else { $this->designation=$designation; return true; } } /** * Méthode testant la validité d'une url fournie * on contrôle le format de l'url et sa longueur * si tout est ok, on l'attribut à l'objet * * @param l'url à contrôler * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function set_url($url) { $long_min=(!empty($this->limites["url_long_min"]))?$this->limites["url_long_min"]:0; if(empty($this->limites["url_long_max"])) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $long_max=$this->limites["url_long_max"]; if((($long_min!=0)&&(!is_int($long_min)))||(!is_int($long_max))||($long_max<$long_min)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } $url=strip_tags(strval(trim($url))); $longueur=strlen($url); if(($longueur<$long_min)||($longueur>$long_max)) { $this->erreurs=array_merge($this->erreurs,(array) (str_replace(array("__MIN__","__MAX__"),array($long_min,$long_max),ERREUR_LIEN_URL_LONG))); return false; } if(!filter_var($url,FILTER_VALIDATE_URL)) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_LIEN_URL_FORMAT); return false; } $this->url=$url; return true; } /** * Méthode retournant les entêtes d'une page internet * permet de savoir si elle existe et si oui le type de contenu, etc. * * @param null * @return tableau des entêtes, false en cas d'url de page erronée * @author Fabrice PENHOËT **/ public function get_entetes() { if(empty($this->url)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } ini_set("user_agent","Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0");//triche pour certaines restrictions d'accès... stream_context_set_default(array("http"=>array("method"=>"HEAD"),"ssl"=>array("verify_peer"=>false,"verify_peer_name"=>false)));//https qui font ch... $entetes=@get_headers($this->url,1); if(empty($entetes)) return false; else return $entetes; } /** * Méthode tentant de récupérer le contenu situé à l'url définie * * @param durée limite pour récupérer le contenu * @return booléen suivant succès * @author Fabrice PENHOËT **/ public function get_contenu($duree_max=0) { if(empty($this->url)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } if(empty($duree_max)) $duree_max=intval(ini_get("max_execution_time")); if(!is_float($duree_max)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT)); return false; } ini_set("default_socket_timeout","$duree_max"); ini_set("user_agent","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0");//triche pour les restrictions d'accès... $contexte=stream_context_create(array("http"=>array("method"=>"GET","timeout"=>$duree_max),"ssl"=>array("verify_peer"=>false,"verify_peer_name"=>false))); $contexte=stream_context_create(array("http"=>array("method"=>"GET"),"ssl"=>array("verify_peer"=>false,"verify_peer_name"=>false))); $contenu=trim(file_get_contents($this->url,NULL,$contexte)); if(empty($contenu))//certains n'aiment pas user_agent... { ini_set("user_agent",""); $contenu=trim(file_get_contents($this->url,NULL,$contexte)); } if(empty($contenu)) { $this->erreurs=array_merge($this->erreurs,(array) ERREUR_LIEN_CONTENU_EXISTE); return false; } return $contenu; } /** * Méthode testant si le lien pointe vers un fichier html * si oui, retourne différentes informations fournies par l'entête : * balises title, description, link... * * @param null * @return tableau contenant les résultats, false en cas d'erreur * @author Fabrice PENHOËT **/ public function get_entete_html() { if(empty($this->url)) { $ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT)); return false; } $html=$this->get_contenu(5.0); if(empty($html)) return false; $doc=new DOMDocument(); //libxml_use_internal_errors(true); @$doc->loadHTML($html); $head=$doc->getElementsByTagName('head'); if($head->length!=1) return false; $title=$doc->getElementsByTagName('title'); if($title->length!=0) $resultat["title"]=affiche_utf8($title->item(0)->nodeValue,UTF8_OK); $metas=$doc->getElementsByTagName('meta'); if ($metas->length!=0) { foreach ($metas as $meta) { if($meta->hasAttribute("name")) { $name=$meta->getAttribute("name"); if($meta->hasAttribute("content")) $resultat[$name]=affiche_utf8($meta->getAttribute("content"),UTF8_OK); } } } $links=$doc->getElementsByTagName('link'); if ($links->length!=0) { $i=0; foreach ($links as $link) { if($link->hasAttribute("href")) $resultat["link$i"]["href"]=$link->getAttribute("href"); if($link->hasAttribute("rel")) $resultat["link$i"]["rel"]=$link->getAttribute("rel"); if($link->hasAttribute("type")) $resultat["link$i"]["type"]=$link->getAttribute("type"); if($link->hasAttribute("title")) $resultat["link$i"]["title"]=affiche_utf8($link->getAttribute("title"),UTF8_OK); $i++; } } if(empty($resultat)) return false; else return $resultat; } /** * Affichage par défaut d'un objet * * @return chaîne de caractères listant la valeur de chaque attribut * @author Fabrice PENHOËT **/ public function __toString() { $texte="

".__CLASS__."

"; foreach($this as $key => $value) { if(is_array($value)) $value=affiche_tableau($value,"
  • #valeur
  • ",""); $texte.="$key : $value\n"; } return $texte; } }