un "notice" à effacer

Eléphant du PHP | 250 Messages

06 mars 2010, 14:38

Bonjour,

Merci pour le lien, j'ai peaufiné la chose :
$chemin=__dir__.'\img\ ';  
$result=move_uploaded_file($_FILES['fichier']['tmp_name'],$chemin.$_FILES['fichier']['name']);
Mais je cherche l'utilité de ceci par exemple : accept="image/jpeg".
Sur mon livre, c'est censé ne pas accepter les autres extensions. Hors, je upload un txt et ça passe comme une lettre à la Poste !
Quel est utilité de ceci ? A part réaliser encore une procédure pour vérifier les extensions !?
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

06 mars 2010, 16:03

http://www.w3schools.com/TAGS/att_input_accept.asp

En gros ce n'est pas supporté par la majorité des navigateurs, mais autant le laisser, car c'est conforme à la norme W3C.

Sinon encore une fois, cela n'est de toute façon pas suffisant, il faut vérifier le type en php.

Avec la fonction explode() par exemple:
http://php.net/manual/fr/function.explode.php
http://fr2.php.net/end
<?php 
$extension = end(explode('.', $_FILES['fichier']['name'])); 
?> 
Ensuite comparer l'extension contenue dans la variable $extension avec une autre variable contenant l'extension autorisée.
____________

Ou avec un tableau (array()) si plusieurs extensions sont censées être acceptées.
Exemple:
$extensions = array('png', 'gif', 'jpg', 'jpeg');
$extension = end(explode('.', $_FILES['fichier']['name'])); 
if (in_array($extension, $extensions))
http://php.net/manual/fr/function.in-array.php

Il est effectivement indispensable, selon moi, de vérifier la taille du fichier ainsi que l'extension.

Sinon, c'est bien, tu te débrouilles bien, et tu tests comme il faut :wink:

[EDIT]:
je corrige un de mes précédents posts 8-| :
900000 octets = 900 k = 0,9 m
90000 octets = 90 k = 0,09 m
(Enfin en sachant que ce n'est pas 1000 mais 1024 évidemment)
Modifié en dernier par Dr@ke le 06 mars 2010, 17:46, modifié 2 fois.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

06 mars 2010, 17:42

ps:(Enfin en sachant que ce n'est pas 1000kio ou 1024ko évidemment, je crois :roll: )
Merci pour le compliment :wink:
C'est marrant, plus j'avance, plus j'apprends des nouveaux trucs, plus j'oublie ce que j'avais assimiler avant :|
Quelqu'un connait un viagra de la mémoire "piracetam" ?! Je vais me shooter... 8-|

Je vais mettre les extensions sous le coude pour l'instant car j'ai un petit soucis de boucle:

<input type="file" name="fich[]" accept="image/gif" />
<input type="file" name="fich[]" accept="text/txt" />
<?php
if( !empty($_FILES['fich']))
{
echo'<pre>';
print_r($_FILES['fich']);
echo'</pre>';
foreach($_FILES['fich'] as $ind=>$val)
{
foreach($val as $cle=>$valeurs)
{echo'<ul><li>'.$ind.' = '.$valeurs.'</li></ul>';}
}
for( $a=0;$a<=count($_FILES['fich']['tmp_name']);$a++)
    {for($y=0;$y<=count($_FILES['fich']['tmp_name'][$a]);$y++){
        $results=move_uploaded_file($_FILES['fich']['tmp_name'][$y],$chemin.$_FILES['fichier']['name'][$y]);}}
}
?>
Je ne sais pas ce qui va pas dans ma boucle. Ya un truc qui m'échappe :roll:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

06 mars 2010, 17:56

$_FILES['fich']['tmp_name'] n'est pas un tableau hors la fonction count() compte les éléments d'un tableau.
http://fr2.php.net/manual/fr/function.count.php

$_FILES['fich'] est lui par contre un tableau.

[EDIT]
Sinon il y a des exemples sur php.net:
<?php
$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}
?>
Regarde le lien suivant, et aussi les commentaires en fin de pages:
http://fr2.php.net/manual/fr/function.m ... d-file.php
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

06 mars 2010, 18:18

Ha bon !

echo gettype($_FILES['fich']['tmp_name']).'<br/>';
echo var_dump($_FILES['fich']['tmp_name']);

me donnent:

array
array(2) {
[0]=>
string(0) ""
[1]=>
string(45) "C:\Users\Diana\AppData\Local\Temp\phpCAA4.tmp" cette clé est de type string.
}

C'est un array ! :shock:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

06 mars 2010, 18:21

Ok oui en effet, en tout cas il y a bien trop de boucles.
Regarde le lien ci-dessus

Sinon:
// for($y=0;$y<=count($_FILES['fich']['tmp_name'][$a]);$y++){
var_dump($_FILES['fich']['tmp_name'][$a]);
$a est apparemment un index.
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

06 mars 2010, 19:18

Mouai....
Je bloque là. :roll:
foreach($_FILES['fich'] as $ind=>$val)
{
foreach($val as $cle=>$valeurs)
{
echo'<ul><li>'.$ind.' = '.$valeurs.'</li></ul>';
$results=move_uploaded_file($_FILES['fich']['tmp_name'][$cle],$chemin.$_FILES['fichier']['name'][$cle]); ligne(47)
}}
Un peu comme dans le modèle du dessus. Je pige pas. :evil:

Notice: Uninitialized string offset: 0 in C:\UwAmp\www\Php\...
Warning: move_uploaded_file(C:\UwAmp\www\Php\img\ ) [function.move-uploaded-file]: failed to open stream: Permission denied in C:\UwAmp\www\Php\9formulaires3.php on line 47

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\Users\Diana\AppData\Local\Temp\php24B3.tmp' to 'C:\UwAmp\www\Php\img\ ' in C:\UwAmp\www\Php\9formulaires3.php on line 47
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 250 Messages

06 mars 2010, 20:06

Moi ya un truc qui me tracasse : move_uploaded_file(C:\UwAmp\www\Php\img\ )... open stream.

Hors si c'est ce que je comprends, le fichier que j'ouvre ne se trouve pas là. Mais sur mon bureau. C'est bizarre ya un truc qui cloche. :roll:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 250 Messages

06 mars 2010, 20:32

rahh! J'ai fait la bécasse :roll:

Je m'étais trompée de variable:
foreach($_FILES['fich'] as $ind=>$val)
{
foreach($val as $cle=>$valeurs)
{
echo'<ul><li>'.$ind.' = '.$valeurs.'</li></ul>';

}}
$resultas=move_uploaded_file($_FILES['fich']['tmp_name'][$cle],$chemin.$_FILES['fich']['name'][$cle]);
}
ça marche comme sur des roulettes :mrgreen:

Merci Dr@ke :wink: et bon diner....
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 453 Messages

07 mars 2010, 04:51

Salut Diabless6,

Je passe vite fait. J'ai lu en biais ton sujet. Je t'invite à lire ma réponse que j'avais faite pour kingkong à l'époque. Il me semble qu'elle va t'aider dans ton étude.

Bonne lecture.
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia

Mammouth du PHP | 985 Messages

07 mars 2010, 05:20

N'oublie pas de vérifier la taille des images en php, elles ne sont pas censées être lourdes.
define('TAILLE_MAX' 90000);
if ($_FILES['fichier']['size'] <= TAILLE_MAX)
Puis la vérification des extensions aussi, qui est indispensable aussi à mon avis.
$extensions = array('png', 'gif', 'jpg', 'jpeg');
$extension = end(explode('.', $_FILES['fichier']['name']));
if (in_array($extension, $extensions))
http://php.net/manual/fr/function.explode.php
http://www.php.net/manual/fr/function.end.php
http://php.net/manual/fr/function.in-array.php

A moins que cela soit déjà fait évidemment :)

Sinon:
ça marche comme sur des roulettes :mrgreen:
Merci Dr@ke :wink: et bon diner....
Plaisir, félécitation et content que tout fonctionne maintenant.

PS:
Le diné a été nickel :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

07 mars 2010, 16:49

Salut Diabless6,

Je passe vite fait. J'ai lu en biais ton sujet. Je t'invite à lire ma réponse que j'avais faite pour kingkong à l'époque. Il me semble qu'elle va t'aider dans ton étude.

Bonne lecture.
Coucou niuxe ! :wink:

Merci pour le lien, effectivement intéressant ...

:wink:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 250 Messages

07 mars 2010, 16:55

[quote="Dr@ke"]N'oublie pas de vérifier la taille des images en php, elles ne sont pas censées être lourdes.
C'est rajouté ! :wink:

Puis la vérification des extensions aussi, qui est indispensable aussi à mon avis.
A moins que cela soit déjà fait évidemment :)

Tu as lu dans mes pensées :mrgreen:

Tout ce que j'apprends devrait m'aider dans mon projet. D'ailleurs niuxe lit dans mes pensées aussi...hi!hi! :mrgreen:

Merci encore les gars
;)
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Mammouth du PHP | 985 Messages

07 mars 2010, 17:49

Depuis la version 5.3.1 de PHP, il y a un paramétre supplémentaire dans le fichier php.ini: max_file_uploads (limiter le nombre d'uploads simultanés).
Limité à 20 par défaut, pour pallier à un possible DOS (denial of service).
Tout dépend de ta version PHP mais il est aussi possible de le vérifier via Php :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 250 Messages

07 mars 2010, 18:17

Depuis la version 5.3.1 de PHP, il y a un paramétre supplémentaire dans le fichier php.ini: max_file_uploads (limiter le nombre d'uploads simultanés).
Limité à 20 par défaut, pour pallier à un possible DOS (denial of service).
Tout dépend de ta version PHP mais il est aussi possible de le vérifier via Php :wink:
Ha bah ça va ! Avec wAmp j'ai 3 versions dont la 5.3.1 :wink:

Je viens de remarquer qu'il faille aussi réaliser un script pour vérifier les caractères accentués (lien de niuxe) avec les fameuses regex :evil:
d'ailleurs niuxe à améliorer le code de kingkong, car à l'origine ça vient d'un tuto de devellopez que je lis actuellement.

Mais mon code deviens assez vite illisible, je vais le réorganiser en procédures (fonctions) dont je ne maitrise pas encore bien la subtilité des imbrications, mais ça va venir :mrgreen:
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
// récupère la partie de la chaine à partir du dernier . pour connaître l'extension.
$extension = strrchr($_FILES['fich']['name'][0], '.');
//Ensuite on teste
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
    echo $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';exit();
Alors ici, j'ai rajouté exit(); pour sortir car à l'origine, il n'existait pas et le script continuait son exécution.
On remarque en prenant en totalité mon listing, que strrchr($_FILES['fich']['name'][0], '.') je ne traite qu'un fichier... ma boucle étant un peu plus bas...[$cle]
C'est pourquoi, il est important d'organiser son script :wink:
Modifié en dernier par diabless6 le 07 mars 2010, 18:40, modifié 1 fois.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.