summaryrefslogtreecommitdiff
path: root/photoskaty/photoupload.php
blob: c3a207971c53a38c0b3123921c93b131c568b2cf (plain)
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
<?php
// PAGE SÉCURISÉE ! impossible de la voir si la variable $_SESSION['mdpvalide'] ne vaut pas 1

session_start();
if (isset ($_SESSION["mdpvalide"]))
{
    if($_SESSION["mdpvalide"]) // booléen, test si ça vaut 1
    {} // dans ce cas on fait rien et on laisse php lire la suite
    else
    {
        header('Location: ../connexion.php');
        exit ();
        // exit() sert à interrompre php qui n'a alors surtout pas besoin d'aller jusqu'en bas de la page
    }
}
else
{
    header('Location: ../connexion.php');
    exit ();
}


// connexion à la base de données
include("../connexionbase.php");


// test de l'envoi du fichier au serveur
// erreur = 1 si la taille du fichier dépasse de 2 MO, limite modifiable à la ligne upload_max_filesize du fichier php.ini
if (isset ($_FILES['photo']) AND $_FILES['photo']['error'] == 0)
{
    // vérification de l'extension
    $infophoto = pathinfo ($_FILES['photo']['name']); // pathinfo renvoie un tableau, qui contient notamment l'extension du fichier
    $extautorisées = array ('jpg', 'jpeg', 'png', 'gif', 'JPG', 'JPEG', 'PNG', 'GIF');
    if (in_array ($infophoto['extension'], $extautorisées)) // on compare l'extension dans le tableau avec les extensions qu'on a choisi
    {
        // on récupère la variable $nom
        $nom = basename ($_FILES['photo']['name']);
        
        // vérification et formatage du nom du fichier
        // supprimer les accents, problème: la méthode avec la fonction strstr marche mal avec l'UTF-8,
        // on préfèrera celle-ci qui utilise str_replace et qui marche mieux (mais pas avec les majuscules accentuées):
        $nom = str_replace(
            array('à','â','ä','á','ã','å','î','ï','ì','í','ô','ö','ò','ó','õ','ø','ù','û','ü','ú','é','è','ê','ë','ç','ÿ','ñ'),
            array('a','a','a','a','a','a','i','i','i','i','o','o','o','o','o','o','u','u','u','u','e','e','e','e','c','y','n'),
            $nom);
        $nom = mb_strtolower($nom, 'UTF-8');    
        // ce qui n'est pas une lettre ou un chiffre est remplacé par un tiret, y compris les espaces
        $nom = preg_replace('/([^.a-z0-9]+)/i', '-', $nom);
        
        // enfin on enregistre le fichier
        if (move_uploaded_file ($_FILES['photo']['tmp_name'], '/var/www/lelionetlecolibri.ordipolo.fr/photospolo/' . $nom))
        // on doit pouvoir écrire dans le dossier d'arrivée (mettre le chemin absolu) et dans /tmp
        // pour permettre à PHP l'écriture et la traversée du dossier, taper: sudo chmod 733 /var/www/dossier/qu'on/veut
        {
            // envoi du nom de la photo dans la base de données
            echo $nom;
            $requête = $base->prepare('INSERT INTO photospolo (nomphoto) VALUES (:nom)');
            $requête->execute(array('nom' => $nom));
            
            $requête->closeCursor();
            
            // changer le nom de la photo sélectionnée dans le fichier photo.txt
            $fichier = fopen('photo.txt','r+');
            ftruncate($fichier,0); // évite les problèmes quand on change pour un nom plus court
            fputs($fichier, $nom);
            fseek($fichier, 0);
            fclose($fichier);
            
            header('Location: ../administration.php?modifphoto=4'); // succès, move_uploaded_file renvoie la valeur TRUE
            exit ();
        }
        else // echec à l'enregistrement, la fonction renvoie FALSE
        {
            header('Location: ../administration.php?modifphoto=3');
            exit ();
        }
    }
    else // mauvais format
    {
        header('Location: ../administration.php?modifphoto=2');
        exit ();
    }
}
else // mauvaise taille
{
    header('Location: ../administration.php?modifphoto=1');
    exit ();
}

?>