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

PHP & Base de données Discussion :

Décodage de fichiers (pdf, doc, xls, txt, etc.) encodés en Base64 dans une base de données MySQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut Décodage de fichiers (pdf, doc, xls, txt, etc.) encodés en Base64 dans une base de données MySQL
    Bonjour,

    Je dois ajouter à un projet php, qui a été développé par une tierce partie il y a plusieurs temps de ça, la fonctionalité d'aller récupérer une chaîne de caractère encodée en Base64 contenant un document quelquonque (pdf, doc, xls, txt, etc...) dans une base de données MySQL, décoder cette chaîne de caractère afin qu'elle devient le fichier qu'elle représente et en dernier lieu, créer un lien permettant de télécharger ce fichier. La table (de la base de données) contenant la chaîne de caractère encodé en Base64, possède le nom original du fichier qui a été encodé et doit être utilisé pour le nom du lien (ex: nom_du_fichier.pdf).

    Ma première tentative à été de bidouiller un bout de code qui:
    - va chercher la chaîne de caractère en Base64 et le nom associé au fichier dans la base de données
    - je passe ces deux valeurs à des variables: $fichier_encode64 et $nom_fichier_encode64
    - je passe la chaîne de caratère à la fonction base64_decode() qui passe la valeur retournée à la variable $fichier_decode64
    - le tout est outputé sur la page ainsi: <?php echo "<a href='" . $fichier_decode64 . "'>" . $nom_fichier_encode64 . "</a>"; ?>

    Lorsqu'on clique sur le lien, il charge la longue chaîne de caractère représentant le fichier plutôt que de télécharger le fichier. J'ai trouvé 2 posts qui donnent quelques indications sur comment s'y prendre dans des cas particuliers mais rien de général à plusieurs type de fichiers.

    Est-ce qu'il y a quelqu'un qui s'y connaît dans la matière? Toutes vos suggestions sont les bienvenues.

    Merci.

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Déjà tu t'y prends mal. Ce n'est pas en mettant le contenu du fichier dans un href que tu auras ton fichier.

    A ta place je ferais un lien du genre <a href='ma_page.php?fichier=toto.pdf'>toto.pdf</a> où toto.xls est le nom du fichier qui vient de ta table.

    Dans ma_page.php je rechercherais le contenu dans la table en fonction du paramètre fichier (après avoir fait tous les contrôles de sécurité), ferais la conversion depuis la base 64 et renverrais la page via un header adéquat.

    Dans l'exemple ci-dessous je ne gère que les pdf mais tu peux renvoyer le bon header en fonction de l'extension. Si l'extension = pdf alors tel header sinon si extension = xls alors tel autre header etc...
    Il faut aussi gérer les erreurs comme une extension inconnue, un nom de fichier qui n'existe pas dans la table, le nom de fichier qui n'est pas passé, etc...

    ma_page.php
    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
    <?php
     
    //---- DATABASE
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'tests');
    define('DB_USER', 'root');
    define('DB_PWD' , '');
    $filename = $_GET['fichier'];
     
    $bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    $query     = "SELECT document from document where nom_fichier=:nom_fichier";
    $prepared  = $bdd->prepare($query);
    $prepared->bindParam(':nom_fichier', $filename );
    $prepared->execute();
    header('Content-Type: application/pdf');
    header("Content-Disposition: attachment; filename=\"$filename\"");
    $row = $prepared->fetch(PDO::FETCH_ASSOC);
    print base64_decode($row['document']);

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    Merci pour ton retour. Actuellement, la requête du fichier encodé se fait après avoir cliqué un lien d'accès se trouvant dans un tableau, comme ceci:

    COLLECTEUR DATE ASSIGNATION NO. DE COMPTE NOM DU DÉBITEUR STATUT TYPE NB. DE MISE À JOUR ACCÉDER
    John Smith 2018-12-08 2734561 Jane Smith Actif Bancaire 3 ->
    Neo Smith 2018-12-08 2730561 Julie Smith Actif Bancaire 7 ->

    Ces données représentent les infos de haut niveau d'un dossier client, une fois que la flèche sous la colonne - ACCÉDER - est cliqué, on passe un numéro de dossier dans l'url (ex: details.php?dossier=1234567) qui envoi une requête SQL (SELECT * FROM dossier_client WHERE no_dossier = GET['dossier']) qui retourne les infos détaillées du dossier client. Sur cette page détaillée se trouve plusieurs informations parmi lesquelles peut ou pas se retrouver un ou plusieurs fichiers qui seront listés dans un tableau et si désiré, téléchargé lorsque le nom du fichier est cliqué:

    FICHIERS DATE
    fichier_1.pdf 2018-12-08
    fichier_2.docx 2018-12-07
    fichier_3.xls 2018-12-03

    En me basant sur ta suggestion, vais-je devoir créer un nouveau header pour chaque fichier qui sera dans le tableau?

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Oui. Ton lien fera toujours référence à la même page. Seul le paramètre nom du fichier change. Après passer d’un type de header à un autre en fonction du type de fichier ne représente aucune difficulté et les informations sont facilement disponibles.

    Par contre il faut tout sécuriser pour qu’on ne puisse prendre le script en défaut.

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    Parfait. Merci pour la précision. Je vais implémenter et adapter ton exemple de code dans une fonction qui sera appeler quand le lien du fichier (details.php?fichier=fichier_1.pdf) sera cliqué:

    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
     
    if(isset($_GET['fichier'])){
     
    	$filename = $_GET['fichier'];
    	$bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    	$query     = "SELECT document from document where nom_fichier=:nom_fichier";
    	$prepared  = $bdd->prepare($query);
    	$prepared->bindParam(':nom_fichier', $filename );
    	$prepared->execute();
     
    	$extension = substr(strrchr($filename, "."), 1);
    	header("'Content-Type: application/" . $extension . "'");
    	header("Content-Disposition: attachment; filename=\"$filename\"");
     
    	$row = $prepared->fetch(PDO::FETCH_ASSOC);
    	print base64_decode($row['document']);
    }
    Je te garde au courant si tout a fonctionné.

  6. #6
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Il faut que tu fasses une recherche sur le content-type des différents types de fichiers. Ils n’ont pas tous la même structure.

  7. #7
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    Bon point. J'allais omettre ce détail important. Je vais me fier sur la liste de cette page wiki afin de trouver le bon content-type dépendamment de l'extension du fichier.

    Je vais essayer d'intégrer tout ça et revenir poster le code final et mettre la discussion à résolu dans le cas que quelqu'un d'autre chercherait d'accomplir quelque chose de similaire.

  8. #8
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    Voici le code final que j'ai implémenté.

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    if(isset($_GET['file'])){
    	$filename = $_GET['file'];
     
    	//Chercher la chaîne de caractère possédant le document encodé en Base64
    	$file_query = 'SELECT document_encode FROM document WHERE document_id=' . $_GET['file_id'];
    	$file_result = $db->query($file_query);
    	$file_result_row = mysqli_fetch_assoc($file_result);
    	//Extraction de l'extension du fichier
    	$file_extension = strtolower(substr(strrchr($filename, "."), 1));
    	$content_type = '';
     
    	//Trouver le bon Content-Type selon l'extension
    	switch ($file_extension) {
    			    case "pdf":
    			        $content_type = "application/pdf";
    			        break;
    			    case "doc":
    			        $content_type = "application/msword";
    			        break;
    			    case "docx":
    			        $content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
    			        break;
    			    case "xls":
    			        $content_type = "application/vnd.ms-excel";
    			        break;
    			    case "xlsx":
    			        $content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    			        break;
    			    case "ppt":
    			        $content_type = "application/vnd.ms-powerpoint";
    			        break;
    			    case "pptx":
    			        $content_type = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
    			        break;
    			    case "odt":
    			        $content_type = "application/vnd.oasis.opendocument.text";
    			        break;
    			    case "csv":
    			        $content_type = "text/csv";
    			        break;
    			    case "txt":
    			        $content_type = "text/plain";
    			        break;
    			    case "png":
    			        $content_type = "image/png";
    			        break;
    			    case "jpg":
    			        $content_type = "image/jpeg";
    			        break;
    			    case "jpeg":
    			        $content_type = "image/jpeg";
    			        break;
    			}
     
    			header("'Content-Type:" . $content_type . "'");
    			header("Content-Disposition: attachment; filename=\"$filename\"");
    			print base64_decode($file_result_row['document_encode']);
    		}
    Merci @badaze, ton code initial m'a permit d'aboutir au code final.

  9. #9
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Tu peux t’inspirer de ce qui suit pour alléger le code.

    https://www.developpez.net/forums/d1...nternationaux/

    Je ne vois pas d’action dans le cas où on passe une extension qui n’est pas gérée.
    Attention. Le paramètre que tu passes à la page n’est pas protégé. Tu risques une injection sql.

  10. #10
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    En effet le code n'est pas très optimisé... Je devais rendre le tout le plus vite possible mais je vais quand même m'inspirer du lien suggéré afin de retourner sur le code afin de le refactoriser. En ce qui a trait au paramètre non protégé passé à la page, c'est une application utilisé à l'interne d'une compagnie et non public, mais je vais quand même fixer ça lors de ma refactorisation.

    Merci.

  11. #11
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    En premier lieu, après un premier retour suite à la livraison du code, on m'a indiqué que certains fichiers ne pouvaient pas bien se télécharger, j'ai réalisé que c'était dû au fait que je testais qu'avec des fichiers sans espaces ou caractères spéciaux. Pour gérer ces cas, il faut s'assurer de bien préparer le nom du fichier qui sera passer dans le lien en l'encodant avec urlencode et htmlentities.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    echo '<a href="page.php?file=' . htmlentities(urlencode($nom_du_fichier)) . '">' . $nom_du_fichier  . '</a>';
    ?>
    Et s'assurer de bien décoder le tout.
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    if(isset($_GET['file'])){
            //Décoder la chaîne de caratère qui contient le nom du fichier qui a été passé en paramètre dans le lien de la page (page.php?file=nom+du+fichier.pdf)
    	$filename = html_entity_decode(urldecode($_GET['file']));
     
    	//Chercher la chaîne de caractère possédant le document encodé en Base64
    	$file_query = 'SELECT document_encode FROM document WHERE document_id=' . $_GET['file_id'];
    	$file_result = $db->query($file_query);
    	$file_result_row = mysqli_fetch_assoc($file_result);
    	//Extraction de l'extension du fichier
    	$file_extension = strtolower(substr(strrchr($filename, "."), 1));
            //Assignation de la chaine de caratère en Base64 représentant le fichier à une variable
            $document_encode = $file_result_row['document_encode'];
    	$content_type = '';
     
    	//Trouver le bon Content-Type selon l'extension
    	switch ($file_extension) {
    			    case "pdf":
    			        $content_type = "application/pdf";
    			        break;
    			    case "doc":
    			        $content_type = "application/msword";
    			        break;
    			    case "docx":
    			        $content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
    			        break;
    			    case "xls":
    			        $content_type = "application/vnd.ms-excel";
    			        break;
    			    case "xlsx":
    			        $content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    			        break;
    			    case "ppt":
    			        $content_type = "application/vnd.ms-powerpoint";
    			        break;
    			    case "pptx":
    			        $content_type = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
    			        break;
    			    case "odt":
    			        $content_type = "application/vnd.oasis.opendocument.text";
    			        break;
    			    case "csv":
    			        $content_type = "text/csv";
    			        break;
    			    case "txt":
    			        $content_type = "text/plain";
    			        break;
    			    case "png":
    			        $content_type = "image/png";
    			        break;
    			    case "jpg":
    			        $content_type = "image/jpeg";
    			        break;
    			    case "jpeg":
    			        $content_type = "image/jpeg";
    			        break;
    			}
     
    			header("'Content-Type:" . $content_type . "'");
    			header("Content-Disposition: attachment; filename=\"$filename\"");
    			print base64_decode($document_);
    		}
    En second lieu, certains fichiers, une fois téléchargé, envoi le message qu'ils ne peuvent pas s'ouvrir. Par exemple, dans le cas d'un PDF: PDF document is damaged. Dans le cas d'un fichier texte, le texte s'ouvre mais étrangement, le code html de la page d'où émane le téléchargement s'ajoute après le contenu original du document. J'ai demandé d'obtenir une copie "simulée" (avec du "dummy data") de leur base de données afin de tester avec une version rapprochée de ce qu'ils ont en production et en effet presque tous les fichiers téléchargés retournent une erreur lorsque j'essai de les ouvrir.

    HYPOTHÈSE 1: La chaîne de caractère en Base64 se trouvant dans la base de données est fautive.

    J'ai récupéré directement de la base de données quelques chaînes de caractère en Base64 de fichiers envoyant une erreur lors d'une tentative de les ouvrir une fois téléchargé afin d'aller les décoder sur ce site base64decode.org et ils me retournent tous le bon document une fois la chaîne de caractère décodée.

    HYPOTHÈSE 2: La chaîne de caractère en Base64 n'est pas bien récupérée de la base de données.

    J'ai fais un var_dump de la variable $document_encode pour ensuite aller le décoder sur le site mentionné plus haut et le chaîne se décode correctement.

    HYPOTHÈSE 3: L'entête (header) relié au type de fichier n'est pas bien généré.

    Un var_dump de la variable $content_type indique que le bon content-type est généré.

    J'ai trouvé quelques pistes de solutions comme ceci, par et ici... mais rien d'applicable directement à la situation.

    Je soupçonne que ça doit avoir un rapport avec le header qui n'est pas correctement paramétré pour gérer certains aspects des fichiers téléchargés. Je ne trouve pas de différences flagrantes entre les fichiers qui s'ouvrent après téléchargement et ceux qui ne s'ouvrent pas.

    Des suggestions?

    Je vais continuer mes investigations et revient avec la solution dès que je la trouve.

  12. #12
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Quels fichiers fonctionnent et lesquels ne fonctionnent pas ?

  13. #13
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    Certains fichiers pdf s'ouvrent et d'autres ne s'ouvrent pas, tous les fichiers texte s'ouvrent mais le code source de la page s'ajoute après le contenu original du document, les jpg, gif et png s'ouvrent, les doc s'ouvrent et les docx ne s'ouvrent pas, les xls s'ouvrent et les xlsx ne s'ouvrent pas, les ppt s'ouvrent mais les pptx ne s'ouvrent pas.

  14. #14
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Quand on utilise un header, il ne faut qu’aucun caractère ne soit envoyé avant. Il ne doit y avoir aucun espace ou le moindre saut de ligne avant le premier <?php.

    Les fichiers xlsx, docx et pptx sont des fichiers zippés. Je ne sais pas si on peut passer ce type de fichier en base64. En tous cas je sais, car je l’ai fait, qu’on peut transmettre un fichier xlsx via les header en php.

  15. #15
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Pour la recherche de l’extension tu devrais utiliser la fonction pathinfo.

    Edit. En relisant ton code ça va comme c’est fait et en plus je ne suis pas sûr que pathinfo irait puisque le nom du fichier est un paramètre.

  16. #16
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    J'ai un session_start(); et deux include() après le tag d'ouverture php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php //Il n'y a pas d'espace avant et après le php
    session_start();
    include('conf.php');
    include('local.php');

  17. #17
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Il ne doit pas y avoir d’espace avant <?php.
    Si tu pouvais poster un fichier des données en base64 ça pourrait aider.

  18. #18
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    J'ai modifié le snippet posté plus haut afin de refléter le fait qu'il ne possède pas d'espace avant ni aprés le <?php.

    Voici un exemple Document.txt de fichier txt qui se télécharge mais où le code source de la page html se fait ajouter après le contenu du document.
    Voici le code en Base64 qui le représente: VGhpcyBpcyBhIGRvY3VtZW50Lgo=

    Les documents pdf qui envoient des erreurs possèdent tous des informations sensibles qui fait que je ne peux pas les distribuer, je vais leur demander de me fournir des documents semblables avec des données tests et je reviendrai les poster afin que tu puisses les analyser.

    Les commentaires se trouvant sur la doc page de la fonction base64_decode possèdent d'intéressantes pistes, je vais expérimenter avec quelques unes d'entre elles.

    Merci.

  19. #19
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Qu’est-ce-qui s’ajoute ? Code source html ou php ? Dans les deux cas je ne comprends pas. Un exemple ?

  20. #20
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Antarctique

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut
    Il y a du dévelopement dans la situation, les pdfs qui, une fois téléchargés, retournaient le message: PDF document is damaged lorsqu'on essayait de les ouvrir, s'ouvrent correctement lorsqu'on les ouvre directement dans le navigateur. Je présume que l'endommagement du fichier se fait pendant l'envoi des headers qui ne sont peut-être pas suffisament paramétrés...? La réponse à ce poste indique plusieurs paramétrages de possible pour le header...

    Est-ce qu'il y aurait un paramètre du header qui pourrait influencer l'intégrité du fichier téléchargé?

    Voici l'exemple du document texte où le code html de la page s'intègre à la suite du contenu original du document téféchargé: Pièce jointe 439222.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Upload de fichier dans une base de données MySQL
    Par miko2009 dans le forum W4 Express
    Réponses: 1
    Dernier message: 07/01/2009, 19h16
  2. Réponses: 2
    Dernier message: 21/07/2008, 15h00
  3. Réponses: 1
    Dernier message: 30/12/2007, 14h51
  4. importer une fichier excel dans une base de donnée MySQL
    Par maverick56 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 29/05/2007, 09h15
  5. Intégration des fichier XML dans une base de données MySQL
    Par bebemoundjou dans le forum XQUERY/SGBD
    Réponses: 8
    Dernier message: 25/11/2005, 22h41

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