Bonjour,

Dans le cadre d'un projet, je dois gérer le dépôt de documents. Je fonctionne sous un serveur ubuntu.
Pour réaliser mon dépôt j'ai un formulaire html contenant un input file simple. Le contenu est envoyé via une requête AJAX qui va traiter le contenu et stocké les fichiers uploadés dans un répertoire définit.
Quand je suis en phase de test en local (WAMP), je n'ai aucun soucis le dépôt fonctionne bien, je n'ai aucune erreur. Mais en production sur mon serveur ubuntu, lors de l'envoie de mon formulaire j'ai une erreur 500 qui intervient alors que le dépôt c'est bien passé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
POST "Adresse" 500 (Internal Server Error)
J'ai fait les manipulations nécessaires coté serveur avec les commandes permettant l'écriture au groupe www-data sur mon dossier et ses sous-dossiers, et j'ai ajouté mon compte user à ce groupe.


Voici mon code pour vous aider :

Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
<form enctype="multipart/form-data" action="compte/deposer" method="POST" id="formDepot">
     <input type="file" name="files[]" class="files_depot">
     <input type="submit" value="Envoyer"  id="deposer" name="deposer">
</form>

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
/**
* Fonction qui permet d'upload un fichier dans un répertoire donné. Lors de l'upload le fichier est renommé de manière unique
* Si l'upload a fonctionné on retourne la liste des fichiers uploadés avec leur nouveau chemin d'accès.
* @param Array $fichiers Contient la liste des fichiers à uploader
* @param String $dossier Répertoire dans lequel va être placé le fichier, par défaut le dossier Upload/Bean/Corbeille/
* @return Array Si les fichiers ont été uploadés, on renvoie la liste des fichiers avec pour chacun d'eux le chemin complet
* @throws Exception Echec de l'upload si le format n'est pas le bon ou si le fichier n'existe pas
*/
function upload_fichier($fichiers,$dossier=NULL){
    $dossier = $dossier == NULL ? "Documents/Upload/Autre/" : "Documents/Upload/".$dossier; 
 
    //Rajoute un slash en fin si celui n'existe pas
    $dossier .= substr($dossier,-1,1) == '/' ? '' : '/'; 
 
    for($i=0; $i < sizeof($fichiers['name']); $i++) {
 
       $fichier = basename($fichiers['name'][$i]);
       $extensions = array('.txt', '.pdf', '.doc','.docx','.jpg','.png','.odp','.xls','.xlsx');
       $extension = strrchr($fichier, '.');
 
       //Début des vérifications de sécurité
       //Si l'extension n'est pas dans le tableau
       if(!in_array($extension, $extensions)){
            $erreur = "Le type de fichier ($extension) fournit n\'est pas correct";
       }
 
       if(!isset($erreur)){ //S'il n'y a pas d'erreur, on upload
            //On formate le nom du fichier avec un générateur de nom pour rendre chaque document unique
            $fichier = strtr(generer_nom_doc(strrchr($fichier, '.')), 
                        'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
                         'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
            $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
            //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
            if(move_uploaded_file($fichiers['tmp_name'][$i], $dossier.$fichier)){ 
                 $fichiers_upload[$i] = $dossier.$fichier;
             } else {  //Sinon (la fonction renvoie FALSE).
                 throw new Exception("Echec de l'upload");
             }
       } else {
             throw new Exception($erreur);
        }
    }
   return $fichiers_upload;
 }


Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
/*
* AJAX envoie du dépôt de documents
*/
$("#formDepot").submit(function(e) {   
        e.preventDefault();
        var formObj = $(this);
        var formURL = formObj.attr("action");
        if(window.FormData !== undefined) { 
            // Pour les navigateurs intégrants le HTML5
            var formData = new FormData(this);
            $.ajax({
                url: formURL,
                type: "POST",
                data:  formData,
                mimeType:"multipart/form-data", //Permet d'envoyer les documents
                contentType: false,
                cache: false,
                processData:false,
                success: function(data) {
                    if(data === 'ok'){
                        alert("Votre demande à bien été enregistrée et fera l'objet d'un traitement.\n\Vous pouvez retrouver l'ensemble de vos demandes dans la partie 'Suivie de mes demandes' au bas de cette page");
                        oTableSd.fnReloadAjax();
                        document.location.href = "compte/depotDocument";
                    } else {
                        alert('Erreur lors de l\'envoie de votre demande. Merci de vérifier tous les champs.');
                    }
                },
                error: function(data){
                    alert('Erreur lors de l\'envoie de votre demande. Merci de vérifier tous les champs.');
                } 	        
          });
});