stagiux | masklinn a écrit :
Parce que le modèle objet de PHP n'est franchement pas terrible (ils ont plus ou moins repris le modèle de java en pire), n'utilise pas les potentialités d'un langage dynamiquement typé, est généralement mal foutu et n'a aucune originalité ni aucun intérêt.
Un site vantant le modèle objet PHP est un mauvais site ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif)
|
Loin de moi l'idée de debattre avec toi sur un sujet que je ne connais pas mais tu semble parler de PHP en général la.
Citation :
Origine
De l'aveux même de ses concepteurs, le modèle objet de PHP3 (légèrement améliorée dans PHP4) était plus une implémentation rapide pour répondre à une demande immédiate, qu'un modèle pensé et adapté à la POO moderne. La gestion des objets de PHP4 était suffisante mais pas idéale, et représente l'un des grands défauts de cette version du langage.
C'est pourquoi l'un des premiers buts du projet menant à PHP5 fut de revoir entièrement ce modèle objet - tout en restant compatible avec les habitudes des développeurs, et les innombrables scripts déjà créés. En passant, le coeur du langage (le Zend Engine) profite d'une mise à jour complète : les développeurs disposent désormais d'un PHP plus complet, plus rapide et mieux pensé que ses prédécesseurs...
Source: http://developpeur.journaldunet.co [...] t-1a.shtml
|
Voila ! je ferme la parenthèse
J'ai un petit souci sur un script d'upload de fichier...
J'ai 2 fichiers : Test.php - > forumaire dont voici le code :
Code :
- <?php
- include("testclass1.php" );
- $myFile=isset($_FILES['myFile'])?$_FILES['myFile']:null;
- if ($myFile!=null) {
- // instanciation de la classe
- $myUpload=new myUpload();
- // appel des méthodes publiques pour le paramétrage de l'upload
- // types de fichiers acceptées
- $myUpload->addFileType("application/x-zip-compressed" );
- $myUpload->addFileType("application/vnd.ms-excel" );
- // je déclare le fichier à envoyer
- $myUpload->setFile($myFile);
- // taille maximale du fichier en octets
- // je la place à 1mo
- $myUpload->setMaxSize(1000000);
- // dossier de destination du fichier
- $myUpload->setMyDir("fichiers/" );
- // je crée le nom du fichier
- $myUpload->setMyName("fichier_envoye" );
- // j'exécute l'upload
- $myUpload->myUpload();
- }
- ?>
- <form method="post" enctype="multipart/form-data" >
- Mon fichier : <input type="file" name="myFile" id="myFile" /> <br />
- <input type="submit" value="envoyer" />
- </form>
|
Et testclass1.php qui contient la classe :
Code :
- <?
- class myUpload {
- // pour la coloration syntaxique d'asp-php
- /*~*~*~*~*~*~*~*~*~*~*/
- /* 1. propriétés */
- /*~*~*~*~*~*~*~*~*~*~*/
- /**
- * @var (String)
- * @desc Fichier envoyé par formulaire
- */
- private $myFile;
- /**
- * @var (String)
- * @desc Dossier dans lequel seront stockés les fichiers envoyés
- */
- private $myDir;
- /**
- * @var (Integer)
- * @desc Taille maximale acceptée pour un fichier envoyé
- */
- private $myMaxSize;
- /**
- * @var (Array)
- * @desc Types de fichiers envoyés acceptés
- */
- private $myTypes;
- /**
- * @var (string)
- * @desc Nom du fichier après copie
- */
- private $myName;
- /*~*~*~*~*~*~*~*~*~*~*/
- /* 2. méthodes */
- /*~*~*~*~*~*~*~*~*~*~*/
- public function __construct() {
- // $this->myTypes est un tableau à deux dimensions.
- // on le déclare ainsi
- $this->myTypes=array();
- // on place la valeur de myName à null
- $this->myName=null;
- }
- // pour la coloration syntaxique d'asp-php
- /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
- /* 2.1 méthodes privées */
- /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
- /**
- * Vérifie l'existence d'un dossier
- *
- * <p>Teste l'existence d'un dossier,
- * renvoie une erreur si le dossier est introuvable</p>
- *
- * @name myUpload::testDir()
- * @param $dir
- * @return string
- */
- private function testDir($dir) {
- // la fonction is_dir teste l'existence d'un dossier
- if (is_dir($dir)) {
- // si le dossier existe, j'applique la valeur $dir
- // à la propriété $this->dir
- // lorsque nous lanceront la copie de fichier,
- // nous rappelleront la propriété $this->dir
- $myDir=$dir;
- }
- else {
- // si il y a une erreur lors du paramétrage,
- // je renvoie une valeur nulle
- $myDir=null;
- }
- // $myDir est la valeur retournée (string)
- return $myDir;
- }
- /*
- * Renvoie la taille du fichier
- *
- * <p>Renvoie la taille du fichier en octets</p>
- *
- * @name myUpload::fileSizer()
- * @param $file
- * @return int
- */
- private function fileSizer($file) {
- return $file['size'];
- }
- /*
- * Renvoie la taille du fichier
- *
- * <p>Renvoie la taille du fichier en octets</p>
- *
- * @name myUpload::fileType()
- * @param $file
- * @return string
- */
- private function fileType($file) {
- return $file['type'];
- }
- /*
- * Exécute la copie du fichier
- *
- * <p>Copie le fichier dans le dossier spécifié</p>
- *
- * @name myUpload::fileSizer()
- * @param $dir
- * @return voix
- */
- private function myCopy($file, $dir, $nom) {
- // aucune vérification à faire, puisque nos contrôles
- // ont été effectués en amont
- if(!copy($file['tmp_name'], $dir."/".$nom));
- {
- echo "copie de fichier impossible. Je sais pas pourquoi :-/";
- }
- }
- /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
- /* 2.1 méthodes publiques */
- /*~*~*~*~*~*~*~*~*~*~*~*~*~*/
- /*
- * Déclare le fichier posté
- *
- * <p>Déclaration du fichier posté. </p>
- *
- * @name myUpload::setFile()
- * @param $file
- * @return string
- */
- public function setFile($file) {
- // on teste que le fichier envoyé est bien nommé
- // s'il n'est pas nommé, cela signifie qu'il y a
- // soit une erreur dans le formulaire,
- // soit une erreur dans l'instanciation
- if ($file['tmp_name']!="" ) {
- $myFile=$file;
- }
- else {
- // si le fichier est en erreur, on renvoie un null
- $myFile=null;
- }
- $this->myFile=$myFile;
- }
- /**
- * Déclare le nom du fichier à copier
- *
- * <p>Le nom du fichier après copie. </p>
- *
- * @name myUpload::setName()
- * @param $name
- * @return string
- */
- public function setMyName($name) {
- $this->myName=$name;
- }
- /**
- * Déclare un nouveau type de fichier accepté
- *
- * <p>Liste les types de fichiers acceptés.</p>
- *
- * @name myUpload::addFileType()
- * @param $typeFile
- * @return void
- */
- public function addFileType($typeFile) {
- // on déclare un petit compteur
- // qui servira à compter le nombre
- // de type de fichiers acceptés
- $i=0;
- // J'ai besoin de connaître le nombre de fichiers
- // acceptés lors de l'instanciation. Pour ça, je
- // boucle sur la propriété myTypes (array)
- // et j'incrémente le compteur
- foreach($this->myTypes as $key) {
- $i++;
- }
- // on ajoute comme valeur $typeFile à la propriété $this->myTypes
- // Comme la propriété myTypes est un tableau (array), on incrémente
- // $i de 1 pour ne pas écraser la valeur précédente
- $this->myTypes[$i]=$typeFile;
- // j'ai appliqué la valeur directement à ma propriété.
- // je ne retourne donc directement rien
- }
- /**
- * Taille maximale de fichier accepté
- *
- * <p>Déclare la taille maximale en Octets acceptée par
- * le programme. Si le fichier envoyé est trop grand, on
- * renvoie une valeur nulle.</p>
- *
- * @name myUpload::setMaxSize()
- * @param $typeFile
- * @return void
- */
- public function setMaxSize($max) {
- // je vérifie que la valeur de $max est bien
- // un nombre entier
- if (is_integer($max)) {
- $myMax=$max;
- }
- else {
- // si une erreur est détectée, on renvoie une valeur null
- $myMax=null;
- }
- $this->myMaxSize=$myMax;
- }
- /**
- * Déclaration du dossier cible
- *
- * <p>Déclare la taille maximale en Octets acceptée par
- * le programme. Si le fichier envoyé est trop grand, on
- * renvoie une valeur nulle.</p>
- *
- * @name myUpload::setMyDir()
- * @param $dir
- * @return void
- */
- public function setMyDir($dir) {
- // j'appelle la méthode de test du dossier
- // que j'ai crée plus tôt.
- // le nom de la variable n'a aucune
- // importance.
- // seul compte le nom de la propriété ($this->myDir)
- $myDir=$this->testDir($dir);
- $this->myDir=$myDir;
- if ($this->myDir==null)
- {echo "repertoire vide";}
- }
- public function myUpload() {
- // on teste les propriétés une par une
- // $this->myFile
- if ($this->myFile!=null) {
- echo "fichier detecté : OK \n ";
- // $this->myMaxSize
- if ($this->myMaxSize!=null) {
- // $this->myDir
- if ($this->myDir!=null) {
- // $this->myName
- echo "Repertoire detecté $this->myDir \n ";
- if ($this->myName!=null) {
- // $this->myTypes
- echo "nom de fichier : $this->myName \n ";
- if ($this->myTypes[0]!=null) {
- // je récupère maintenant la taille du fichier
- $mySize=$this->fileSizer($this->myFile);
- // je la compare à la taille maximale acceptée
- if ($mySize<=$this->myMaxSize) {
- // je récupère le type de fichier
- $fileType=$this->fileType($this->myFile);
- // et je le compare à la liste des types acceptés
- foreach ($this->myTypes as $key) {
- // puis exécution de l'upload
- if ($key==$fileType) {
- $this->myCopy($this->myFile, $this->myDir, $this->myName);
- }
- }
- }
- else {
- echo ("Le fichier est trop gros" );
- }
- }
- else {
- echo ("Vous devez specifier les types de fichiers acceptes." );
- }
- }
- else {
- echo ("Vous devez specifier un nom pour le fichier." );
- }
- }
- else {
- echo ("Le dossier de destination n'est pas bon. Veuillez corriger." );
- }
- }
- else {
- echo ("La taille maximale n'a pas ete specifiee, veuillez corriger." );
- }
- }
- else {
- echo ("Le fichier n'a pas ete reçu." );
- }
- }
- /**
- * Destructeur
- *
- * <p>Destruction de l'instance de classe</p>
- *
- * @name myUpload::__destruct()
- * @return void
- */
- public function __destruct(){
- }
- }
- ?>
|
Malgrès tout les controles, quand je test, il ne me retourne AUCUNE erreur. La page revient simplement au formulaire vierge. pourtant il rentre dans les 'if' (cf les 'echo' qui me donne le nom de fichier etc..)
Tout semblerai correct sauf que : Aucun fichier n'est uploadé dans racine/fichiers/
Comprend pas pourquoi. |