Trucs et astuces PHP (II) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment sécuriser l'upload de fichiers ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Exemple de code comportant des failles de sécurité : Le même code sécurisé :<? if(!$userfile && $userfile != "none") { //il peut s'agir d'une simple chaîne de caractères copy($userfile, $userfile_name);//risque d'écrasement et de déplacement de fichier n'importe où } ?> <? if(is_uploaded_file($userfile)) { //vérifie qu'il s'agit d'un fichier téléchargé et non d'une simple chaîne if(!file_exists("/upload/$userfile")) { //contrôle une tentative d'écrasement de fichier move_uploaded_file($userfile, "/upload");//déplace le fichier téléchargé Vous devez également contrôler le type et l'extension du fichier. Un
script php (ou autre) peut contenir des commandes de suppression de
fichiers !
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment générer du code javascript à la volée ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Crée un tableau javascript multi-dimensionnel à partir d'un tableau PHP également multi-dimensionnel : <script language="JavaScript"> <!-- tab = new Array(); <? $tab = array ("agrumes" => array ( "orange", "pamplemousse", "ananas") ,"jours" => array ( "lundi", "mardi", "mercredi") ,"mois" => array ( "janvier", "février", "mars") ); while(list($k,$v) = each($tab)) { echo "tab['$k'] = new Array()\n"; echo "tab['$k'][0] = '$v[0]'\n"; echo "tab['$k'][1] = '$v[1]'\n"; echo "tab['$k'][2] = '$v[2]'\n"; } ?> //--> </script> Affiche dans le code source de la page HTML : <? <script language="JavaScript"> Crée un lien javascript : <? onClick="location.href='<? echo $HTTP_REFERER ?>'"; ?>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment vérifier un nom de domaine en PHP ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Il suffit d'ouvrir un socket sur le port 43 d'un serveur Whois ("Qui est-ce ?" en anglais) et de lui passer cette requête : "votre_nom_de_domaine", puis de lire le résultat ligne par ligne avec la fonction fgets, exactement comme on le ferait avec un fichier. Serveurs Whois : whois.networksolutions.com, whois.internic.fr, whois.afnic.fr... <? $fp = fsockopen($serveur, 43, $errno,$errstr, 10); if (!$fp) { echo "$errstr ($errno)"; } else { fputs($fp, "php.net\r\n"); while (!feof($fp)) { echo fgets($fp,10000); } fclose ($fp); } ?> Vous pouvez tester le programme complet ou le télécharger.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment retrouver le nom d'hôte correspondant à une adresse IP* ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? echo "Le nom d'hôte correspondant à votre adresse IP $REMOTE_ADDR est : " Affiche : Le nom d'hôte correspondant à votre adresse IP 62.147.160.232 (nas-cbv-9-62-147-160-232.dial.proxad.net) est : nas-cbv-9-62-147-160-232.dial.proxad.net
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment supprimer les antislashs d'une chaîne ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PHP échappe systématiquement les caractères sensibles provenant des GPC (GetPostCookie) avec un antislash (\) pour des raisons de sécurité. Pour retrouver le texte d'origine, utilisez stripslashes() :
Affiche : '\"
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment échapper les caractères spéciaux dans un formulaire ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Si le navigateur ne trouve pas la balise de fin >, il n'affichera pas le champ texte. C'est pourquoi il est nécessaire d'encoder les caractères qui ont une signification spéciale en HTML.. Même remarque pour ". <input type="text" name="email" value="<? echo htmlspecialchars("<adresse@email>") ?>"> Affiche :
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment supprimer un cookie appartenant à votre domaine ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? setcookie ("session_id", md5 (uniqid (rand())), time()+3600); //cookie envoyé pour une session
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment effectuer une redirection avec des paramètres ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? $url = "http://".$SERVER_NAME ."/redirect.php?" . rawurlencode("nom=&prénom="); header("location:$url"); exit; ?>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment utiliser PHP en ligne de commande ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
@echo off c:\php\php.exe -q c:\web\quotations.php > c:\web\quotations.html L'option -q désactive l'envoi du type MIME (par défaut text/html, inutile ici puisque destiné au navigateur). Une page "quotations.html" sera créée dans le répertoire racine à partir du script "quotations.php". Notez que les variables d'environnement ne sont pas disponibles dans cette utilisation. De plus, PHP doit être exécutable.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment récupérer le nom d'utilisateur avec une authentification par htaccess* ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment supprimer l'extension d'un nom de fichier ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? $str = "image.jpg"; echo substr($str, 0, strrpos($str,".")); ?> Affiche le nom du fichier sans l'extension : "image"
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment afficher le résultat d'une requête SQL dans une liste déroulante ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Affiche :<? mysql_connect("localhost","",""); mysql_select_db("le_nom_de_votre_base"); $result = mysql_query("SELECT * FROM test"); echo "<form><select name=\"result\">\n"; while($row = mysql_fetch_array($result)) { echo "<option value=\"".$row["id"]."\">".$row["fruit"]."</option>\n"; } echo "</select></form>"; ?>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment augmenter la durée de vie d'un script* ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? set_time_limit(500); //fixe un délai maximum d'exécution de 500 secondes soit 3 minutes. ?>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment retrouver la valeur hexadécimale d'un caractère ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? echo dechex(ord("a")); //encode tous les caractères echo str_replace("%","",rawurlencode("é@")); //encode seulement les caractères spéciaux ?>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment retrouver le nom d'un fichier à partir du chemin complet ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? Affiche : fichier.php
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment découper une chaîne avec différents délimiteurs ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
. <? $str = "chaîne à découper, suivant la ponctuation"; $part = strtok($str," "); while ($part) { echo $part,"<br>"; $part = strtok(","); } ?> Affiche :
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment compléter une chaîne avec une autre chaîne ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Affiche : 012345****<? $card_number = substr("0123456789",0,6); echo str_pad($card_number,10,"*"); ?>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment afficher la date de dernière modification d'un fichier ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? echo "Modifié le : ".date("d/m/Y",filemtime("index.php")); ?> Affiche : Modifié le : 22/01/2002
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment afficher le nuancier des 256 couleurs compatibles Web ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? $couleur = array("00", "33", "66", "99", "CC", "FF"); for($rouge = 0; $rouge < count($couleur); $rouge++) { echo "<TABLE>\n"; for($vert = 0; $vert < count($couleur); $vert++) { echo "<TR>\n"; for($bleu = 0; $bleu < count($couleur); $bleu++) { $Cellcouleur = $couleur[$rouge] . $couleur[$vert] . $couleur[$bleu]; echo "<TD BGCOLOR=\"#$Cellcouleur\">"; echo "<TT>$Cellcouleur</TT>"; echo "</TD>\n"; } echo "</TR>\n"; } echo "</TABLE>\n"; } ?>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment décomposer les différentes parties d'une URL ? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<? $url = parse_url("http://www.php.net/downloads.php"); foreach($url as $v) echo $v,"<br>"; ?> Affiche : |