Blog of ChristoPHPe !
Bienvenue sur mon Blog !

Blog of ChristoPHPe !

[PHP] La météo de demain

31 juillet 2008 à 16:31, par Christophe

Bonjour :)
Je vais vous dévoiler une technique pour insérer la météo de demain sur votre site web !

le principe est assez simple :
- votre site fait appel à un site de météo, ce site vous renvoi la température etc… puis vous l’afficher, c’est simple comme ça, mais le code est un peu plus complexe ;)

Voici le code presque près à l’emploi :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
setlocale(LC_TIME, "fr_FR"); // ou "fr"
header('Content-Type: text/html; charset=utf-8');
 
$ville = "FRXX0157"; $vname="Istres";
$jours = 2; // mettez 3, vous verrez ;)
$url = "http://xoap.weather.com/weather/local/".$ville."?cc=*&unit=s&dayf=".$jours;
 
// Conversion Fahrenheit->Celsius
function f2c($t) { return round(($t-32)*5/9); }
 
// Lecture d'un fichier XML
function lit_xml($chaine,$isFile,$item,$champs) {
   // on lit le fichier ou la chaîne
   if($isFile) $chaine = @file_get_contents($chaine);
   if($chaine) {
      // on explode sur <item>
      $tmp = preg_split("/<\/?".$item.">/",$chaine);
      // pour chaque <item>
      for($i=1;$i<sizeof($tmp);$i++)
         // on lit les champs demandés <champ>
         foreach($champs as $champ) {
            $tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
            // on ajoute au tableau
            $tmp3[$champ][] = trim(@$tmp2[1]);
         }
      // et on retourne le tableau
      return @$tmp3;
   }
}
 
// Extraction primaire
$xml = lit_xml($url,true,"day d=.*",array("hi","low","part p=\"d\"","part p=\"n\""));
 
// Extraction des icones, messages et du taux d'humidité
for($i=1;$i<$jours;$i++) {
   $tmp = preg_split("/<\/?icon>/",$xml["part p=\"d\""][$i]);
   $xml["icond"][$i] = $tmp[1];
   $tmp = preg_split("/<\/?t>/",$xml["part p=\"d\""][$i]);
   $xml["altd"][$i] = $tmp[1];
   $tmp = preg_split("/<\/?hmid>/",$xml["part p=\"d\""][$i]);
   $xml["hmid"][$i] = $tmp[1];
   $tmp = preg_split("/<\/?icon>/",$xml["part p=\"n\""][$i]);
   $xml["iconn"][$i] = $tmp[1];
   $tmp = preg_split("/<\/?t>/",$xml["part p=\"n\""][$i]);
   $xml["altn"][$i] = $tmp[1];
}
 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>La M&eacute;t&eacute;o de demain</title>
</head>
 
<body>
<?php
for($i=1;$i<$jours;$i++) { ?>
    Jour du <?php echo utf8_encode(ucfirst(strftime("%A %d %B %Y",time()+$i*24*3600))); ?><br />
    Temp&eacute;rature Max: <?php echo ($xml["hi"][$i]=="N/A")?"Inconnue":f2c($xml["hi"][$i])."°C" ?><br />
    Temp&eacute;rature Min: <?php echo ($xml["low"][$i]=="N/A")?"Inconnue":f2c($xml["low"][$i])."°C" ?><br />
    Humidité: <?php echo ($xml["hmid"][$i]=="N/A")?"Inconnue":$xml["hmid"][$i]." %"?><br />&nbsp;<br />
    JOUR<br />
    <img src="./weather_img/<?php echo $xml["icond"][$i]; ?>.png" width="40" alt="<?php echo $xml["altd"][$i]; ?>" /><br />&nbsp;<br />
    NUIT<br />
    <img src="./weather_img/<?php echo $xml["iconn"][$i]; ?>.png" width="40" alt="<?php echo $xml["altn"][$i]; ?>" />
<hr />
<?php
}
?>
</body>
</html>

Ça, c’est pour la ville de Istres, la ville la plus proche de chez moi qui référencée par le site de la météo…
Donc vous allez probablement changer cette ville, pour changer, il faut trouver un code :
Pour Istres, c’est FRXX0157.
Pour trouver le code de votre ville, rendez-vous ici et dans le champs de recherche en haut, vous tapez votre ville, si il trouve rien, tapez une ville plus proche et plus grande de chez vous. Si il trouve, temps-mieux, cliquez-donc sur le lien sous la forme : Ville, Pays. Après, il ne vous reste plus qu’a récupérer le code ville dans l’URL, par exemple, toujours par la ville d’Istres :
http://www.weather.com/outlook/travel/businesstraveler/local/FRXX0157?from=search_city
le code est entre le slash (/) et le point d’interrogation (?)
Copiez-le donc, puis collez-le à la place… changez également le nom de la ville par le votre dans le code ;)

Pour les flémards, voici les codes des principales villes de France :
Paris : FRXX0076
Marseille : FRXX0059
Lyon : FRXX0055
Toulouse : FRXX0099
Nice : FRXX0073
Nantes : FRXX0072
Strasbourg : FRXX0095
Montpellier : FRXX0068
Bordeaux : FRXX0016
Lille : FRXX0052

Testez, et ça marche !
Mais… il doit y avoir des petites images non ?
Oui, en effet, il manque les images des temps: pluie, soleil, nuageux etc…
J’ai réussi à trouvé ses petites images en cherchant, et j’ai fais exprès de réduire l’image avec HTML et non pas sur l’image, pour vous permettre de pouvoir encore plus exploiter ça… :)

Donc vous pouvez vous procurer les images ici.

Voilà, le design n’est pas terrible, je vous laisse arranger ça :)
Merci à Asp-Php.net pour ce script.

Et ça donne ça

Si vous avez des questions, des bugs, n’hésitez pas à poster un commentaire ;)

[PHP] Forcer le téléchargement d’un Fichier

29 juillet 2008 à 19:25, par Christophe

Bonsoir !

Vous disposez par exemple d’un site photo ? et que vous voulez que quand l’utilisateur clique sur un lien, la photo se télécharge et ne s’affiche pas dans son navigateur ? c’est possible !

Voici le code tout chaud :

function download($file) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file) );
    header('Accept-Ranges: bytes');
    header('Content-Length: '.filesize($file) );
    readfile($file);
} 
 
if( isset($_GET['f']) &amp;&amp; !empty($_GET['f']) ){
 
	switch($_GET['f']){
		case 'fichier_01.jpg': // Fichier 01
			$file = 'fichier_01.jpg';
		break;
 
		case 'fichier_02.jpg': // Fichier 02
			$file = 'fichier_02.jpg';
		break;
 
		case 'programme.txt': // Fichier 03
			$file = 'programme.txt';
		break;
 
		// etc...
 
		default:
			$file = '';
		break;
	}
 
	if( !empty($file) ){
		download($file);
	} else {
		echo 'Erreur !';
	}
 
}

Voilà ajoutez des

case '...':
	$file = '...';
break;

à volonté !

Mais par contre, ne faites JAMAIS ça :

function download($file) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file) );
    header('Accept-Ranges: bytes');
    header('Content-Length: '.filesize($file) );
    readfile($file);
}
download($_GET['f']);

Pourquoi ? parce-que ce code dispose d’une faille, un utilisateur mal intentionné pourra très très facilement télécharger n’importe quel fichier sur votre serveur, récupérer le fichier de fonctions ou de config, il saura votre mot de passe MySQL, puis, il se connectera, supprimera la base, le site… enfin tout quoi…

Voilà ! soyez tout de même prudent avec ce code et essayez d’hacker votre site, sans aller jusqu’au bout bien sûr ^^

[PHP] Envoyer des e-Mails avec pièce jointe !

28 juillet 2008 à 17:08, par Christophe

Bonjour tout le monde,

Un jour ou l’autre, vous aurez besoin de vous servir des e-mail en PHP mais… avec une pièce jointe, or, ce système est un peu complexe, c’est pour cela que je vous donne une classe PHP :)

Téléchargez la classe ici

Une fois téléchargé, créez un autre fichier PHP avec cela dedans :

require('./mime_mail.class.php'); // inclusion de la classe
 
$fichier_attache1 = fread(fopen('votre_fichier.jpg', 'r'), filesize('votre_fichier.jpg')); // Fichier n°1
$fichier_attache2 = fread(fopen('document.doc', 'r'), filesize('document.doc')); // Fichier n°2
 
$mail = new mime_mail(); // Création d'un nouveau mail
$mail->to = 'votre-e-mail@fai.com'; // Adresse email de réception
$mail->subject = 'Test de mil avec Pièce-Jointe'; // Sujet
$mail->body = 'Ceci est un test d\'e-mail.'; // Corps du message
$mail->from = 'adresse@email.fr'; // Adresse email de l'expediteur (optionnel)
$mail->headers = 'Date: '; // Entetes supplementaires (optionnel)
$mail->attach($fichier_attache1, 'votre_fichier.jpg'); // fichier attache (optionnel)
$mail->attach($fichier_attache2, 'document.doc'); // fichier attache (optionnel)
$mail->send(); // envoi du message

Et voilà ;)
Vous recevrez un e-mail avec votre_fichier.jpg et document.doc en joint :)
Ah oui, j’ai oublié de préciser, ces deux fichiers doivent exister sur le serveur pour qu’ils soient joins au message ;)

Christophe ;)

[PHP] Savoir si un serveur est Online ou Offline (Monitoring)

27 juillet 2008 à 14:44, par Christophe

Salut à tous,

Je vais vous dénoncer une fonction pour savoir si un serveur sur le net est Online (en ligne) ou Offline (hors ligne, ou hors service), vérifiez tout d’abord auprès de votre hébergeur si la fonction fsockopen() de PHP est disponible (en général non sur des serveurs mutuels)

Voilà la fonction en PHP:

// Fonction is_online(), Pour savoir si un Host est online ou pas
function is_online($host, $port){
	$online = FALSE;
 
	$fp = @fsockopen($host, $port, $errno, $errstr, 1); // Se connecte à l'Host
	if($fp) {
		$online = TRUE; // Si la connexion n'a pas échouée
	}
 
	if ($online){ // Si c'est TRUE
	  return '<span style="color:#00FF00">Online</span>';
	} else { // Et si c'est FALSE
	  return '<span style="color:#FF0000">Offline</span>';
	}
}

Après pour l’utiliser, c’est simple :

echo is_online('google.fr', 80);

à la place, de google, vous pouvez mettre se que vous voulez, y compris des adresses IP, 80, c’est le port, et celui-ci correspond à HTTP.
Vous pouvez utiliser cette fonction pour des serveurs FTP si vous le souhaitez, mais il faudra remplacer 80 par 21 ;)

Voilà, restez connecté !

[PHP] Petit calendrier design en Javascript

26 juillet 2008 à 13:37, par Christophe

Salut à tous,

Il y a pas longtemps, j’ai eu envi de faire quelque chose de design et sympa en même temps, j’ai donc pensé à un calendrier, comme celui-ci :

Donc nous allons commencer par l’HTML, la base de notre calendrier:

<div class="calendrier">
    <span id="day">Loading...</span>
    <span id="number">00</span>
    <span id="month">Loading...</span>
    <span id="hours">00:00:</span><span id="seconds">00</span>
</div>

Maintenant, le CSS, la mise en forme du calendrier, pour qu’il soit beau en fait ;)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
.calendrier {
background-image:url(./images/calendrier.png);
width:120px;
height:109px;
padding-top:30px;
text-align:center;
}
.calendrier #day {
color:#000000;
font-weight:bold;
font-family:Geneva, Arial, Helvetica, sans-serif;
font-size:14px;
}
.calendrier #number {
color:#EE0000;
font-weight:bold;
font-family:Geneva, Arial, Helvetica, sans-serif;
font-size:40px;
margin-bottom:-10px;
}
.calendrier #month {
color:#000000;
font-weight:bold;
font-family:Geneva, Arial, Helvetica, sans-serif;
font-size:14px;
}
.calendrier #hours, #seconds {
color:#666666;
font-family:"Courier New", Courier, monospace;
font-size:12px;
}

L’image d’arrière-plan se trouve ici.

Maintenant, vous avez la base, il ne reste plus que le Javascript :)

Voir le Code JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function showDate() {
	var jours = new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
	var mois = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
 
function showDate() {
		var date = new Date();
		var jourFR = jours[date.getDay()];
		var numero_jour = date.getDate();
		var moisFR = mois[date.getMonth()];
 
		var heures = date.getHours();
		if(heures < 10) {
			heures = "0" + heures;
		}
 
		var minutes = date.getMinutes();
		if(minutes < 10) {
			minutes = "0" + minutes;
		}
 
		var secondes = date.getSeconds();
		if(secondes < 10) {
			secondes = "0" + secondes;
		}
 
		var heures_et_minutes = heures + ":" + minutes + ":";
 
		document.getElementById("day").innerHTML = jourFR;
		document.getElementById("number").innerHTML = numero_jour;
		document.getElementById("month").innerHTML = moisFR;
		document.getElementById("hours").innerHTML = heures_et_minutes;
		document.getElementById("seconds").innerHTML = secondes;
}
setInterval('showDate()', 1000); // Recharge la fonction toute les secondes

Donc là, pareil que les autres articles, soit vous mettez ce code dans votre fichier JS de votre site ou vous mettez ça entre les balises

<script type="text/javascript"></script>

Et voilà, votre calendrier est fonctionnel !

Mais ? Mais pourquoi au début on peut voir “Loading…” ??
Parce-que la fonction Javascript showDate() est chargé 1000 millisecondes (1s) après le chargement de la page, pour que cette fonction soit chargé au chargement, vous devez ajouter

 onload="showDate();"

à votre balise body ;)

et Exemple ici ;)

Bye et tenez-vous à jour !

« Articles précédents  | 




-->