Soutenir Vision du Web dans son partage de logiciels et de ressources libres

Ce mineur crée de la monnaie numérique Monero pour soutenir Vision du web.
Merci de désactiver votre bloqueur de publicité.
Aucune publicité ne sera affichée.
Le mineur utilise les ressources de votre machine pour créer gratuitement de la monnaie numérique.
Le montant des donations pour Vision du web est de 0.058319735982826 Monero.

Utiliser PHP

De Wiki. Analyse, Communication, Développement, Hacking.
Aller à : navigation, rechercher
Naviguer sur le site : Accueil du site - Les annuaires - Les éditoriaux - Le forum - Les outils - Les projets
 

Sommaire

Utiliser PHP

Déployer du PHP avec Ansible

Tutoriel : https://www.grafikart.fr/formations/deploiement-ansible-ansistrano/installation

Faille include

Source : https://www.funinformatique.com/faille-include-comment-lexploiter-et-sen-proteger/

error_reporting

Pour vérifier les variables non-initialisées, utiliser la fonction error_reporting qui peut afficher les erreurs de niveau E_NOTICE.

Configurer php.ini pour afficher les erreurs PHP

error_reporting = E_ALL
display_errors = On
ou
Ajouter sous l'ouverture de la balise <?php
ini_set('error_reporting', E_ALL);

Afficher les erreurs PHP directement sur la page

error_reporting(E_ALL);
@ini_set('display_error','1');

Vérifier si des liens de pages web ne fonctionnent plus

<?php
function urlExist($url) {
   $file_headers = @get_headers($url);
   if($file_headers[0] == 'HTTP/1.1 404 Not Found')
      return false;
 
   return = true;
}
?>

Variables Environnement Serveur

Source : http://www.creation-site.org/variables-environnement.html

Whois en PHP

Source : https://github.com/phpWhois/phpWhois

Code procédurale

Identifier l'URL de provenance

// Récupérer l'URL de provenance à sauvegardée en PDF.
$URL=$_SERVER["HTTP_REFERER"];

Remplacer le titre d'une page

$content = preg_replace("~<titre>(.*)</titre>~","",$content) ;

Interdire les caractères spéciaux dans une chaîne de caractères

$interdit=array(">", "<", " ", ":", "*","\\", "/", "|", "?", "\"", ",", "—", "!", "_", ".", "(", ")", "[", "]", "=", "+", "°", "~", "'", "#", "`" );
 $variable = str_replace($interdit,"-",$titre);

Remplacer des caractères

// Modèle des caractères accentués.
$cible = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ă', 'Ą','Ç', 'Ć', 'Č', 'Œ','Ď', 'Đ','à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ă', 'ą','ç', 'ć', 'č', 'œ','ď', 'đ','È', 'É', 'Ê', 'Ë', 'Ę', 'Ě','Ğ','Ì', 'Í', 'Î', 'Ï', 'İ','Ĺ', 'Ľ', 'Ł','è', 'é', 'ê', 'ë', 'ę', 'ě','ğ','ì', 'í', 'î', 'ï', 'ı','ĺ', 'ľ', 'ł','Ñ', 'Ń', 'Ň','Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ő','Ŕ', 'Ř','Ś', 'Ş', 'Š','ñ', 'ń', 'ň','ò', 'ó', 'ô', 'ö', 'ø', 'ő','ŕ', 'ř','ś', 'ş', 'š','Ţ', 'Ť','Ù', 'Ú', 'Û', 'Ų', 'Ü', 'Ů', 'Ű','Ý', 'ß', 'Ź', 'Ż', 'Ž','ţ', 'ť','ù', 'ú', 'û', 'ų', 'ü', 'ů', 'ű','ý', 'ÿ','ź', 'ż', 'ž','А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р','а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'р','С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я','с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я');

$rempl = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'A', 'A','C', 'C', 'C', 'CE','D', 'D','a', 'a', 'a', 'a', 'a', 'a', 'ae', 'a', 'a','c', 'c', 'c', 'ce','d', 'd','E', 'E', 'E', 'E', 'E', 'E','G','I', 'I', 'I', 'I', 'I','L', 'L', 'L','e', 'e', 'e', 'e', 'e', 'e','g','i', 'i', 'i', 'i', 'i','l', 'l', 'l','N', 'N', 'N','O', 'O', 'O', 'O', 'O', 'O', 'O','R', 'R','S', 'S', 'S','n', 'n', 'n','o', 'o', 'o', 'o', 'o', 'o','r', 'r','s', 's', 's','T', 'T','U', 'U', 'U', 'U', 'U', 'U', 'U','Y', 'Y','Z', 'Z', 'Z','t', 't','u', 'u', 'u', 'u', 'u', 'u', 'u','y', 'y','z', 'z', 'z','A', 'B', 'B', 'r', 'A', 'E', 'E', 'X', '3', 'N', 'N', 'K', 'N', 'M', 'H', 'O', 'N', 'P','a', 'b', 'b', 'r', 'a', 'e', 'e', 'x', '3', 'n', 'n', 'k', 'n', 'm', 'h', 'o', 'p','C', 'T', 'Y', 'O', 'X', 'U', 'u', 'W', 'W', 'b', 'b', 'b', 'E', 'O', 'R','c', 't', 'y', 'o', 'x', 'u', 'u', 'w', 'w', 'b', 'b', 'b', 'e', 'o', 'r');
// Remplacer les caractères accentués.
$variable = str_replace($cible, $rempl,$variable);
// Supprime les occurences successives du tiret.
$variable = preg_replace('#-{2,}#','-',$variable);
// Supprimer le dernier tiret de la chaîne.
$variable = substr($variable,0,strlen($variable)-1);
// Uniquement alphanumérique et tiret.
$variable = preg_replace('#[^a-z0-9-]+#i', '-',$variable);

Vérifier si un fichier existe

if (file_exists("$nom_fichier.pdf")) {
echo "Le fichier existe.";
} else {
echo "Le fichier n'existe pas.";
}

Passage de variable avec GET

echo "<center><a href=\"?delete=OUI\" target=\"_self\">Supprimer l'archive pour créer une nouvelle version avec le contenu actuellement en ligne sur la page</a>.</center>";
Ajouter un code de vérification qui exploite le retourne de la valeur GET.

Lister les fichiers pdf d'un dossier

$liste = glob('*.pdf');
 foreach ($liste as $document) {
 echo "<br/><a href=\"$document\" target=\"_$document\">$document</a>.";
 $taille = filesize($document);
 }

Convertir le poids d'un fichier en Octet vers une unité adaptée au poids total du fichier

// Convertir la taille du fichier en Octet vers la bonne unitée adaptée au poids total du fichier.    
 if ($taille < 1000) // octet
 {
  echo "$taille Octets";
 }
 else 
 {
     if ($taille < 1000000) // ko
     {
     $ko = round($taille/1024,2);
     echo "$ko Kilos";
     }
     else // Mo ou Go 
     {
       if ($taille < 1000000000) // Mo 
         {
         $mo = round($taille/(1024*1024),2);
         echo "$mo Mégas";
         }
         else // Go 
         {
         $go = round($taille/(1024*1024*1024),2);
         echo "$go Gigas";
         }
     }
 }

Récupérer une adresse mail dans une chaîne de caractères

A tester.
$pattern = '#[a-z0-9]+([._-]?[a-z0-9])*@[a-z0-9]+([.-]?[a-z0-9])*\.[a-z]{2,4}#i';
 $result = preg_match_all( $pattern, $source, $matches );
 echo '<pre>';
 print_r($matches);
 echo '</pre>';

DOMDocument

Récupérer le titre d'une page

libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile($URL);
libxml_clear_errors();
$title = $doc->getElementsByTagName('title')->item(0);
$titre = $title->nodeValue;

Récupérer le contenu de balises avec Xpath

Quelques notes : https://buzut.fr/extraire-des-informations-du-dom-en-php
Xpath cheatsheet : https://devhints.io/xpath

Exemple 1

$new = new DOMDocument();
 @$new->loadHtml("$resultat");
 $xpath = new DOMXPath($new);
 //$domExemple = $xpath->query("//ul/li");
 //$domExemple = $xpath->query("//ul/li[@class='toclevel-1 tocsection-1']");
 //$domExemple = $xpath->query("//span[@class='tocnumber'] | //span[@class='toctext']");
 $toctext = $xpath->query("//span[@class='toctext']");
 $tocnumber = $xpath->query("//span[@class='tocnumber']");

 $i = 0;
 foreach ($toctext as $text) {
 $result[$i++] = $text->nodeValue;

 echo "$text->nodeValue";
 }

Exemple 2

Exemple 2, à tester.
Au lieu d'afficher les résultats de deux requêtes dans deux colonnes d'un tableau, on peut faire trois boucles pour afficher le résultat sur une seule ligne.
$queryXPath1 = '//div[@class="title"]'; //NOM
 $queryXPath2 = '//div[@class="price"]'; //PRIX
 
 $Liste_url = array('MAPAGE.html');
 
 foreach ($Liste_url as $url) 
 {
 $dom = new DOMDocument();
 @$dom->loadHTMLFile($url);
 $x = new DOMXPath($dom);
 
 //NOM
 $nodeList = $x->query($queryXPath1);
 $NOM=array();
 foreach ($nodeList as $node)
 {
 array_push($NOM, utf8_decode(urldecode($node->nodeValue.'</br></br>')));
 }
 
 //PRIX
 $nodeList = $x->query($queryXPath2);
 $PRIX =array();
 foreach ($nodeList as $node)
 {
 array_push( $PRIX , utf8_decode(urldecode($node->nodeValue.'</br></br>')));
 }
 }	
 
 /* traitements effectués, on passe a la présentation des données:*/
 for ($i=0; $i < (count($NOM)); $i++ )
 {
    echo $NOM[$i]." ".$PRIX[$i]."<br />";
 }

cURL

Récupérer le HTML d'une page

$wikipediaURL = "$URL";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $wikipediaURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Vision du web (www.visionduweb.eu)');
$resultat = curl_exec ($ch);
curl_close($ch);

Regex

Exemples : http://www.expreg.com/lire-Chaines-source

Exporter une page en PDF

Librairie

Librairie Dompdf

La librairie sur Github : https://github.com/dompdf/dompdf
On ne peut pas l'utiliser sur un hébergement mutualisé puisqu'il faut être en mesure d'installer ce programme sur le serveur.

Exemple pour exporter une page du wiki avec la librairie Dompdf

<?php
require_once 'extensions/dompdf/autoload.inc.php';
require_once 'extensions/dompdf/lib/html5lib/Parser.php';
require_once 'extensions/dompdf/lib/php-font-lib/src/FontLib/Autoloader.php';
require_once 'extensions/dompdf/lib/php-svg-lib/src/autoload.php';
require_once 'extensions/dompdf/src/Autoloader.php';
Dompdf\Autoloader::register();

// Récupérer la page courante du wiki
echo ($_SERVER["HTTP_REFERER"]);
$page = file_get_contents($_SERVER["HTTP_REFERER"]);

// Reference the Dompdf namespace
use Dompdf\Dompdf;

// Instantiate and use the dompdf class
$dompdf = new Dompdf();

// Modifier le code de la page HTML pour passer les URL des images en absolu.
$pasok=str_replace("/wiki/images", "https://www.visionduweb.eu/wiki/images","$page");

// Les images ne sont tout de même pas affichées et semblent rester en relatif.
$dompdf->loadHtml($pasok);

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
?>

Les images ne sont pas affichées avec un lien relatif

Une issue est ouverte sur Github pour passer les liens des images de mediawiki en lien absolu : https://github.com/dompdf/dompdf/issues/1766

Librairie Pdflib

Source : http://www.pdflib.com/products/pdflib-family/
Il faut pouvoir l'installer sur le serveur PHP, ce qui n'est pas possible en mutualisé.

Librairie fpdf

Source : http://www.fpdf.org
FPDF est une bibliothèque de fonctions permettant de manipuler des PDF. Elle permet de générer des PDF en le composant en utilisant les méthodes de la classe.
Peut être utilisée sur un hébergement mutualisé.

Librairie TCPDF

Source : https://tcpdf.org
Cette librairie est très complète et génère un rendu vraiment propre.
Elle peut être utilisée sur un hébergement mutualisé.
Voir à récupérer uniquement la page de mediawiki.
Voir à forcer le téléchargement.
Voir à intégrer les CSS.

Exporter le PDF vers un fichier

$pdf_string = $pdf->Output('wiki-tutoriel.pdf', 'S');
file_put_contents('./pdf/wiki-tutoriel.pdf', $pdf_string);
Source complémentaire : https://stackoverflow.com/questions/12304553/tcpdf-save-file-to-folder

Exemple de création de PDF

Exemple pour exporter le sommaire d'une page Mediawiki : Exporter le sommaire de Mediawiki sur une page PHP.
Cliquer ici pour créer le sommaire de cette page en PDF.

Librairie Html2pdf

Source : https://html2pdf.fr
Fonctionne bien pour les pages simples, mais pas pour les pages élaborées contenant des tableaux.
Exemples de réalisations : http://creersonsiteweb.net/page-php-convertir-page-web-html-en-pdf

Librairie Wkhtmltopdf

Source : https://wkhtmltopdf.org
Outil en ligne de commande open source (LGPLv3) pour convertir du HTML en PDF et divers formats d'image en utilisant le moteur de rendu Qt WebKit.
Exemple pour partager un classeur excel via le réseau : http://excel.engalere.com/question/147-partager-classeur-excel-reseau

Librairie Zend Pdf

Source : https://devzone.zend.com/1064/zend_pdf-tutorial/
Source : https://framework.zend.com/manual/1.12/en/zend.pdf.html
Ce composant fait partie du Zend Framework. Il faut être à l'aise en programmation orientée objet.

API

API HTML 2 PDF Rocket

Source : https://www.html2pdfrocket.com
Always Free
$0 / Month
200 credits
5mb per PDF file
Create API Key.
// Créer la clé API depuis le site https://www.html2pdfrocket.com
$apikey = 'KEY';
$value = 'https://www.google.com'; // a url starting with http or an HTML string.  see example #5 if you have a long HTML string
$result = file_get_contents("https://api.html2pdfrocket.com/pdf?apikey=" . urlencode($apikey) . "&value=" . urlencode($value));
file_put_contents('mypdf.pdf',$result);
Le taux de réussite pour la création de PDF est d'environ 70%, lors de la création de PDF provenant des pages de Mediawiki. Certaines pages ne sont pas générées.

API Pdflayer

https://pdflayer.com
Un rendu propre des pages.
Les images de Mediawiki sont intégrées.
Un index est créé et permet de naviguer dans le PDF.
Les vidéos ne sont pas affichées en capture dans le PDF.
Les liens internes de Mediawiki ne sont pas réécrits avec le domaine. (Demander au support.)
Les contenus des liens de provenance ayant un accent ne sont pas générés. Enlever les accents des pages pour éviter ce problème. Un mail est envoyé au support dans ce sens.

Exemple de création de PDF

Cliquer ici pour créer cette page en PDF.

API Pdfcrowd

L'API est payante mais les PDF peuvent également être créés en ligne depuis leur site web.
Source : https://pdfcrowd.com/doc/api/html-to-pdf/php/

Maintenir son code PHP

XDebug

.

PHPCI

Lancer un scann sur son code pour vérifier si il est bien à jour avec les dernières recommandations de version.
Source : https://www.phptesting.org
Source : https://github.com/Block8/PHPCI

Créer une API avec PHP

Définition d'une API

Une API (Application programming interface) est une interface de programmation.
C'est une manière indirecte d'accéder à des données ou à une application externe.

Choisir un style d'architecture

Deux architectures pour les API du web :
SOAP est basé sur XML et comporte des structures standardisées de requêtes et réponses.
REST (Representational State Transfer.) avec une approche plus ouverte qui fournit de nombreuses conventions mais permet une grande liberté de décision au concepteur.

Documentations sur des API existantes

Facebook : https://developers.facebook.com/docs/graph-api/overview
Facebook : https://developers.facebook.com/docs/graph-api/using-graph-api?utm_source=zapier.com&utm_medium=referral&utm_campaign=zapier
Instagram : https://www.instagram.com/developer/endpoints/?utm_source=zapier.com&utm_medium=referral&utm_campaign=zapier
Marvel : https://developer.marvel.com
Musicgraph : https://developer.musicgraph.com/api-docs/overview
Twitter : https://developer.twitter.com/en/docs?utm_source=zapier.com&utm_medium=referral&utm_campaign=zapier
Twitter : https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-favorites-create?utm_source=zapier.com&utm_medium=referral&utm_campaign=zapier

Bibliographie

Cours PHP Accéléré - Version 0.9.1 - Gérard Rozsavolgyi - Septembre 18, 2017 : https://www.univ-orleans.fr/iut-orleans/informatique/intra/tuto/php/FastPHP.pdf

NAVIGATION

COMPRENDRE LA BLOCKCHAIN PAR LA PRATIQUE

Obtenir gratuitement de la cryptomonnaie sur internet : https://www.visionduweb.eu/forum/bitcoin/1597-gagner-des-bitcoins-miner-des-bitcoins

PARTICIPER ET PARTAGER

Vous êtes sur le HackerSpace de Vision du Web.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
Pourquoi utiliser GNU/Linux ? Y'a moins bien, mais, c'est beaucoup plus cher.
GNU/Linux, hackerspace, opensource, logiciels libres et transition écologique.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Les informations présentes sur cette page sont issues d'une recherche personnelle.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Pour écrire en Markdown : Éditeur - Générateur de tableau 1 - Générateur de tableau 2.
Vous pouvez partager les articles du wiki avec l'ensemble de la communauté des internautes.
Les recherches sur la sécurité servent à administrer et protéger votre système informatique.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
De nombreux outils gratuits sont listés et disponibles dans la boîte à outils de Vision du web.
D'autres pages du wiki peuvent correspondre à vos attentes. La liste de toutes les pages du wiki.

SOUTENIR LE WIKI

Soutenir le wiki avec des Bitcoins.
Soutenir le wiki avec des Bitcoins Cash.
Soutenir le wiki avec des Bitcoins Gold.
Soutenir le wiki avec des Bitcore (BTX).
Soutenir le wiki avec des Blackcoins.
Soutenir le wiki avec des Bytecoins.
Soutenir le wiki avec des Clams.
Soutenir le wiki avec des Dash.
Soutenir le wiki avec des Monero.
Soutenir le wiki avec des Dogecoins.
Soutenir le wiki avec des Ethereum.
Soutenir le wiki avec des Ethereum Classique.
Soutenir le wiki avec des Litecoins.
Soutenir le wiki avec des Potcoins.
Soutenir le wiki avec des Solarcoins.
Soutenir le wiki avec des Zcash.