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 ();
}
?>
|