Пример #1
0
 /**
  * Returns array('success'=>true) or array('error'=>'error message')
  */
 function handleUpload($uploadDirectory, $replaceOldFile = FALSE)
 {
     if (!is_writable($uploadDirectory)) {
         return array('error' => "Le dossier de téléchargement n'est pas accessible en écriture.");
     }
     if (!$this->file) {
         return array('error' => 'Pas de fichiers envoyés.');
     }
     $size = $this->file->getSize();
     if ($size == 0) {
         return array('error' => 'Le fichier est vide.');
     }
     if ($size > $this->sizeLimit) {
         return array('error' => 'Le fichier est trop large.');
     }
     $pathinfo = pathinfo($this->file->getName());
     $filename = $pathinfo['filename'];
     //$filename = md5(uniqid());
     $ext = strtolower($pathinfo['extension']);
     if ($this->allowedExtensions && !in_array($ext, $this->allowedExtensions)) {
         $these = implode(', ', $this->allowedExtensions);
         return array('error' => "Le fichier n'a pas une extension autorisée, voici les autorisées : " . $these . '.');
     }
     /*if(!$replaceOldFile){
           /// don't overwrite previous files that were uploaded
           while (file_exists($uploadDirectory . $filename . '.' . $ext)) {
               $filename .= rand(10, 99);
           }
       }*/
     // on enleve les espaces et les accents pour le nom de fichier
     $search = array('@[éèêëÊË]@i', '@[àâäÂÄ]@i', '@[îïÎÏ]@i', '@[ûùüÛÜ]@i', '@[ôöÔÖ]@i', '@[ç]@i', '@[ ]@i', '@[^a-zA-Z0-9_]@');
     $replace = array('e', 'a', 'i', 'u', 'o', 'c', '_', '');
     $filename = preg_replace($search, $replace, utf8_decode($filename));
     $attach = new Attach($GLOBALS['wiki']);
     $GLOBALS['wiki']->setParameter("desc", $filename);
     $GLOBALS['wiki']->setParameter("file", $filename . '.' . $ext);
     // dans le cas d'une nouvelle page, on donne une valeur a la date de création
     if ($GLOBALS['wiki']->page['time'] == '') {
         $GLOBALS['wiki']->page['time'] = date('YmdHis');
     }
     // on envoi l'attachement en retenant l'affichage du résultat dans un buffer
     ob_start();
     $attach->doAttach();
     $fullfilename = $attach->GetFullFilename(true);
     ob_end_clean();
     if ($this->file->save($fullfilename)) {
         return array_map('utf8_encode', array('success' => true, 'filename' => $fullfilename, 'simplefilename' => $filename . '.' . $ext, 'extension' => $ext));
     } else {
         return array_map('utf8_encode', array('error' => 'Impossible de sauver le fichier.' . "L'upload a été annulé ou le serveur a planté."));
     }
 }