|
Trucs et astuces PHP (I) |
|
|
| Comment
afficher l'heure courante au format français* ? |
<?
setlocale("LC_TIME", "fr");
echo ucwords(strftime("%A %d %B %Y"));
?>
Affiche : Samedi 20 Juillet 2002
|
| Comment
connaître la taille d'un fichier situé sur un autre serveur ? |
<?
$fichier = join($fichier,file("http://www.site.com/index.php3"));
echo "La taille du fichier est de : ".strlen($fichier)." caractères";
?>
Affiche : La taille du fichier est de : 18405 caractères
|
| Comment trouver
une chaîne de caractères dans un fichier ? |
<?
$fichier = join($fichier,file("index.php3"));
if(eregi("php",$fichier))
echo "La chaîne a été trouvée";
else
echo "La chaîne n'a pas été trouvée";
?>
|
| Comment activer
et désactiver tous les messages d'erreur PHP ? |
Placez la directive error_reporting fixée à 0 avant tout autre code PHP. C'est une
précaution utile une fois l'application terminée et prête à être livrée
car les messages d'erreur PHP peuvent fournir des indications précieuses
aux pirates. Placez la valeur à 15
pendant le développement pour controler que toutes les variables sont
correctement initialisées.
<? error_reporting(0) ?>
|
| Comment
convertir une date Mysql au format français ? |
<?
$date = "2000-12-31";
echo date("d/m/Y",strtotime($date));
?>
Affiche : 31/12/2000
|
| Comment
calculer une date dans le futur ou le passé ? |
<?
setlocale("LC_TIME", "fr");
echo "Demain nous serons le
".ucwords(strftime("%A %d %B %Y",mktime(0,0,0,date("m"),date("d")+1,date("Y"))))." ";
echo "Hier nous étions le
".ucwords(strftime("%A %d %B %Y",mktime(0,0,0,date("m"),date("d")-1,date("Y"))))." ";
echo "Le mois dernier nous étions le
".ucwords(strftime("%A %d %B %Y",mktime(0,0,0,date("m")-1,date("d"),date("Y"))))." ";
echo "Le mois prochain nous serons le
".ucwords(strftime("%A %d %B %Y",mktime(0,0,0,date("m")+1,date("d"),date("Y"))))." ";
echo "L'an dernier à la même époque nous étions le
".ucwords(strftime("%A %d %B %Y",mktime(0,0,0,date("m"),date("d"),date("Y")-1)))." ";
echo "L'an prochain à la même époque nous serons le
".ucwords(strftime("%A %d %B %Y",mktime(0,0,0,date("m"),date("d"),date("Y")+1)))." ";
?>
Affiche : Demain nous serons le Dimanche 21 Juillet 2002 Hier
nous étions le Vendredi 19 Juillet 2002 Le mois dernier nous étions le
Jeudi 20 Juin 2002 Le mois prochain nous serons le Mardi 20 Août
2002 L'an dernier à la même époque nous étions le Vendredi 20 Juillet
2001 L'an prochain à la même époque nous serons le Dimanche 20 Juillet
2003
|
| Comment insérer
une image dans Mysql ? |
|
Soit une table "test" créée avec ces instructions (remarquer le
champ de type BLOB devant contenir les données) :
# Structure de la table test
CREATE TABLE test (
num_img int(10) unsigned DEFAULT '0' NOT NULL auto_increment,
data_img blob NOT NULL,
PRIMARY KEY (num_img),
KEY num_img (num_img)
);
Le code suivant place les données binaires de l'image dans une variable
(ici $data) et les sauvegarde dans le champ BLOB "data_img" puis les
envoie au navigateur. Le type MIME est ici "image/jpeg", mais il est
possible d'envoyer n'importe quel type de fichier (document PDF, Word...),
pour forcer par exemple un téléchargement disponible uniquement d'après
certaines conditions (inscription, paiement en ligne...).
<?
mysql_connect("localhost","","");
mysql_select_db("le_nom_de_votre_base");
$img = "image.jpg";
$fp = fopen($img,"r");
$data = fread($fp,filesize($img));
fclose($fp);
$data = addslashes($data);
mysql_query("INSERT INTO test (data_img) VALUES ('$data')");
//lecture des données
$result = mysql_query("SELECT data_img FROM test LIMIT 1");
header("Content-Type:image/jpeg");
$row = mysql_fetch_array($result);
echo $row["data_img"];
?>
|
| Comment
afficher dynamiquement les dimensions d'une image ? |
|
<?
$size = getimagesize("image.jpg");
?> <img src="image.jpg" <? echo $size[3] ?>> <? $size = getimagesize("http://www.site.com/image.jpg");
?>
<img src="http://www.site.com/image.jpg" <? echo $size[3] ?>>
|
| Comment
afficher un montant au format monétaire français ? |
|
<?
echo number_format(1000000,2,","," ")." d'euros"
?>
Affiche : 1 000 000,00 d'euros
|
| Comment
récupérer le contenu de plusieurs cases à cocher ? |
|
Pour récupérer les données d'un nombre indéterminé de champs de
formulaire portant le même nom, ajoutez [] au nom de ces champs :
<form name="form1" action="formres.php">
<input type="checkbox" name="tab[]" value="1">
<input type="checkbox" name="tab[]" value="2">
<input type="checkbox" name="tab[]" value="3">
<input type="submit" name="Submit" value="Envoyer">
</form>
La page fictive "formres.php", cible
du formulaire, contiendra un tableau $tab indexé numériquement. Exemples de
parcours de tableau :
<?
while (list(, $v) = each ($tab)) {
echo $v."<br>";
}
reset($tab);
foreach ($tab as $v) {
echo $v."<br>";
}
?>
Affiche : 1 2 3 si les 3 cases ont été cochées.
|
| Comment
récupérer l'extension d'un fichier ? |
|
<?
echo strrchr("image.jpg",".");
?>
Affiche : .jpg
|
| Comment
connaitre à coup sûr le type d'un fichier sur UNIX* ? |
En exécutant la commande native Unix "file nom_fichier" qui renvoie des
informations sur le fichier spécifié. En effet, le type MIME d'un fichier
uploadé est fourni par le client web, ce qui constitue un trou de sécurité
facile à contourner pour un pirate.
<?
if(is_uploaded_file($userfile)) {
if(!ereg("text",exec(escapeshellcmd("file $userfile")))) {
unlink($userfile);
echo "Désolé, seuls les fichiers texte sont autorisés !";
} else {
move_uploaded_file($userfile, "/upload");
}
?>
|
| Comment mettre
des données en cache pendant l'éxécution d'un script* ? |
|
Normalement readfile() affiche
intégralement le contenu du fichier lu. Cet exemple filtre les données
pour n'en récupérer que la partie qui nous intéresse avant de l'afficher
:
<?
function get_meteo ($sortie) { if (eregi("<!--debut meteo -->(.*)<!--fin meteo -->", $sortie, $meteo)) return "<pre>".strip_tags($meteo[0])."</pre>"; } ob_start("get_meteo"); readfile("http://www.site.com/meteo.php?ville=Perpignan"); ob_end_flush();
?>
|
| Comment
retrouver l'url absolue de la page courante* ? |
|
<?
echo "http://".$SERVER_NAME.$PHP_SELF;
?>
|
| Comment
alterner les couleurs des lignes d'un tableau HTML ? |
|
<? mysql_connect("localhost","","");
mysql_select_db("le_nom_de_votre_base");
$result = mysql_query("SELECT * FROM test");
$bgcoul = array("#B9B9FF", "#9999FF");
$i=0;
echo "<table>";
while($i<mysql_num_rows($result)) {
$row = mysql_fetch_object ($result);
echo "<tr bgcolor=".$bgcoul[$i%2]."><td>".$row->nom."</td></tr>";
$i++;
}
echo "</table>";
?>
|
| Comment
afficher la coloration syntaxique d'une page PHP ? |
|
Cette fonction est à utiliser avec précautions, le contenu du fichier
pouvant révéler des informations critiques comme les mots de passe d'accès
aux bases de données...
<?
highlight_file("script.php");
?>
Affiche :
<?
$bgcoul = 0;
echo "<table>";
while($row = mysql_fetch_array($result)) { $bgcoul = !$bgcoul;
$bgcoul ? "#B9B9FF" : "#9999FF";
echo "<tr
bgcolor=".$bgcoul."><td>".$row["nom"]."</td></tr>";
} echo "</table>";
?>
|
|
| Comment
supprimer les retours à la ligne d'une chaîne ? |
|
A appliquer avant toute comparaison de chaîne provenant d'un
fichier. Chaque ligne d'un fichier contenant un caractère invisible de fin
en plus (représenté par "\n" ou "\r"), la comparaison d'une ligne avec une
autre chaîne échouera systématiquement si ce caractère n'est pas supprimé.
Soit un fichier texte contenant ces lignes :
php
asp
jsp
html
Le code php suivant affichera :
<?
$fp = fopen("mots_cle.txt","r");
while(!feof($fp)) {
if(chop(fgets($fp,4096)) == "php") {
echo "La chaîne 'php' a été trouvée";
break;
}
}
fclose($fp);
?>
|
| Comment
afficher les retours à la ligne d'une chaîne en HTML ? |
|
<?
$paragraphe = "ligne1\nligne2\nligne3\n";
echo nl2br($paragraphe);
?>
Affiche : ligne1 ligne2 ligne3
|
| Comment
récupérer du contenu sur un site* ? |
|
<?
function get_meteo ($sortie) { if (eregi("<!--debut meteo -->(.*)<!--fin meteo -->", $sortie, $meteo)) return "<pre>".strip_tags($meteo[0])."</pre>"; } ob_start("get_meteo"); readfile("http://www.site.com/meteo.php?ville=Perpignan"); ob_end_flush();
?>
Récupère les données de la météo délimitées par les commentaires <!--debut meteo --> et <!--fin meteo --> sur un site et les
affiche sur le votre. Attention au copyright !
|
| Comment couper
une chaine trop longue dans un forum ou un livre d'or ? |
|
<?
$mot = "Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii !";
$mot = wordwrap( $mot, 30, "<br>", 1);
echo $mot;
?>
Affiche : Merciiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiii
! |