LONGBLOB en fichier sans stockage intermédiaire

ViPHP
ViPHP | 2577 Messages

24 juin 2013, 14:29

J'ai trouvé une script : http://www.webdeveloper.com/forum/showt ... le-from-db
mssql_query("SET ANSI_NULLS ON; SET ANSI_WARNINGS ON;");  
$zapytanie = "SELECT TOP 1 Name, Img  
                    FROM Photos2 
                    "; 
    $wynik = mssql_query ($zapytanie) or die ("blad w zapytaniu mysq"); 

    $rekord = mssql_fetch_array($wynik); 

    $obrazek = $rekord[1]; 

    $obrazek = str_replace('\0', "\0", $obrazek); 
    $obrazek = str_replace('\'\'', "'", $obrazek); 

    echo $obrazek;  
A priori, il te manque 3 lignes :
mssql_query("SET ANSI_NULLS ON; SET ANSI_WARNINGS ON;");
et
$obrazek = str_replace('\0', "\0", $obrazek);
$obrazek = str_replace('\'\'', "'", $obrazek);

Eléphanteau du PHP | 17 Messages

24 juin 2013, 14:52

J'ai essayé ca ne fonctionne pas.

Mais je pense en effet qu'il y a un probleme de conversion.

Quand je regarde en base c'est du binaire, quand je fais un echo ce n'est plus du binaire...

il y a des fonctions pour convertir du binaire en hexa mais pas pour faire binaire -> binaire...

Eléphanteau du PHP | 17 Messages

24 juin 2013, 15:13

J'ai beau tout essayer le contenu de l'echo ne change pas, j'ai ajouté dans ma requete :

Code : Tout sélectionner

CAST(Contenu_Doc AS varbinary(max)) AS [Contenu_Doc]
J'ai essayé avec ca aussi :

Code : Tout sélectionner

CONVERT(varbinary(max), Contenu_Doc) AS [Contenu_Doc]
L'echo m'affiche toujours exactement la meme chose et toujours la même erreur si j'ouvre le fichier...

Eléphanteau du PHP | 17 Messages

24 juin 2013, 16:05

Les docx corrompus ("des problèmes ont été décélés dans son contenu") quand je les ouvre n'ont pas d'image, elles ont toutes une croix. Le texte par contre est présent.

Si j'avais un problème de format, le texte ne s'afficherait pas non plus non ?

ps: Je viens de voir qu'en base c'est de l'hexadécimal... oui je n'ai pas accès à la base.

Eléphanteau du PHP | 17 Messages

25 juin 2013, 11:00

Je ne sais plus quoi faire la...

Toutes les méthodes utilisées (principalement fopen/header) donnent le meme résultat et pourtant j'en ai tenté beaucoup, pour ainsi dire toutes celles du web...

Mes docx contiennent mon texte mais les images ne s'affichent pas (pas encore essayé pdf).
Les fichiers .log s'affichent sans aucun soucis eux.

J'ai varié entre les options obligatoires et facultatives, au final j'ai ca :

Code : Tout sélectionner

$contenu= $recupere_doc['Contenu_Doc']; $file = $recupere_doc['Nom_Doc']; ob_start(); header("Content-Type: $ctype" ); header("Content-Disposition: attachment; filename=$file"); header("Content-Transfer-Encoding: binary" ); header("Pragma: no-cache" ); header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" ); header("Expires: 0" ); echo $contenu; ob_flush(); flush(); ob_end_clean();
Je peux commenter/décommenter les paramètres facultatifs cela ne change rien.
Le contenu de mon champ contenu n'est pas en binaire et je pense que le problème vient de la...
Quel est le format de données qu'il faut pour que le header fonctionne ? du binaire ?
Surtout entre ce que je vois en base et ce qui apparait quand je fais un echo cela n'a rien à voir, et sans faire de transformation.

Eléphanteau du PHP | 17 Messages

25 juin 2013, 14:31

Je reçois un flux au format hexa:

Code : Tout sélectionner

0x504B0304140006....
Il y a une conversion à faire ?

ViPHP
ViPHP | 2577 Messages

25 juin 2013, 14:48


Eléphanteau du PHP | 17 Messages

25 juin 2013, 14:54

Ma version de php sur le serveur est 5.2.8... donc non compatible avec cette fonction.

ViPHP
ViPHP | 2577 Messages

25 juin 2013, 14:59

En désespoire de cause par 2 caractères :
chr(hexdec(substr($x,$i,2))))
mais ca va être long.

Eléphanteau du PHP | 17 Messages

25 juin 2013, 15:11

Tu veux dire faire un boucle qui récupère 1 à 1 les octets et converti en binaire ensuite ?

ViPHP
ViPHP | 2577 Messages

25 juin 2013, 15:23

Oui, en prenant les caractères 2 par 2, mais ca risque d'être très long.