Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Site Web > PHP > Vos Fonctions ou astuces > Lecture du sujet

Vos Fonctions ou astuces

Vous devez être inscrit pour pouvoir poster des messages

Page : Précédente  1  2  3  ...  93  94  95  96  97  98  99  100  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : Précédente  1  2  3  ...  93  94  95  96  97  98  99  100  Suivante
Hors ligne mykeys # Posté le 05/10/2008 à 04:02:16
Unfaithful destiny
Avatar
Validateurs
Reprise du dernier message de la page précédente :
Citation : Jeremie78
change un module par un "/" en C .. tu verras. Et pourtant, c'est pas de l'assembleur :p .
Après, ça dépend des langages pour ce genre de détails.



Sur les processeurs Intel, les instructions DIV et IDIV (divisions entières) retournent à la fois le résultat de la division et son quotient dans deux registres différents. Mais les deux sont calculés en même temps.

Citation
The div instruction computes an unsigned division. If the operand is an eight bit operand div divides the ax register by the operand leaving the quotient in al and the remainder (modulo) in ah. If the operand is a 16 bit quantity then the div instruction divides the 32 bit quantity in dx:ax by the operand leaving the quotient in ax and the remainder in . With 32 bit operands (on the 80386 and later) div divides the 64 bit value in edx:eax by the operand leaving the quotient in eax and the remainder in edx.


Du coup, si on a toujours les deux valeurs en même temps, tout dépend de ton compilateur ^^ .

Mais bon, PHP ici reste un langage interprété. Contrairement à un environnement ou les additions-soustractions peuvent être effectuées en moins d'un cycle d'horloge, celles de PHP sont lentes. Ce qui fait qu'on ne peut rien prédire sur la rapidité d'une instruction par rapport à une autre (enfin un calcul de trois lignes sera plus lent qu'une simple opération :p ).

Image utilisateur
Pas mal, hein?

Dites-vous que ces résultats sont les minimums, les serveurs de speedtest.net semblent surchargés :D .
 
Hors ligne Jeremie78 # Posté le 05/10/2008 à 14:08:56
Powered by GNU/Linux
Groupe : Membres
Très intéressant :)

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Barbary # Posté le 17/10/2008 à 19:29:38

Avatar
Groupe : Membres
Ma classe SQL prise je sais plus trop ou j'y ai fait quelques modifications:
Code : PHP
  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
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
/**
 *  Moteur de gestion de MySQL
 *
 *  @author Louis "Barbary" DEBRAINE <louisdebraine@hotmail.com>
 *  @copyright ©Barbary, Traspian 2008
 *  @link http://traspian.fr.nf
 */
 
class TraSQL {
	
    /**
     *    Nombre de requétes
     * 
     *    @acces public
     *    @var string
     */    
    public $nbr_queries = 0;


	    /**
     * Connexion à la base de donnée
     *
     * @param string $host --> Serveur MySQL
     * @param string $user --> Utilisateur de la BDD
     * @param string $pass --> Mot de passe
     * @param string $db --> Base de donnée
     * @access public
     * @return true
     */
    public function __construct($host,$user,$pass,$db)
        {
        $this->connect = mysql_connect($host,$user,$pass); // On se connecte au serveur.
        if ($this->connect != FALSE) // Si la connexion n'a pas foiré, on passe à la selection de la Base de donnée.
            {
            $this->db = mysql_select_db($db,$this->connect); // On selectionne la BDD.

			$this->sql_query('SET NAMES utf8'); // On demande au serveur d'envoyer de traiter les données en utf-8.

            if ($this->db == FALSE) // Si la selection de la BDD foire on envoit un message d'erreur et on ferme la connexion au serveur.
                {
                mysql_close($this->connect); // Fermeture de la connexion.
                $this->connect = FALSE;
                exit('<p><strong>TraSQL->TraSQL ::</strong> Impossible de séléctionner une base de donnée.</p>');
                }
            return TRUE;
            }
        exit('<p><strong>TraSQL->TraSQL ::</strong> Impossible de se connecter à la base de donnée ' .$db. '.</p>');
        }


		/**
     * Changement de Base de donnée
     *
     * @param string $db --> Base de donnée
     * @access public
     * @return true
     */
    public function sql_change_db($db)
        {
        if ($this->connect != FALSE) // Si la connexion n'a pas foiré.
            {
            $this->db = mysql_select_db($db,$this->connect); // Selection de la nouvelle BDD.
            if ($this->db == FALSE) // Si la selection est ok, on ferme la connexion à l'ancienne BDD.
                {
                mysql_close($this->connect); // Fermeture de la connexion.
                $this->connect = FALSE;
                exit('<p><strong>TraSQL->sql_change_db ::</strong> Impossible de séléctionner une base de donnée.</p>');
                }
            return TRUE;
            }
        return FALSE;
        }


		/**
     * Envois d'une requéte
     *
     * @param string $query --> La requéte SQL à envoyer
     * @param string $db --> Base de donnée
     * @access public
     * @return true
     */
    public function sql_query($query)
        {
		$chrono1 = chrono(0); // On demarre le chrono.
        $this->query = $query; // On change de variable, question pratique.
        if (!empty($this->query) AND $this->connect != FALSE) // Vérification pour savoir si le requéte est remplie ou non.
            {
            $this->result = mysql_query($this->query,$this->connect); // On envoit la requéte.
            $this->nbr_queries++; // On rajoute 1 au nombre de requétes.
            $this->error = ($this->result == FALSE) ? TRUE : FALSE; // Vérification du plantage de la requétes
            $this->result = ($this->error) ? $this->query."\n".mysql_errno($this->connect).' : '.mysql_error($this->connect) : $this->result; // Si il y a une erreur,  on remplace le résultat de la requéte par l'erreur.
             if ($this->error) die($this->result); 
            return $this->result;
            }
        $this->error = TRUE;
        $this->result = '<p><strong>TraSQL->sql_query ::</strong> La requéte SQL est vide.</p>';
        exit($this->result);
		}


		/**
     * Fermeture de la connexion
     *
     * @access public
     * @return $this->connect;
     */
	public function sql_close()
        {
        if ($this->connect != FALSE) // Si on est connecté.
            {
            $this->connect = mysql_close($this->connect); // On se déconnecte du serveur.
            return $this->connect;
            }
        return FALSE;
        }
    }
?>


Il y a les fonctions de base :)
Édité le 17/10/2008 à 19:36:20 par Barbary

Image utilisateur
 
Hors ligne Talus # Posté le 17/10/2008 à 19:34:07
タルス
Avatar
Groupe : Membres
C'est pas vraiment une fonction / astuce, c'est plus un script qu'autre chose... Surtout que c'est pas novateur, une classe SQL...

Aussi, y'a des trucs qui n'ont pas vraiment leur place. Tu inventes des propriétés sans les déclarer ($this->query, il sort d'où ? Même question pour $this->result, etc, etc.), ton $this->query, il m'a pas l'air de servir à grand chose... Autant faire une simple var $query...
Édité le 17/10/2008 à 19:38:22 par Talus
 
Hors ligne Barbary # Posté le 17/10/2008 à 19:56:38

Avatar
Groupe : Membres
Ok je vais essayer de revoir ça

Image utilisateur
 
Hors ligne Jeremie78 # Posté le 17/10/2008 à 22:43:21
Powered by GNU/Linux
Groupe : Membres
Ne revoit rien, ce que veut dire Talus, c'est qu'il existe des TONNES de classes du même genre que la tienne, et qu'une n-nième est plus qu'inutile !
Bref, apporte une astuce REELLE ou n'apporte rien :)

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Talus # Posté le 17/10/2008 à 23:25:20
タルス
Avatar
Groupe : Membres
Jeremie78 > Oui, y'a de ca dans ce que j'ai dit.. Et j'ai aussi donné plusieurs points à revoir, au passage :p.
 
Hors ligne Jeremie78 # Posté le 18/10/2008 à 00:30:13
Powered by GNU/Linux
Groupe : Membres
Citation : Talus
Jeremie78 > Oui, y'a de ca dans ce que j'ai dit.. Et j'ai aussi donné plusieurs points à revoir, au passage :p.


Disons que tu donnes des conseils de codage, c'est certains ;) . Mais meme cette classe propre et corrigée ... elle ne fait pas vraiment partie de "fonctions et astuces" (utiles).

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Talus # Posté le 18/10/2008 à 01:25:21
タルス
Avatar
Groupe : Membres
Oui, on est d'accord là dessus.
 
Hors ligne ZebulogaZ # Posté le 31/10/2008 à 11:06:06
♥ Humm un donut's ♥
Avatar
Groupe : Membres
Fonction trés bete mas trés utile :p

Auteur: ZebulogaZ
Type: Fonction / Astuce
But: Ajouter un S quand il y en a plusieurs
on doit imaginer que <?php $nb_visiteur ?> est un nombre qui varie automatiquement sinon sa sert a rien :lol:
Code:
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
function s($nb)
{
if($nb>=2)
{
$s="s";
}
else
{$s="";
}
return $s;
}
?>


Exemple:
Code : PHP
1
2
3
4
<?php
$nb_visiteur=1;
echo ''.$nb_visiteur.' Visiteur'.s($nb_visiteur).'';
?>

Citation : Rendu

1 Visiteur

ExempleBis:
Code : PHP
1
2
3
4
<?php
$nb_visiteur=3;
echo ''.$nb_visiteur.' Visiteur'.s($nb_visiteur).'';
?>

Citation : Rendu

3 Visiteurs

Édité le 31/10/2008 à 11:10:28 par ZebulogaZ

Venez tester la securité de mon forum(Créer grace au tuto par ici :-° ) Si vous trouvez une faille pourriez vous me l'indiquez ici afin que je puisse la corriger !

ℓє ℓιєη ∂є мση ƒσяυм α ℓ'αттαqΰ℮ :) :pirate:
iphone;ipod touch user;apple;tactile

 
Hors ligne christouphe # Posté le 31/10/2008 à 11:09:56
Avatar
Groupe : Membres
plus rapide dant ta fonction:

Code : PHP
1
2
3
4
5
6
7
<?php
function s($nb) {
     if ($nb > 1) {
          return "s";
     }
}
?>


Mais je crois que celà a été fait et amélioré.

Une fois que vous éliminez l'impossible, peu importe si ce qui reste est improbable, ce devrait être la vérité. :p
"Tracker addict ;) :-° ", La POO en PHP, il n'y a que ça de vrai :D :pirate:
J'en ai marre des codeurs qui C/C sans lire ou relire et viennent pleurer pour rien ici !!!
 
Hors ligne sheva-mafioso # Posté le 31/10/2008 à 11:25:11
GeeK Squad
Avatar
Groupe : Membres
Ca a été proposé dans ce topic ou un autre :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
// Permet de mettre au pluriel un mot en fonction d'un nombre
// Ex : echo 'mot'.pluriel(5); ==> affiche mots
// Ex : echo 'cheva'.pluriel(5, 'ux', 'l'); ==> affiche chevaux
// Ex : echo 'cheva'.pluriel(1, 'ux', 'l'); ==> affiche cheval
function pluriel($nb, $pluriel = 's', $singulier = '')
{
	return ($nb > 1) ? $pluriel : $singulier;
}
?>
 
Hors ligne ZebulogaZ # Posté le 31/10/2008 à 14:07:08
♥ Humm un donut's ♥
Avatar
Groupe : Membres
a bon ben zut !:)

Venez tester la securité de mon forum(Créer grace au tuto par ici :-° ) Si vous trouvez une faille pourriez vous me l'indiquez ici afin que je puisse la corriger !

ℓє ℓιєη ∂є мση ƒσяυм α ℓ'αттαqΰ℮ :) :pirate:
iphone;ipod touch user;apple;tactile

 
Hors ligne azmeuk # Posté le 07/11/2008 à 12:57:00
n'a Jamais peur de la vapeur
Avatar
Groupe : Membres
Mes fonctions de retouche d'image.
miniature()
Code : PHP
 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
<?php
/* Miniature créé la miniature d'une image 
 * Si $y = 0 alors l'image reste aux proportions mais avec la plus grande longueur/largeur de $x pixels.
 * Si $destination est un répertoire (ex : foo/) alors la miniature aura le nom de l'image originale et sera placée dans $destination
 * Si $destination est un chemin d'accès (ex : foo/bar.png) alors la miniature sera $destination
 * Si $destination est un nom de fichier (ex : foo.png) alors la miniature sera nommée $destination et sera placée dans le répertoire de l'image d'origine
 * Si $destination est vide alors le nom de la miniature sera celui de l'image d'origine préfixé de $prefixe et sera placé dans le même répertoire
 */
function miniature($image, $x, $y = 0, $destination = '', $prefixe = 'min_'){
	$repertoire = substr($image, 0, strrpos($image, DIRECTORY_SEPARATOR));
	$repertoire = $repertoire ? $repertoire : '.';
	$repertoire_destination = substr($destination, 0, strrpos($destination, DIRECTORY_SEPARATOR));
	$repertoire_destination = $repertoire_destination ? $repertoire_destination : $repertoire;

  $nom_image = str_replace(DIRECTORY_SEPARATOR, '', strtolower(substr($image,strrpos($image, DIRECTORY_SEPARATOR))));
	$fichier_destination = str_replace(DIRECTORY_SEPARATOR, '', substr($destination, strrpos($destination, DIRECTORY_SEPARATOR)));
	$fichier_destination = trim($fichier_destination) 
	  ? $fichier_destination 
	  : ($repertoire != $repertoire_destination 
	    ? $nom_image
	    : $prefixe.$nom_image);
	
  $extension = strtolower(substr($nom_image,strrpos($nom_image, ".")+1));
	$taille = getimagesize($image);

	$source = ($extension == 'png') 
		? imagecreatefrompng ($image) 
		: imagecreatefromjpeg($image);
		
	//On récupère les dimensions de la miniature
	if(!$y){
		$x = ($taille[0] >= $taille[1]) ? $x : intval(($taille[0] *$x) / $taille[1]);
		$y = ($taille[0] >= $taille[1]) ? intval(($taille[1] *$x) / $taille[0]) : $x;
	}
	
	$miniature = imagecreatetruecolor($x , $y);
	imagecopyresampled($miniature, $source, 0, 0, 0, 0, $x, $y, $taille[0], $taille[1]);
	$extension == 'png'
		? imagepng ($miniature , $repertoire_destination.DIRECTORY_SEPARATOR.$fichier_destination) 
		: imagejpeg($miniature , $repertoire_destination.DIRECTORY_SEPARATOR.$fichier_destination);
}
?>


resize()
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
/* resize redimensionne une image à la taille $x*$y
 * Si $y = 0 alors l'image reste aux proportions mais avec la plus grande longueur/largeur de $x pixels.
 */
function resize($url_image , $x , $y = 0){
	$taille = getimagesize($url_image);
	$extension=strtolower(substr($url_image,strrpos($url_image, ".")+1));
	
	if ($y == 0){
		$x = ($taille[0] >= $taille[1]) ? $x : intval(($taille[0] *$x) / $taille[1]);
		$y = ($taille[0] >= $taille[1]) ? intval(($taille[1] *$x) / $taille[0]) : $x;
	}
	
	$source = ($extension == 'png')  
		? imagecreatefrompng ($url_image) 
		: imagecreatefromjpeg($url_image);
	$destination = imagecreatetruecolor($x , $y);
	imagecopyresampled($destination , $source ,0 , 0 , 0 , 0 , $x , $y , $taille[0] , $taille[1]);
	unlink($url_image);
	$extension == 'png' 
		? imagepng ($destination , $url_image) 
		: imagejpeg($destination , $url_image);
}?>
 
Hors ligne Dutiona # Posté le 07/11/2008 à 13:10:35
Vis pour être heureux !
Avatar
Groupe : Membres
J'améliore, les fonctions gardent la transparence du canal alpha (pour les png par exemple) :
Code : PHP
 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
<?php
/* Miniature créé la miniature d'une image 
 * Si $y = 0 alors l'image reste aux proportions mais avec la plus grande longueur/largeur de $x pixels.
 * Si $destination est un répertoire (ex : foo/) alors la miniature aura le nom de l'image originale et sera placée dans $destination
 * Si $destination est un chemin d'accès (ex : foo/bar.png) alors la miniature sera $destination
 * Si $destination est un nom de fichier (ex : foo.png) alors la miniature sera nommée $destination et sera placée dans le répertoire de l'image d'origine
 * Si $destination est vide alors le nom de la miniature sera celui de l'image d'origine préfixé de $prefixe et sera placé dans le même répertoire
 */
function miniature($image, $x, $y = 0, $destination = '', $prefixe = 'min_'){
	$repertoire = substr($image, 0, strrpos($image, DIRECTORY_SEPARATOR));
	$repertoire = $repertoire ? $repertoire : '.';
	$repertoire_destination = substr($destination, 0, strrpos($destination, DIRECTORY_SEPARATOR));
	$repertoire_destination = $repertoire_destination ? $repertoire_destination : $repertoire;

  $nom_image = str_replace(DIRECTORY_SEPARATOR, '', strtolower(substr($image,strrpos($image, DIRECTORY_SEPARATOR))));
	$fichier_destination = str_replace(DIRECTORY_SEPARATOR, '', substr($destination, strrpos($destination, DIRECTORY_SEPARATOR)));
	$fichier_destination = trim($fichier_destination) 
	  ? $fichier_destination 
	  : ($repertoire != $repertoire_destination 
	    ? $nom_image
	    : $prefixe.$nom_image);
	
  $extension = strtolower(substr($nom_image,strrpos($nom_image, ".")+1));
	$taille = getimagesize($image);

	$source = ($extension == 'png') 
		? imagecreatefrompng ($image) 
		: imagecreatefromjpeg($image);
		
	//On récupère les dimensions de la miniature
	if(!$y){
		$x = ($taille[0] >= $taille[1]) ? $x : intval(($taille[0] *$x) / $taille[1]);
		$y = ($taille[0] >= $taille[1]) ? intval(($taille[1] *$x) / $taille[0]) : $x;
	}
	
	$miniature = imagecreatetruecolor($x , $y);
	imagecolortransparent($miniature, imagecolorallocate($miniature, 0, 0, 0));
	imagealphablending($miniature, false);
	imagesavealpha($miniature, true);
	imagecopyresampled($miniature, $source, 0, 0, 0, 0, $x, $y, $taille[0], $taille[1]);

	$extension == 'png'
		? imagepng ($miniature , $repertoire_destination.DIRECTORY_SEPARATOR.$fichier_destination) 
		: imagejpeg($miniature , $repertoire_destination.DIRECTORY_SEPARATOR.$fichier_destination);
}
?>

Et :
Code : PHP
 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
<?php
/* resize redimensionne une image à la taille $x*$y
 * Si $y = 0 alors l'image reste aux proportions mais avec la plus grande longueur/largeur de $x pixels.
 */
function resize($url_image , $x , $y = 0){
	$taille = getimagesize($url_image);
	$extension=strtolower(substr($url_image,strrpos($url_image, ".")+1));
	
	if ($y == 0){
		$x = ($taille[0] >= $taille[1]) ? $x : intval(($taille[0] *$x) / $taille[1]);
		$y = ($taille[0] >= $taille[1]) ? intval(($taille[1] *$x) / $taille[0]) : $x;
	}
	
	$source = ($extension == 'png')  
		? imagecreatefrompng ($url_image) 
		: imagecreatefromjpeg($url_image);
	$destination = imagecreatetruecolor($x , $y);
	imagecolortransparent($destination, imagecolorallocate($destination, 0, 0, 0));
	imagealphablending($destination, false);
	imagesavealpha($destination, true);
	imagecopyresampled($destination , $source ,0 , 0 , 0 , 0 , $x , $y , $taille[0] , $taille[1]);
	unlink($url_image);
	$extension == 'png' 
		? imagepng ($destination , $url_image) 
		: imagejpeg($destination , $url_image);
}
?>



Bisous, Nyu
Édité le 07/11/2008 à 13:11:51 par Dutiona

Défiez ma brute !
Eclipse user | Ubuntu (KDE) user | php/sql/xhtml/css/xml/xsl/javascript/java/python/perl/c/scheme coder.
Framework in use: Seraframework (my own one).
In Microeisti staff.
 
Hors ligne Barbary # Posté le 09/11/2008 à 13:20:38

Avatar
Groupe : Membres
Hors ligne metalking # Posté le 10/11/2008 à 19:37:46
Knowledge is Power
Avatar
Groupe : Membres
Citation : Barbary
Si seulement c'était si simple.. Ca éloignera les bots automatiques dans le meilleur des cas, mais c'est hyper méga facile à contourner pour un bot ciblé..
A oublier pour les gros sites !
 
Hors ligne Thulium # Posté le 11/11/2008 à 12:33:12
Avatar
Groupe : Membres
Je pense que tout les captchas pas en images (ou sons) sont facilement contournable par un bot ciblé ...
Édité le 11/11/2008 à 12:36:56 par Thulium

"Keyboard not found, press F1 to resume."
Code : Console
enfant@fils-deskop:~$ sudo apt-get autoremove vie-sociale
parent@pere-deskop:~$ echo "C'est bien mon fils, tu es devenu un Geek !"
 
Hors ligne K-Phoen # Posté le 11/11/2008 à 12:38:53
Geek un jour, geek toujours !
Avatar
Groupe : Membres
Citation : La Geek Attitude -> Commentaires

Tout à fait d’accord =)

Cependant, l’astuce est ici utilisée en complément d’Akismet (ou tout autre système) contre le type de robots qui remplissent à l’aveuglette tous les champs qu’ils trouvent.
C’est donc la plus basique des protections, mais elle convient très bien à la catégorie de blogs à laquelle j’appartiens =p


Il est évident que seule, cette astuce ne rime à rien ;)

P.S : c'est pas que je n'aime pas que l'on cite mon blog, mais ça serait bien de le faire sans dévier un topic :-°

La Geek Attitude
-----------------------
Tout sur Adobe AIR
 
Hors ligne robocop # Posté le 11/11/2008 à 15:00:10
Avatar
Groupe : Membres
Rectification :
-En ciblé, elle ne sert à rien, car comme tu peux le voir sur tes commentaires, on peux passer le truc sans prob : seul askinet est pas mal : il empêche la saturation de base, mais je peux quand même poster un message à la fois.

-Pour un bot générique, elle peut servir, bien que Askinet fasse normalement le boulot.

PS : désolé pour le spam sur ton site !
 
Hors ligne K-Phoen # Posté le 11/11/2008 à 15:08:05
Geek un jour, geek toujours !
Avatar
Groupe : Membres
Ça a du mal à rentrer on dirait ( :-° ), donc je réitère :: « Il est évident que seule, cette astuce ne rime à rien »

Elle n'est utile que pour un bot générique, et pour filtrer une partie des spams de manière à ce qu'Akismet n'ait pas à travailler (économie de ressources quand tu nous tiens =p).

Puisque tu veux jouer à celui qui bypassera Akismet, sache qu'il est plus facile qu'on ne le pense de contourner TOUTES les vérifications qu'il met en place ...

À la base, je l'avais mise en place juste pour éviter à Akismet un peu de boulot (je suis parti du principe qu'il était aussi flemmard que moi donc bon :p )

La Geek Attitude
-----------------------
Tout sur Adobe AIR
 
Hors ligne Talus # Posté le 11/11/2008 à 17:02:54
タルス
Avatar
Groupe : Membres
Surtout qu'un bot ciblé passera n'importe quel captcha, ceci dit...
 
Hors ligne IgiX # Posté le 13/11/2008 à 09:43:08
Qui tente rien, n'a rien!
Avatar
Groupe : Membres
voilà une belle fonction pour uploader ses images png/gif/jpeg/jpg...
Code : PHP
 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
<?php
function upload_img($nom_champ, $destination, $ext_auto, $taille_max, $nom, $largeur=false, $hauteur=false){
/*
by IgiX <hervet.geoffrey@gmail.com >  12/11/2oo8
@Return : mixed
  > false en cas d'échec
  > URL image en cas de succès
@$nom_champ => name du <input type="file" /> / 'image'
@destination =>    lien du dossier                             / './images' => non existance => false
@ext_autao   => extensions autorisée			/ arrey('png', 'gif')
@taille_max  => Poids max en octet 			/ 100*1024   100Ko
@nom	   => nom de l'image 				/ 'image'.mt_rand('0, 13371337').'_'
*/
  //Verification existence
  if(!isset($_FILES[$nom_champ]))
	return false;
  //Verification dossier
  if(!is_dir($destination))
	return false;
  //Vérification erreurs
  if($_FILES[$nom_champ]['error'] != 0)
	return $_FILES[$nom_champ]['error'];
  extract(pathinfo($GLOBALS['_FILES'][$nom_champ]['name']));
  //Vérification extension
  if(!in_array($extension, $ext_auto))
	return false;
  //Vérification poids
  if($_FILES[$nom_champ]['size'] > $taille_max)
	return false;
  list($largeur_up, $hauteur_up, $constante_image_type, $width_height_html, $bits, $channles, $mime) =  getimagesize($_FILES[$nom_champ]['tmp_name']);
  //Vérification d'une largeur et d'une hauteur
  if(($largeur_up * $hauteur_up) == 0)
	return false;
  //Si redimensionnement non demandé
  $url_image = $destination.'/'.$nom.'.'.$extension;
  if( !is_numeric($hauteur) OR !is_numeric($largeur) OR ($largeur * $hauteur) <1){
	if(move_uploaded_file($_FILES[$nom_champ]['tmp_name'], $url_image))
	  return $url_image;
	return false;
  }
  if($_FILES[$nom_champ]['type'] == 'image/jpeg')
    $type = 'jpeg';
  if($_FILES[$nom_champ]['type'] == 'image/gif')
	$type = 'gif';
  if($_FILES[$nom_champ]['type'] == 'image/png')
	$type = 'png';
  if(!isset($type))
	return false;
  $fonctioncreatfrom = 'imagecreatefrom'.$type;
  $image_fonction = 'image'.$type;
  $image_sourcee = $fonctioncreatfrom ($_FILES[$nom_champ]['tmp_name']);
  $image_destination = imagecreatetruecolor($largeur, $hauteur);
  imagecopyresampled($image_destination, $image_sourcee, 0, 0, 0, 0, $largeur, $hauteur, $largeur_up, $hauteur_up);
  $image_fonction ($image_destination, $url_image);
  return $url_image;  
}
Édité le 13/11/2008 à 09:56:07 par IgiX

Amicalement IgiX
 
Hors ligne Savageman # Posté le 13/11/2008 à 09:51:42
Insa : If inside
Avatar
Groupe : Membres
C'est pas bien bien optimisé tout ça. :-°
 
Hors ligne IgiX # Posté le 13/11/2008 à 09:56:15
Qui tente rien, n'a rien!
Avatar
Groupe : Membres
la mienne?

Amicalement IgiX
 
Hors ligne Savageman # Posté le 13/11/2008 à 10:02:53
Insa : If inside
Avatar
Groupe : Membres
Hors ligne IgiX # Posté le 13/11/2008 à 10:04:42
Qui tente rien, n'a rien!
Avatar
Groupe : Membres
Bah, où ça va pas? :s

Sinon ,où je peux trouver un lien pour voir en profondeur php? :D (pas php.net c'est ma vie ça, je connais :D )

IgiX

Amicalement IgiX
 
Hors ligne Savageman # Posté le 13/11/2008 à 10:22:17
Insa : If inside
Avatar
Groupe : Membres
Dans ta vérification, utilise UPLOAD_ERR_OK plutôt que 0...

Code : PHP
1
2
3
4
<?php
extract(pathinfo($GLOBALS['_FILES'][$nom_champ]['name']));
  //Vérification extension
  if(!in_array($extension, $ext_auto))

C'est moche... Pourquoi pas ceci ?
Code : PHP
1
2
3
4
<?php

 //Vérification extension
  if(!in_array(pathinfo($_FILES[$nom_champ]['name'], PATHINFO_EXTENSION), $ext_auto))


Quand on upload un fichier par formulaire, il faut TOUJOURS se servir de is_uploaded_file() pour vérifier.

Tu ne te sers jamais de $constante_image_type, $width_height_html, $bits, $channles, $mime, pourquoi donc les déclarer ?
list($largeur_up, $hauteur_up, , , , , ) fonctionne très bien.

Sinon, ton redimensionnement ne garde pas la transparence des images gif/png (cf. post pas loin au-dessus sur la même page).

Enfin, ta fonction retourne toujours false... On ne sais jamais pourquoi ça fait une erreur (ça peut provenir de pleins de choses différentes).

C'est tout ce que je vois. ^^

[edit] Voici un upload d'avatar que j'ai fait et largement modifié pour le rendre procédural comme ta fonction. Il manque justement la définition de la fonction, mais moi c'est une fonction interne d'une classe et tout alors je peux pas la refaire. Ca te donne juste une idée du code quoi... (même si c'est pas utilisable).

Code : PHP
 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
<?php

// Upload d'avatar

$ext_auto = array('jpg', 'jpeg', 'gif', 'png');
$max_size = 8192; // 8 ko

$id_utilisateur = 3; // Exemple

$nom_champ = 'avatar';

if (!empty($_FILES[$nom_champ])) {

	$ext = pathinfo($value, PATHINFO_EXTENSION);
	if (!in_array($ext, $ext_auto)) { return 'invalid_file_extension'; }

	if (0 < $max_size && $max_size < $_FILES[$nom_champ]['size']) { return 'file_too_big'; }

	if ($_FILES[$nom_champ]['error'] == UPLOAD_ERR_OK && is_uploaded_file($_FILES[$nom_champ]['tmp_name'])) {
	
		// Redimensionnement et sauvegarde de l'avatar
		$avatar = new Image($_FILES[$nom_champ]['tmp_name']);
		$avatar->resize_to(100, 100); // Redimensionne uniquement si nécessaire (pas bête la classe)
		$avatar_filename = 'images/avatars/'.$id_utilisateur.$ext;
		$avatar->save_as($avatar_filename);
		return $avatar_filename;
	}
	return 'invalid_file';
}
return 'required';
Édité le 13/11/2008 à 10:38:45 par Savageman
 
Hors ligne azmeuk # Posté le 15/11/2008 à 14:51:32
n'a Jamais peur de la vapeur
Avatar
Groupe : Membres
Fonction permettant de fermer proprement des balises html (merci à Darkodam). Très utile lorsque par exemple vous devez afficher les xx premiers caractères d'un bout de texte en html, sans provoquer d'erreur d'affichage.
La fonction peut sans doute encore être améliorée

Code : PHP
 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
<?php
/* close_html() permet de clore les balise non cloturées d'une chaîne de caractères.
 * '<foo>bar' => '<foo>bar</foo>'
 * '<foo><bar>bee' => '<foo><bar>bee</bar></foo>'
 * '<foo>bar<br />' => '<foo>bar<br /></foo>'
 * '<foo bar="bee">bop' => '<foo bar="bee">