IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Upload de fichiers par fragments (chunk) - Erreur d'ouverture du fichier temporaire


Sujet :

Bibliothèques & Frameworks

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Upload de fichiers par fragments (chunk) - Erreur d'ouverture du fichier temporaire
    Bonjour,

    J'essaye d'utiliser le code source d'ABCIWEB : Upload de fichiers par fragments (chunk), reprise d'upload, affichage des informations en temps réel, fonctions et styles événementiels. J'utilise plus précisément le fichier UploadAjaxABCI_Custom.php.

    Malheureusement j'obtiens l'erreur suivante : "Echec du téléchargement. Erreur d'ouverture du fichier temporaire." La seule modification que j'ai réalisé se situe à la ligne 33. En effet, je limite la taille du fragment à 1 Mo.

    $taille_fragment = Return_Octets('1M');

    Je me suis dis qu'il s'agissait certainement d'un problème de droits, donc j'ai changé les droits du dossier "Upload_Temp" avec les valeurs 755. Cela n'a pas fonctionnait. J'ai donc essayé d'appliquer ces valeurs à l'ensemble de dossier contenant ce script. Malheureusement cela ne fonctionne toujours pas.

    Est-ce que quelqu'un peut m'éclaircir sur ce point ?

    Je précise que je souhaite avoir la taille du fragment égale à 1 Mo, car je souhaite utiliser ce script pour résoudre un problème assez incompréhensible pour ma part. Je développe actuellement un site pour quelqu'un habitant à Taiwan. Le système d'upload d'image que j'avais développé fonctionnait parfaitement en France, mais envoyait une erreur interne à Taiwan pour les fichiers dont la taille était supérieure à 2Mo. J'espère pouvoir résoudre ce problème avec ce script.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Salut,

    Bonne déduction en effet c'est le bloc de ligne suivant qui peut générer cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $fichier_cible = @fopen($this->fichier_temp_adresse, 'a+');
    if($fichier_cible === false)
    {
    	$this->reponse_upload['erreur'] = 'Erreur d\'ouverture du fichier temporaire.';
    	return false;
    }
    Si tu n'as pas modifié le code dans le script php de destination ajax "UploadAjaxABCI_Php_Load_Custom.php" ni modifié l'organisation des dossiers, en effet tu dois avoir des droits insuffisants pour lire et écrire dans le dossier "Upload_Temp". Essaies peut-être 777 y compris sur le dossier parent "Upload-Ajax-ABCI".
    Il te faut pouvoir lire et écrire dans ce dossier. Tu n'es pas obligé de tester le script pour voir si tu as les bons droits. Dans un fichier vierge séparé tu peux utiliser les fonctions php is_writable et is_readable pour avoir une réponse plus rapide.

    Quand tu auras les bons droits, essaies de monter vers 2Mo (puisque tu dis que c'est le maximum) car 1Mo ça génère plus de trafic réseau. Tu peux aussi rentrer des nombres décimaux, par exemple $taille_fragment = Return_Octets('1.8M');

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Alors c'est réglé ? Je suppose que oui puisque pas de nouvelle question.

    Je précise au passage pour les débutants que les droits nécessaires pour écrire et lire dans un dossier peuvent être différents suivant les hébergeurs. Parfois 705 suffit, parfois 755, parfois 777. Il est déconseillé de mettre des droits supérieurs à ceux qui sont nécessaires et donc le plus simple est de se documenter auprès de l'hébergeur.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci ABCIWEB pour tes explications supplémentaires. Par contre, je n'ai malheureusement pas réussi à résoudre mon problème sur ce serveur. J'ai donc abandonné de ce côté là et j'ai recommencé à travailler sur un autre serveur, Linux celui-ci et tout fonctionne beaucoup mieux désormais.

    Je ne sais pas si je dois ouvrir un nouveau topic ou si je peux poser ma question directement ici. Mais je suis désormais entrain d'utiliser le formulaire d'upload du fichier "UploadAjaxABCI_Redimensions.php". Après avoir parcouru le mode d'emploi et n'ayant pas trouvé la solution, je me demandais s'il était possible de limiter le nombre de fichiers à envoyer ?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je viens d'obtenir ma réponse tout seul. Donc oui, en effet c'est possible. Il suffit de rajouter des champs <input type="file">.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Cela dépend aussi dans quel but tu veux faire cela.
    Il faudrait faire un contrôle côté serveur pour être vraiment efficace car que je soit en javascript ou en html, rien n'empêche de rafraichir la page pour faire d'autres téléchargements...

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 64
    Points
    64
    Par défaut Erreur d'ouverture du fichier temporaire avec ABCI v.8
    Bonjour
    J'obtiens cette erreur sur le site Web alors qu'en local ça fonctionne.
    j'ai la version 8 que j'ai adaptée pour mes différents modules de téléchargement.
    J'ai tout essayé sans résultat.
    J'ai d'abord essayé le fichier Test config pour obtenir ceci:
    Status ok : PhpUpload/UploadTemp/ existe
    - Status ok hpUpload/UploadTemp/ est accessible en lecture
    - Status ok : PhpUpload/UploadTemp/ est accessible en écriture
    - Status ok : possibilité d'écrire un fichier dans le dossier
    post_max_size = 512M
    upload_max_filesize = 512M
    Et j'ai bien le fichier temp:
    [UploadAjaxABCI] => Array [578af4567bd9e5867fc027184de20d69cbd0c780a2548435c0e74eff97c9f175] => Array [token] => 1
    Par contre je n'ai pas essayé de stopper le script dès le message d'erreur pour savoir si le fichier tempo est bien dans le dossier.
    pourtant en local, il s'y trouve!
    Merci d'éclairer mes neurones!

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 64
    Points
    64
    Par défaut Trouvé l'erreur!
    Enfin après 2 - 4 h de recherche j'ai enfin trouvé pourquoi cet erreur sur le serveur et pas en Local.
    dans le fichier class/ParamsDefautServeur.php
    AVANT: $tab['dossier_temporaire'] = '/Php_upload/Upload_Temp/';
    Maintenant: $tab['dossier_temporaire'] = '/Php_Upload/Upload_Temp/';

    Php_Upload est bien réel sur le serveur.
    Windows en local ne fait pas la distinction entre minus et Majuscules. Il tolère!
    Pouf Pouf windows !

    Merci tout de même pour ce fabuleux script que j'exploite à gogo quand il y a plusieurs fichiers à télécharger.

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Bonjour,

    Le problème se produit-il quelque soit la taille du fichier ? Supérieur ou inférieur à ta limite de 512M, c'est pareil ? Fais un test pour voir si c'est pareil.

    Cela peut-être du à un problème de récupération en javascript du cookie envoyé par php...

    Le script n'a pas été changé depuis plus d'un an, et les utilisateurs récents n'ont pas rencontrés de problème à ce niveau. Et surtout, c'est la première fois aussi que l'on me parle de cette erreur, donc difficile d'être très précis.

    Cela dit cette erreur est générée lorsque le script ne peut pas créer ou lire le contenu du fichier temporaire. Dans le script de la classe UploadAjaxABCIServeur.php c'est le code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    else {
            // On ouvre ou on crée le fichier temporaire
    	$fichier_cible = @fopen($this->file_temp_address, 'a+');
    	if($fichier_cible === false)
    	{
    		$this->reponse_upload['upabci_erreur'] = SetMessages::get('UpAbServerOuvertureTemp');
    		$this->deleteFileTempCookie();
    		return false;
    	}
    ...
    }
    Et il n'y a pas d'autre code qui puisse générer cette erreur.

    Pour ne pas rentrer dans le "else" j'indique en commentaire plus haut qu'il faut que le fichier soit en un seul morceau et que ni saveAll() ni verif_type_MIME ne doivent été configurés. D'où l'intérêt d'essayer avec un fichier qui soit en dessous de la taille limite de ton serveur (512M), mais il faudra aussi désactiver le contrôle du type MIME qui est activé par défaut. Donc pour reprendre l'exemple du mode d'emploi, si l'on utilise la configuration tableau plus simple et plus pratique, la configuration de ton script serveur (destination de la requête ajax) devrait ressembler à :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $config = [
    'dossier_destination' => '../mon_dossier/',
    'extensions' => ['mp4', 'divx', 'flv', 'mkv'],
    'max_size' => '500 Mo',
    'verif_type_MIME' => false
    ];
    $up = new UploadAjaxABCIServeur($config);

    Tu peux éventuellement testé ça, mais au final si ça fonctionne cela ne fera que confirmer que le fichier temporaire ne peut pas être récupéré sans limiter certaines fonctionnalités de la classe qui permet entre autre de surpasser les configurations upload_max_filesize, et post_max_size du serveur. Pour le contrôle du type MIME tu pourrais l'implémenter manuellement avec les fonctions intégrées (cf. getMimeType du trait UploadABCITraitServices.php) et en prenant modèle sur la fonction verifMimeType de la classe UploadAjaxABCIServeur mais ce sera moins simple.


    Enfin bref, soit tu as modifié l'organisation des fichiers du dossier d'upload (assez peu probable si ça fonctionne en local), soit il y a un bug dans un bout de ton code (fais attention avec les majuscules/minuscules car un serveur d'évaluation sous windows ne générera pas d'erreur alors que linux est case sensitive et buguera), soit encore ton serveur interdit la récupération en javascript du cookie généré par php. A ce propos c'est peut être dû à une certaine configuration de "Content-Security-Policy" mais je ne connais pas suffisamment bien toutes les options pour te dire laquelle pourrait interdire cette transmission. Toujours à ce propos j'indique aussi dans le trait ParamsDefautServeur que le cookie ne doit pas être configuré avec "httponly" sinon javascript ne pourra pas le récupérer.

    Ou c'est encore autre chose... mais bon perso je viens d'installer cette classe sur un serveur distant configuré en php 8.3.8 et tout fonctionne bien, donc difficile de t'en dire plus.

    EDIT
    Arf, je n'avais pas lu ta dernière réponse, c'est donc un problème avec ces foutues majuscules/minuscules, un grand classique finalement

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 64
    Points
    64
    Par défaut
    "ces foutues majuscules/minuscules, un grand classique finalement"
    Pourtant j'y fais gaffe!
    Merci tout de même
    Ta réponse intéressera peut-etre d'autres personnes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Upload de gros fichiers par fragments (chunk)
    Par ABCIWEB dans le forum Téléchargez
    Réponses: 298
    Dernier message: 04/12/2023, 16h41
  2. erreur d'ouverture de fichier
    Par Bass_Room dans le forum C
    Réponses: 1
    Dernier message: 28/02/2007, 15h36
  3. (VBA-E) Erreur sur ouverture de fichier
    Par Stutak dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/08/2006, 15h11
  4. [DOM] Erreur d'ouverture de fichier XML
    Par Arnard dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 03/05/2006, 10h38
  5. Erreur d'ouverture de fichier :s
    Par NeuroGen dans le forum Général Python
    Réponses: 3
    Dernier message: 15/03/2006, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo