Bonjour,
J'ai une solution mutualisée OVH, et sur mon site j'essaie de faire de l'upload de photo en angularjs/php. Sur un fichier moyen (5Mo, upload en 1 minute), tout fonctionne
- L'image se retrouve à son emplacement définitif
- L'image est redimensionnée
- L'enregistrement est ensuite correctement créé en base de donnée pour cette image
Par contre sur un fichier un peu plus lourd (15Mo, 4 minutes), je ne comprend pas trop ce qui se passe...
Concrètement, j'utilise angular js, grâce auquel je contrôle l'avancement de mon upload :
En php, je récupère mon fichier comme ceci :
Code : 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 $scope.uploadEnCours = {etat:true,nombrePhoto:$files.length,nombrePhotoReussi:0,nombrePhotoEchec:0,pourcentPhoto:0}; for (var i = 0; i < $files.length; i++) { var file = $files[i]; $scope.upload = $upload.upload({ url: '/restservice/AlbumPhotoRestService.php?idAlbumPhoto='+$scope.albumPhoto.id+"&cmd=uploadPhoto&typePhoto=PHOTO", file: file, headers: { "Content-Type": file.type }, }).progress(function(evt) { $scope.uploadEnCours.pourcentPhoto=parseInt(100.0 * evt.loaded / evt.total); }).success(function(data, status, headers, config) { $scope.uploadEnCours.nombrePhotoReussi = $scope.uploadEnCours.nombrePhotoReussi + 1; if ($scope.isTransfertTermine()) { $scope.getListePhoto(); } }).error(function(data, status, headers, config) { console.log(data); $scope.uploadEnCours.nombrePhotoEchec = $scope.uploadEnCours.nombrePhotoEchec + 1; if ($scope.isTransfertTermine()) { $scope.getListePhoto(); } }); }
Ce que je vois, dans le cas d'un fichier trop gros :
Code : 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 protected function uploadPhoto() { $tempFile = $_FILES['file']['tmp_name']; $tempPath = dirname($tempFile); $tempName = basename($tempFile); $idAlbumPhoto = ParameterGetter::getRequestParameter("idAlbumPhoto",true); $typePhoto = ParameterGetter::getRequestParameter("typePhoto",true); $targetPath = AlbumPhotoService::getFolderAlbumPhoto($idAlbumPhoto); $fileName = $_FILES['file']['name']; $fileName = preg_replace('/([^.a-z0-9]+)/i', '_', $fileName); Logger::getLogger()->logInfo("Upload d'une photo dans le répertoire $targetPath ($fileName)"); @mkdir(str_replace('//','/',$targetPath), 0755, true); $targetFile = str_replace('//','/',$targetPath) . $fileName; move_uploaded_file($tempFile,$targetFile); str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile); fctredimimage(1280, 1280, '', '', $targetPath, $fileName, 90); PhotoService::createEnregistrementPhoto($idAlbumPhoto, $fileName,'', $typePhoto); }
- L'upload arrive bien à 100%
- Mon script php est lancé, mais fileName est vide (visible dans le log : "Upload d'une photo dans le répertoire /monSite/www/data/albumphoto/29/ ()")
- Une enregistrement avec un nom de fichier vide est créé en base de données
- Mon image n'existe pas dans le répertoire de destination
J'ai essayé avec un phpinfo de voir ce qui pourrait être en cause, mais je ne trouve rien qui soit en dehors des clous :
- max_execution_time = 300
- max_input_time = -1
- post_max_size = 64M
- upload_max_filesize = 64M
Quelqu'un saurait d'où vient le problème?
Merci!
Partager