/**
  * The method fetches data with PHPs file get contents and returns it as a string.
  *
  * @param string $url the url to fetch from
  * @return string the fetched file content in UTF8
  * @throws Exception
  */
 public function fetch($url)
 {
     set_error_handler(create_function('$severity, $message', 'throw new ErrorException($message);'));
     try {
         $data = file_get_contents($url);
         restore_error_handler();
         return ForceUTF8\Encoding::toUTF8($data);
     } catch (Exception $e) {
         throw $e;
     }
 }
 /**
  * The method fetches data with curl and returns it as a string.
  *
  * @param string $url the url to fetch from
  * @return string the fetched file content in UTF8
  */
 public function fetch($url)
 {
     $timeout = 1;
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
     curl_setopt($ch, CURLOPT_HEADER, 0);
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
     curl_setopt($ch, CURLOPT_COOKIEJAR, "curlCookies.txt");
     curl_setopt($ch, CURLOPT_COOKIEFILE, "curlCookies.txt");
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0");
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=utf-8'));
     $data = curl_exec($ch);
     curl_close($ch);
     return ForceUTF8\Encoding::toUTF8($data);
 }
示例#3
0
 /**
  * Dans le code $fullHtml, remplace la chaîne $needle par l'élément $replace. Cette fonctionnalité sert par exemple à insérer un
  * bouton 'lire la suite' à la place du marqueur {{LIRE_LA_SUITE}} dans un bloc de texte qu'on ne veut pas afficher entièrement.
  * @param string $fullHtml Le code HTML à traiter
  * @param string $needle   Le marqueur
  * @param string $replace  Le code de remplacement
  * @return string|bool Le code HTML modifié, false en cas d'erreur
  * @throws \Exception
  */
 public function trimFromHTMLString($fullHtml, $needle, $replace = "")
 {
     $text = trim(html_entity_decode($fullHtml));
     if (!Inflector::seemsUtf8($text)) {
         // @internal Conserver ce bloc car le serveur de production pose des problèmes d'encodage...
         require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'ForceUTF8' . DIRECTORY_SEPARATOR . 'Encoding.php';
         $text = ForceUTF8\Encoding::toUTF8($text);
     }
     // On charge le texte dans un DOMDocument pour le manipuler proprement
     $this->dom = new DOMDocument();
     $htmlHead = '<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><title>***</title></head><body>';
     $htmlFoot = '</body></html>';
     if (!$this->dom->loadHTML($htmlHead . $text . $htmlFoot)) {
         Yii::log(h::_("Erreur sur loadXML()\n{$text}", __FILE__, __LINE__, __METHOD__), CLogger::LEVEL_ERROR);
         return false;
     }
     // On récupère le noeud texte contenant $needle.
     // Si aucun noeud n'a été trouvé, on renvoie le texte complet tel qu'on l'a reçu.
     $zeunode = $this->findStringNode($needle, $this->dom);
     if (!$zeunode) {
         Yii::log(h::_("!!!! Pas de noeud contenant -> {$needle} <-", __FILE__, __LINE__, __METHOD__), 'debug');
         Yii::log(h::_(h::xmlTreeDump($this->dom), __FILE__, __LINE__, __METHOD__), 'debug');
         return $fullHtml;
     }
     // On supprime tout le texte après $needle et tous les noeuds suivant $zeunode
     $zeunode->data = preg_replace("/({$needle}).*/ms", "\$1", $zeunode->data);
     $this->removeNextNodes($zeunode);
     $out = $this->dom->saveHTML();
     // On retire le code HTML ajouté de part et d'autre de $text
     // On remplace le marqueur $needle par le code HTML $replace
     if (($pos = strpos($out, $htmlHead)) === false) {
         Yii::log(h::_("Erreur sur : strpos({$htmlHead}, {$out})", __FILE__, __LINE__, __METHOD__), CLogger::LEVEL_ERROR);
     } else {
         $out = substr($out, $pos + strlen($htmlHead));
     }
     $out = str_replace($htmlFoot, '', $out);
     $out = trim(preg_replace("/{$needle}/", $replace, $out));
     return $out;
 }