MyPlanet v0.3 beta2
Par syeric, lundi 20 avril 2009 à 20:01 :: PHP
Nouvelle version pour correction de bug
Par syeric, lundi 20 avril 2009 à 20:01 :: PHP
Nouvelle version pour correction de bug
Par syeric, samedi 18 octobre 2008 à 13:30 :: PHP
Je suis heureux de vous annoncer la sortie d'une nouvelle version de MyPlanet !
Par syeric, samedi 6 septembre 2008 à 11:36 :: PHP
Vous êtes allergique à javascript ? Un tour dans la doc de Google Maps vous a découragé ? Vous n'avez rien contre php ? Alors ce billet est pour vous !
Par syeric, jeudi 5 juin 2008 à 12:03 :: PHP
Déjà, désolé pour mon silence sur le sujet... Mais MyPlanet est loin d'être inactif ! Je vais vous expliquer un peu ce que je fais actuellement...
Par syeric, mardi 13 mai 2008 à 15:57 :: PHP
Bonjour à tous ! C'est avec plaisir que je vous présente l'alpha3 de mini-planet v0.2. En voici le programme...
Par syeric, lundi 5 mai 2008 à 18:46 :: PHP
Voici une nouvelle version du mini-planet. Je vais d'ailleurs peut être le renommer en "my planet", car finalement, ce n'est pas un planet au sens strict du terme mais plutôt un agrégateur permettant de partager Sa Planète sur le net.
Par syeric, mardi 29 avril 2008 à 10:16 :: PHP
Petit développement pour un "mini planet"
Par syeric, samedi 8 mars 2008 à 10:55 :: PHP
Salut
Petite fonction php que tout le monde connait sauf moi.
Par syeric, vendredi 5 octobre 2007 à 20:46 :: PHP
Bonjour !
Alors je vous l'annonce : je suis un nul en php :D C'est donc tout naturellement que j'ai proposé au BDE de mon école de leur faire un site digne de ce nom. On me dit alors : ce serait sympa d'avoir les dernières nouvelles en page d'accueil ! Bon, OK, mon camarade le capitaine Tsly sait faire ! Il me donne donc le tip pour afficher un flux rss. Clubic nous donne la solution ici.
Bon, alors je commence tranquille à insérer ça dans mon php. Tout va bien jusqu'au moment où j'affiche. Là les caractères accentués sont transformés en affreux points d'interrogation. Je tergiverse, plonge même dans ma config d'apache pour voir. Mais rien :( J'essaye avec différents flux pour voir si ce n'est pas une rébellion anti unicode mais non...
Alors comme en maths, quand ça ne va plus, il faut revenir à la définition. En php, elle est plutôt consistante, c'est le site php.net :D Et là je tombe sur la fonction magique :
[php]
Par syeric, mercredi 16 mai 2007 à 15:49 :: PHP
Satut !
Mon camarade de linuxpourlesnuls llooll et moi même avons développé un script qui permet d'uploader une image et d'en générer une miniature, un peu à la manière de rockhosting par exemple. Nous avons fait une version pour phpbb, qui va donner en retour le BBcode à insérer dans un post, et une version wiki (dokuwiki, je sais pas si la syntaxe est la même sur tous les systèmes de wiki) qui permet en plus de choisir la mise en page.
Pour le mettre en place, je vous recommande d'utiliser un ftp différent de votre forum. En effet laisser un moyen d'entrée est toujours délicat. Donc sur ce ftp, free par exemple, il faut créer deux répertoires à la racine, pics et minis, qui vont contenir respectivement les images de taille originale et les miniatures. Il faut ensuite mettre le script ci-dessous, par exemple upload.php, à la racine. Certains champs sont à changer pour votre site ;-) En l'état, seuls png et jpeg sont acceptés. Mais accepter des gifs est facile, je vous laisse le faire ;-) Pour une meilleure lisibilité du code, faites un copier / coller dans un fichier ;-) Une remarque, php n'est pas sensible à l'indentation mais je l'ai fait pour que ce soit plus facile à lire et à déboguer ;-)
[php]
<?php
//Création de la fonction str_split si PHP < 5
if (!function_exists("str_split"))
{
function str_split($str,$length = 1)
{
if ($length < 1) return false;
$strlen = strlen($str);
$ret = array();
for ($i = 0; $i < $strlen; $i += $length)
{
$ret[] = substr($str,$i,$length);
}
return $ret;
}
}
//Récupération du chemin actuel
$pos=strrpos($_SERVER['REQUEST_URI'],"/");
$chemin="http://".$_SERVER['HTTP_HOST'].substr($_SERVER['REQUEST_URI'],0,$pos)."/";
// on défini le répertoire où sont stockées les images de grande taille
$dir = 'pics';
// on défini le répertoire où seront stockées les miniatures
$dir_mini = 'minis';
// on défini une variable $ratio qui vaudra 150 dans notre cas (150 pixels). En fait, pour nos miniatures, nous allons respecter le ratio de l'image originale, mais nous allons forcer sa taille à 150 pixels, soit en hauteur soit en largeur (tout dépend de l'orientation de notre image : paysage ou portrait).
$ratio = 150;
$liste = "abcdefghijklmnopqrstuvwxyz0123456789";
$liste=str_split($liste);
// on teste si le formulaire permettant d'uploader un fichier a été soumis
if (isset($_POST['ok'])==1)
{
// on teste si le champ permettant de soumettre un fichier est vide ou non
if (empty($_FILES['image']['tmp_name']))
{
// si oui, on affiche un petit message d'erreur
$erreur = 'Aucun fichier envoyé.';
}
else
{
$NomImage = "";
while(strlen($NomImage) != 8)
{
$NomImage .= $liste[rand(0,35)];
}
$file_upload=$NomImage;
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier (je vous suggère de regarder la documentation de la fonction getimagesize pour de plus amples informations)
$tableau = @getimagesize($_FILES['image']['tmp_name']);
if ($tableau == FALSE)
{
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['image']['tmp_name']);
$erreur = 'Votre fichier n\'est pas une image.';
}
else
{
$extension_fichier = array_pop(explode(".", $_FILES['image']['name']));
$file_upload.=".".$extension_fichier;
// on teste le type de notre image : jpeg ou png
if ($tableau[2] == 2 || $tableau[2] == 3)
{
// si on a déjà un fichier qui porte le même nom que le fichier que l'on tente d'uploader, on modifie le nom du fichier que l'on upload
if (is_file('pics/'.$file_upload)) $file_upload = '_'.$file_upload;
// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille
copy ($_FILES['image']['tmp_name'], $dir.'/'.$file_upload);
// il nous reste maintenant à générer la miniature
//on regarde si les dimensions sont pas inférieures a 150 pixels
if (($tableau[0] < $ratio) && ($tableau[1] < $ratio))
{
//si c'est le cas, ben on copie aussi le fichier dans minis
copy ($_FILES['image']['tmp_name'], $dir_mini.'/'.$file_upload);
}
else
{
if(($tableau[0] < $ratio) && ($tableau[1] > $ratio))
{
//si l'une des dimensions est inferieure au ratio
if ($tableau[2] == 2) // si notre image est de type jpeg
{
$src = imagecreatefromjpeg($dir.'/'.$file_upload);
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
imagejpeg ($im, $dir_mini.'/'.$file_upload);
}
elseif ($tableau[2] == 3)
{
$src = imagecreatefrompng($dir.'/'.$file_upload);
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
imagepng ($im, $dir_mini.'/'.$file_upload);
}
}
elseif(($tableau[0] > $ratio) && ($tableau[1] < $ratio))
{
if ($tableau[2] == 2) // si notre image est de type jpeg
{
$src = imagecreatefromjpeg($dir.'/'.$file_upload);
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
imagejpeg ($im, $dir_mini.'/'.$file_upload);
}
elseif ($tableau[2] == 3)
{
$src = imagecreatefrompng($dir.'/'.$file_upload);
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
imagepng ($im, $dir_mini.'/'.$file_upload);
}
}
else
{
if ($tableau[2] == 2)
{
// on crée une image à partir de notre grande image à l'aide de la librairie GD
$src = imagecreatefromjpeg($dir.'/'.$file_upload);
// on teste si notre image est de type paysage ou portrait
if ($tableau[0] > $tableau[1])
{
$im = imagecreatetruecolor($ratio,round(($ratio*$tableau[1])/$tableau[0]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round(($ratio/$tableau[0])*$tableau[1]), $tableau[0], $tableau[1]);
}
else
{
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]),$ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round($tableau[0]*($ratio/$tableau[1])), $ratio, $tableau[0], $tableau[1]);
}
// on copie notre fichier généré dans le répertoire des miniatures
imagejpeg ($im, $dir_mini.'/'.$file_upload);
}
elseif ($tableau[2] == 3)
{
$src = imagecreatefrompng($dir.'/'.$file_upload);
if ($tableau[0] > $tableau[1])
{
$im = imagecreatetruecolor($ratio,round(($ratio*$tableau[1])/$tableau[0]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round(($ratio/$tableau[0])*$tableau[1]), $tableau[0], $tableau[1]);
}
else
{
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]),$ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round($tableau[0]*($ratio/$tableau[1])), $ratio, $tableau[0], $tableau[1]);
}
imagepng ($im, $dir_mini.'/'.$file_upload);
}
}
}
// on redirige l'administrateur vers l'accueil de la partie admin
//header('location: index.php');
//Génération du BBCode
echo "<img src=\"url de votre logo\" width=\"781\" height=\"67\"><br><br><form name=\"up\"><input type=\"textarea\" name=\"txt2paste\" value=\"[url=".$chemin.$dir."/".$file_upload."][img]".$chemin.$dir_mini."/".$file_upload."[/img][/url]\" readlony size=\"100\"></form><input type=\"button\" onclick=\"javascript:document.up.txt2paste.select();\"
style=\"font-family: Arial,Verdana,Helvetica;font-size: 11px; color:#330033 ;font-weight:bold;\"
value=\"Tout sélectionner\"><br><br>Après avoir tout sélectionné, n'oubliez pas de copier ! Puis collez le dans la fenêtre de postage</font></p><br><br><br><br><br><br><input type=\"button\" value=\"Fermer la fenêtre\" onclick=\"window.close()\" />";
exit();
}
else
{
// si notre image n'est pas de type jpeg ou png, on supprime le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['image']['tmp_name']);
$erreur = 'Votre image est d\'un format non supporté.';
}
}
}
}
?>
<form method="post" enctype="multipart/form-data" target="_self">
<img style="width: 781px; height: 67px;" alt="logo" src="url de votre logo"><br>
<br>Bienvenue sur l'applet d'upload d'image de votre site !<br>
<br>Choisissez votre image (Attention, format jpeg ou png)<br>
<br>Envoyez puis faites un copier / coller de l'INTEGRALITE du code qui vous est fourni <br> (penser au clic droit, "sélectionner tout")<br>
<br>
<br>
<table width="100%">
<tbody>
<tr>
<input name="ok" value="1" type="hidden">
Sélectionnez ici votre image !<br><br>
<input name="image" type="file"> <input name="go" value="Envoyer" type="submit">
</tr>
</tbody>
</table>
</form>
<?
if (isset($erreur))
{
echo "<b><font color=\"red\">!!!!! ".$erreur." !!!!</b><br>";
}
?>
Maintenant la variante pour wiki. Elle se met en place exactement de la même manière.
[php]
<?php
//Création de la fonction str_split si PHP < 5
if (!function_exists("str_split"))
{
function str_split($str,$length = 1)
{
if ($length < 1) return false;
$strlen = strlen($str);
$ret = array();
for ($i = 0; $i < $strlen; $i += $length)
{
$ret[] = substr($str,$i,$length);
}
return $ret;
}
}
//Récupération du chemin actuel
$pos=strrpos($_SERVER['REQUEST_URI'],"/");
$chemin="http://".$_SERVER['HTTP_HOST'].substr($_SERVER['REQUEST_URI'],0,$pos)."/";
// on défini le répertoire où sont stockées les images de grande taille
$dir = 'pics';
// on défini le répertoire où seront stockées les miniatures
$dir_mini = 'minis';
// on défini une variable $ratio qui vaudra 150 dans notre cas (150 pixels). En fait, pour nos miniatures, nous allons respecter le ratio de l'image originale, mais nous allons forcer sa taille à 150 pixels, soit en hauteur soit en largeur (tout dépend de l'orientation de notre image : paysage ou portrait).
$ratio = 150;
$liste = "abcdefghijklmnopqrstuvwxyz0123456789";
$liste=str_split($liste);
// on teste si le formulaire permettant d'uploader un fichier a été soumis
if (isset($_POST['ok'])==1)
{
// on teste si le champ permettant de soumettre un fichier est vide ou non
if (empty($_FILES['image']['tmp_name']))
{
// si oui, on affiche un petit message d'erreur
$erreur = 'Aucun fichier envoyé.';
}
elseif (isset($_POST['position'])==0)
{
$erreur = 'Aucune position spécifiée';
}
else
{
$NomImage = "";
while(strlen($NomImage) != 8)
{
$NomImage .= $liste[rand(0,35)];
}
$file_upload=$NomImage;
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier (je vous suggère de regarder la documentation de la fonction getimagesize pour de plus amples informations)
$tableau = @getimagesize($_FILES['image']['tmp_name']);
if ($tableau == FALSE)
{
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['image']['tmp_name']);
$erreur = 'Votre fichier n\'est pas une image.';
}
else
{
$extension_fichier = array_pop(explode(".", $_FILES['image']['name']));
$file_upload.=".".$extension_fichier;
// on teste le type de notre image : jpeg ou png
if ($tableau[2] == 2 || $tableau[2] == 3)
{
// si on a déjà un fichier qui porte le même nom que le fichier que l'on tente d'uploader, on modifie le nom du fichier que l'on upload
if (is_file('pics/'.$file_upload)) $file_upload = '_'.$file_upload;
// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille
copy ($_FILES['image']['tmp_name'], $dir.'/'.$file_upload);
// il nous reste maintenant à générer la miniature
//on regarde si les dimensions sont pas inférieures a 150 pixels
if (($tableau[0] < $ratio) && ($tableau[1] < $ratio))
{
//si c'est le cas, ben on copie aussi le fichier dans minis
copy ($_FILES['image']['tmp_name'], $dir_mini.'/'.$file_upload);
}
else
{
if(($tableau[0] < $ratio) && ($tableau[1] > $ratio))
{
//si l'une des dimensions est inferieure au ratio
if ($tableau[2] == 2) // si notre image est de type jpeg
{
$src = imagecreatefromjpeg($dir.'/'.$file_upload);
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
imagejpeg ($im, $dir_mini.'/'.$file_upload);
}
elseif ($tableau[2] == 3)
{
$src = imagecreatefrompng($dir.'/'.$file_upload);
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
imagepng ($im, $dir_mini.'/'.$file_upload);
}
}
elseif(($tableau[0] > $ratio) && ($tableau[1] < $ratio))
{
if ($tableau[2] == 2) // si notre image est de type jpeg
{
$src = imagecreatefromjpeg($dir.'/'.$file_upload);
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
imagejpeg ($im, $dir_mini.'/'.$file_upload);
}
elseif ($tableau[2] == 3)
{
$src = imagecreatefrompng($dir.'/'.$file_upload);
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
imagepng ($im, $dir_mini.'/'.$file_upload);
}
}
else
{
if ($tableau[2] == 2)
{
// on crée une image à partir de notre grande image à l'aide de la librairie GD
$src = imagecreatefromjpeg($dir.'/'.$file_upload);
// on teste si notre image est de type paysage ou portrait
if ($tableau[0] > $tableau[1])
{
$im = imagecreatetruecolor($ratio,round(($ratio*$tableau[1])/$tableau[0]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round(($ratio/$tableau[0])*$tableau[1]), $tableau[0], $tableau[1]);
}
else
{
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]),$ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round($tableau[0]*($ratio/$tableau[1])), $ratio, $tableau[0], $tableau[1]);
}
// on copie notre fichier généré dans le répertoire des miniatures
imagejpeg ($im, $dir_mini.'/'.$file_upload);
}
elseif ($tableau[2] == 3)
{
$src = imagecreatefrompng($dir.'/'.$file_upload);
if ($tableau[0] > $tableau[1])
{
$im = imagecreatetruecolor($ratio,round(($ratio*$tableau[1])/$tableau[0]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round(($ratio/$tableau[0])*$tableau[1]), $tableau[0], $tableau[1]);
}
else
{
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]),$ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round($tableau[0]*($ratio/$tableau[1])), $ratio, $tableau[0], $tableau[1]);
}
imagepng ($im, $dir_mini.'/'.$file_upload);
}
}
}
// on redirige l'administrateur vers l'accueil de la partie admin
//header('location: index.php');
//Génération du BBCode
if (($_POST['position'])=='gauche')
{
echo "<img src=\"url de votre logo\" width=\"X\" height=\"Y\"><br><br><form name=\"up\"><input type=\"textarea\" name=\"txt2paste\" value=\"[[".$chemin.$dir."/".$file_upload."|{{".$chemin.$dir_mini."/".$file_upload."}}]]\" readlony size=\"100\"></form><input type=\"button\" onclick=\"javascript:document.up.txt2paste.select();\" style=\"font-family: Arial,Verdana,Helvetica;font-size: 11px; color:#330033 ;font-weight:bold;\" value=\"Tout sélectionner\"><br><br>Après avoir tout sélectionné, n'oubliez pas de copier ! Puis collez le dans la fenêtre de postage</font></p><br><br><br><br><br><br><input type=\"button\" value=\"Fermer la fenêtre\" onclick=\"window.close()\" />";
exit();
}
elseif (($_POST['position'])=='centre')
{
echo "<img src=\"url de votre logo\" width=\"X\" height=\"Y\"><br><br><form name=\"up\"><input type=\"textarea\" name=\"txt2paste\" value=\"[[".$chemin.$dir."/".$file_upload."|{{ ".$chemin.$dir_mini."/".$file_upload." }}]]\" readlony size=\"100\"></form><input type=\"button\" onclick=\"javascript:document.up.txt2paste.select();\" style=\"font-family: Arial,Verdana,Helvetica;font-size: 11px; color:#330033 ;font-weight:bold;\" value=\"Tout sélectionner\"><br><br>Après avoir tout sélectionné, n'oubliez pas de copier ! Puis collez le dans la fenêtre de postage</font></p><br><br><br><br><br><br><input type=\"button\" value=\"Fermer la fenêtre\" onclick=\"window.close()\" />";
exit();
}
elseif (($_POST['position'])=='droite')
{
echo "<img src=\"url de votre logo\" width=\"X\" height=\"Y\"><br><br><form name=\"up\"><input type=\"textarea\" name=\"txt2paste\" value=\"[[".$chemin.$dir."/".$file_upload."|{{ ".$chemin.$dir_mini."/".$file_upload."}}]]\" readlony size=\"100\"></form><input type=\"button\" onclick=\"javascript:document.up.txt2paste.select();\" style=\"font-family: Arial,Verdana,Helvetica;font-size: 11px; color:#330033 ;font-weight:bold;\" value=\"Tout sélectionner\"><br><br>Après avoir tout sélectionné, n'oubliez pas de copier ! Puis collez le dans la fenêtre de postage</font></p><br><br><br><br><br><br><input type=\"button\" value=\"Fermer la fenêtre\" onclick=\"window.close()\" />";
exit();
}
}
else
{
// si notre image n'est pas de type jpeg ou png, on supprime le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['image']['tmp_name']);
$erreur = 'Votre image est d\'un format non supporté.';
}
}
}
}
?>
<form method="post" enctype="multipart/form-data" target="_self">
<img style="width: Xpx; height: Ypx;" alt="logo" src="url de votre logo"><br>
<br>Bienvenue sur l'applet d'upload d'image de nom du site!<br>
<br>Choisissez votre image (Attention, format jpeg ou png)<br>
<br>Choisissez la position de votre image dans l'article (gauche, centré ou droite)</b>
<br>Envoyez puis faites un copier / coller de l'INTEGRALITE du code qui vous est fourni <br> (penser au clic droit, "sélectionner tout")<br>
<br>
<br>
<table width="100%">
<tbody>
<tr>
<input name="ok" value="1" type="hidden">
Sélectionnez ici votre image !<br><br>
<input name="image" type="file">
<br>
<br>Choisissez la position de votre image !<br>
<input name="position" type="radio" value="gauche"> A gauche<br>
<input name="position" type="radio" value="centre"> Centré<br>
<input name="position" type="radio" value="droite"> A droite<br><br>
<input name="go" value="Envoyer" type="submit">
</tr>
</tbody>
</table>
</form>
<?
if (isset($erreur))
{
echo "<b><font color=\"red\">!!!!! ".$erreur." !!!!</b><br>";
}
?>
Et voila !
A bientot !
Sylvain