From: =?UTF-8?B?RHXFoWFuIE5vdmFrb3ZpxIc=?= on
I don't think that it will help :-( I've tried to set different
headers but still I end up with some strange response, like:

%PDF-1.3
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Contents 4 0 R>>
endobj
4 0 obj
<</Filter /FlateDecode /Length 1214>>
stream
.....

So, if we try to look into this problem as basic. For example, I'm
trying to store file test.pdf from some location on server into my db
like this:

$fp = fopen(PATH_TO_PDF_FILE.'test.pdf', "r");
$size = filesize(PATH_TO_PDF_FILE.'test.pdf');
$type = mime_content_type(PATH_TO_PDF_FILE.'test.pdf');

$file = fread($fp, $size);

Here if I do : var_dump($file) how the content should look like?

$file = base64_encode($file);
close($fp);

$query = sprintf("INSERT INTO `table` SET `file`='%s', `name`='%s',
`size`='%s', `type`='%s'",
mysql_real_escape_string($file),
mysql_real_escape_string('test.pdf'),
mysql_real_escape_string($size),
mysql_real_escape_string($type)
);
mysql_query($query);



And lets try to retrive data now and show them on page:

$query = sprintf("SELECT * FROM `table` WHERE `id`='something'");
$res= mysql_query($query);
$row = mysql_fetch_assoc($res);

header("{$_SERVER['SERVER_PROTOCOL']} 200 OK", True, 200);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Length: ' . $row['size']);
header('Content-Type: ' . $row['type']);
header('Expires: 0');
header('Pragma: public');

header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename=" . $row['name']);
header('Content-Transfer-Encoding: binary');

readfile(base64_decode($row['file']));


And here I should get PDF file, but instead I get the same symbols on
the top of page :-(

Any suggestion? Some different header or ... ?


2010/7/27 Richard Quadling <rquadling(a)gmail.com>:
> 2010/7/27 Dušan Novaković <ndusan(a)gmail.com>:
>> hello,
>>
>> I have some problems with storing files in db and retriving them, so
>> probably I'm doing something wrong :-)
>> Here is the case:
>> I have on one of the pages request to generate some PDF files and
>> store them in database. So, I use FPDF to create files, and that's
>> working perfect. Then my system is collecting generated file(s) and
>> storing them in DB. On the other side (page)  I have to show stored
>> files from database.
>>
>> So, when file (in this case PDF) is created and stored in some dir
>> (ex. tmp/file.pdf), by using function: fopen(filename, 'r'); $file =
>> fread(....); I put file(s) in array $tmpArray = array('file' =>
>> base64_encode($file).... ) and send it to model (db). There I have
>> table for files, (column type for file is BLOB). So, first I do the
>> $fileThatWillBeStored = base64_decode($file); and than store it. After
>> that I'm able to see that in DB there is one row with file, so that
>> part is also ok.
>> On the other side when I have to show that file, I just fetch it from
>> DB and again pack it in array, but first do the
>> base64_encode($fileFromDB) and send it to controller, where after
>> doing $file = base64_decode($fileFromDB); I just show it like this:
>> header("Content-length: ".$file['file_size']);
>> header("Content-type: ".$file['file_type']);
>> header("Content-Disposition: attachment; filename= ".$file['file_name']);
>> echo $file['file'];
>>
>> And final result is something like:
>>
>> %PDF-1.3
>> 3 0 obj
>> <</Type /Page
>> /Parent 1 0 R
>> /Resources 2 0 R
>> /Contents 4 0 R>>
>> endobj
>> 4 0 obj
>> <</Filter /FlateDecode /Length 1214>>
>> stream
>> x��W�v�F �� �L ��[�� N ��`'
>> �,{�� $�H�g� �/x�R?$� �Y� ��n=�U0t9"X ��h �O�)�  ��5���  � � �Q:��2B!U��( I)0
>>
>> .....
>>
>>
>> So, I hope you get the picture :-) Of course, I've skiped lot of
>> steps, because the code is huge.
>>
>> Any suggestions? additional questions?
>>
>> P.S.
>> I can't read on the other side file from directory, so it has to be in
>> the way I just described ( Generate PDF with FPDF => pack in array,
>> but first base64_encode => send it to model => get from array and
>> unpack it with base64_decode on DB side => store in DB, and then
>> reverse: get from DB => pack in array, but first base64_encode => send
>> it to controller => get it from array and unpack with base 64_decode
>> => show in view with headers)
>>
>> Thnx,
>> Dusan
>>
>>
>> --
>> mob: + 46 70 044 9432
>> web: http://novakovicdusan.com
>>
>> Please consider the environment before printing this email.
>>
>> --
>> PHP General Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
>>
>
> As soon as you've got the data, create a hash of the file (sha1(),
> md5(), etc.) and store that in the database.
>
> When you restore the file, generate a new hash and compare it with the
> stored one to make sure you've got the right data.
>
> Assuming that the hashes match, then the next thing is to use a tool
> like FireBug to see EXACTLY what is being received by the client. This
> seems to be different to what you are sending.
>
> The headers I use for a PDF file download (as compared to a PDF online
> view) are ...
>
>        header("{$_SERVER['SERVER_PROTOCOL']} 200 OK", True, 200);
>        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
>        header('Content-Length: ' . filesize($a_FPN['PDF']));
>        header('Content-Type: application/pdf');
>        header('Expires: 0');
>        header('Pragma: public');
>
>        // Force a Save Dialogue if that is required.
>        if ('True' === $b_Save)
>                {
>                header('Content-Description: File Transfer');
>                header('Content-Disposition: attachment; filename="Jobsheet ' .
> $s_OrderNumber . '.pdf"');
>                header('Content-Transfer-Encoding: binary');
>                }
>
>        readfile($a_FPN['PDF']);
>



--
mob: + 46 70 044 9432
web: http://novakovicdusan.com

Please consider the environment before printing this email.
From: Richard Quadling on
2010/7/27 Dušan Novaković <ndusan(a)gmail.com>:
> I don't think that it will help :-( I've tried to set different
> headers but still I end up with some strange response, like:
>
> %PDF-1.3
> 3 0 obj
> <</Type /Page
> /Parent 1 0 R
> /Resources 2 0 R
> /Contents 4 0 R>>
> endobj
> 4 0 obj
> <</Filter /FlateDecode /Length 1214>>
> stream
> ....
>
> So, if we try to look into this problem as basic. For example, I'm
> trying to store file test.pdf from some location on server into my db
> like this:
>
> $fp = fopen(PATH_TO_PDF_FILE.'test.pdf', "r");
> $size = filesize(PATH_TO_PDF_FILE.'test.pdf');
> $type = mime_content_type(PATH_TO_PDF_FILE.'test.pdf');
>
> $file = fread($fp, $size);
>
> Here if I do : var_dump($file) how the content should look like?
>
> $file = base64_encode($file);
> close($fp);
>
> $query = sprintf("INSERT INTO `table` SET `file`='%s', `name`='%s',
> `size`='%s', `type`='%s'",
>                        mysql_real_escape_string($file),
>                        mysql_real_escape_string('test.pdf'),
>                        mysql_real_escape_string($size),
>                        mysql_real_escape_string($type)
> );
> mysql_query($query);
>
>
>
> And lets try to retrive data now and show them on page:
>
> $query  = sprintf("SELECT * FROM `table` WHERE `id`='something'");
> $res= mysql_query($query);
> $row = mysql_fetch_assoc($res);
>
>  header("{$_SERVER['SERVER_PROTOCOL']} 200 OK", True, 200);
>  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
>  header('Content-Length: ' . $row['size']);
>  header('Content-Type: ' . $row['type']);
>  header('Expires: 0');
>  header('Pragma: public');
>
> header('Content-Description: File Transfer');
> header('Content-Disposition: attachment; filename=" . $row['name']);
> header('Content-Transfer-Encoding: binary');
>
>  readfile(base64_decode($row['file']));
>
>
> And here I should get PDF file, but instead I get the same symbols on
> the top of page :-(
>
> Any suggestion? Some different header or ... ?
>
>
> 2010/7/27 Richard Quadling <rquadling(a)gmail.com>:
>> 2010/7/27 Dušan Novaković <ndusan(a)gmail.com>:
>>> hello,
>>>
>>> I have some problems with storing files in db and retriving them, so
>>> probably I'm doing something wrong :-)
>>> Here is the case:
>>> I have on one of the pages request to generate some PDF files and
>>> store them in database. So, I use FPDF to create files, and that's
>>> working perfect. Then my system is collecting generated file(s) and
>>> storing them in DB. On the other side (page)  I have to show stored
>>> files from database.
>>>
>>> So, when file (in this case PDF) is created and stored in some dir
>>> (ex. tmp/file.pdf), by using function: fopen(filename, 'r'); $file =
>>> fread(....); I put file(s) in array $tmpArray = array('file' =>
>>> base64_encode($file).... ) and send it to model (db). There I have
>>> table for files, (column type for file is BLOB). So, first I do the
>>> $fileThatWillBeStored = base64_decode($file); and than store it. After
>>> that I'm able to see that in DB there is one row with file, so that
>>> part is also ok.
>>> On the other side when I have to show that file, I just fetch it from
>>> DB and again pack it in array, but first do the
>>> base64_encode($fileFromDB) and send it to controller, where after
>>> doing $file = base64_decode($fileFromDB); I just show it like this:
>>> header("Content-length: ".$file['file_size']);
>>> header("Content-type: ".$file['file_type']);
>>> header("Content-Disposition: attachment; filename= ".$file['file_name']);
>>> echo $file['file'];
>>>
>>> And final result is something like:
>>>
>>> %PDF-1.3
>>> 3 0 obj
>>> <</Type /Page
>>> /Parent 1 0 R
>>> /Resources 2 0 R
>>> /Contents 4 0 R>>
>>> endobj
>>> 4 0 obj
>>> <</Filter /FlateDecode /Length 1214>>
>>> stream
>>> x��W�v�F �� �L ��[�� N ��`'
>>> �,{�� $�H�g� �/x�R?$� �Y� ��n=�U0t9"X ��h �O�)�  ��5���  � � �Q:��2B!U��( I)0
>>>
>>> .....
>>>
>>>
>>> So, I hope you get the picture :-) Of course, I've skiped lot of
>>> steps, because the code is huge.
>>>
>>> Any suggestions? additional questions?
>>>
>>> P.S.
>>> I can't read on the other side file from directory, so it has to be in
>>> the way I just described ( Generate PDF with FPDF => pack in array,
>>> but first base64_encode => send it to model => get from array and
>>> unpack it with base64_decode on DB side => store in DB, and then
>>> reverse: get from DB => pack in array, but first base64_encode => send
>>> it to controller => get it from array and unpack with base 64_decode
>>> => show in view with headers)
>>>
>>> Thnx,
>>> Dusan
>>>
>>>
>>> --
>>> mob: + 46 70 044 9432
>>> web: http://novakovicdusan.com
>>>
>>> Please consider the environment before printing this email.
>>>
>>> --
>>> PHP General Mailing List (http://www.php.net/)
>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>
>>>
>>
>> As soon as you've got the data, create a hash of the file (sha1(),
>> md5(), etc.) and store that in the database.
>>
>> When you restore the file, generate a new hash and compare it with the
>> stored one to make sure you've got the right data.
>>
>> Assuming that the hashes match, then the next thing is to use a tool
>> like FireBug to see EXACTLY what is being received by the client. This
>> seems to be different to what you are sending.
>>
>> The headers I use for a PDF file download (as compared to a PDF online
>> view) are ...
>>
>>        header("{$_SERVER['SERVER_PROTOCOL']} 200 OK", True, 200);
>>        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
>>        header('Content-Length: ' . filesize($a_FPN['PDF']));
>>        header('Content-Type: application/pdf');
>>        header('Expires: 0');
>>        header('Pragma: public');
>>
>>        // Force a Save Dialogue if that is required.
>>        if ('True' === $b_Save)
>>                {
>>                header('Content-Description: File Transfer');
>>                header('Content-Disposition: attachment; filename="Jobsheet ' .
>> $s_OrderNumber . '.pdf"');
>>                header('Content-Transfer-Encoding: binary');
>>                }
>>
>>        readfile($a_FPN['PDF']);
>>
>
>
>
> --
> mob: + 46 70 044 9432
> web: http://novakovicdusan.com
>
> Please consider the environment before printing this email.
>

Like I said ... if you don't think there is a problem with what you
are SENDING, take a look at the browser and see what it is
RECEIVING...

For that, any of the good browsers will allow you to see the headers
of a request. What headers are you RECEIVING.

Chrome and FireFox/FireBug would be the tools I'd be looking at next.

If not, then WireShark - but that would be overkill.

Anything in the middle (caching, proxy server, firewalls, A/V s/w)
COULD be changing the header. Probably not, but at least this way you
could report back EXACTLY what the client is receiving.
From: Nilesh Govindarajan on
Dude! I found the bug probably, you're using fopen() in 'r' mode which
is meant to read ASCII text. Since PDF is a binary file (probably?),
you should use binary mode. Try with mode = 'rb' in fopen().

--
Regards,
Nilesh Govindarajan
Facebook: http://www.facebook.com/nilesh.gr
Twitter: http://twitter.com/nileshgr
Website: http://www.itech7.com
VPS Hosting: http://www.itech7.com/a/vps
From: =?UTF-8?B?RHXFoWFuIE5vdmFrb3ZpxIc=?= on
Hi,

Here are headers:

Response Headers
----------------------------------------------------------------------------------------------------

Date Wed, 28 Jul 2010 06:41:33 GMT
Server Apache/2.2.14 (Ubuntu)
X-Powered-By PHP/5.3.2-1ubuntu4.1
Expires 0
Cache-Control must-revalidate, post-check=0, pre-check=0
Pragma no-cache
Content-Length 1849
Accept-Ranges bytes
Content-Disposition attachment; filename='10_file.pdf'
Content-Transfer-Encoding binary
Content-Encoding gzip
Vary Accept-Encoding
Content-Type application/pdf
X-Cache ....
X-Cache-Lookup ....
Via ....
Connection keep-alive
Proxy-Connection keep-alive


Request Headers
----------------------------------------------------------------------------------------------------

Host .......
User-Agent Mozilla/5.0 (X11; U; Linux i686; sv-SE;
rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3
Accept text/html, */*
Accept-Language sv-se,sv;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Proxy-Connection keep-alive
Content-Type application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With XMLHttpRequest
Referer http://........../user/queue/
Content-Length 5
Cookie PHPSESSID=67bf56153fb3b9c69ed214114c8154dd




Dusan


2010/7/27 Richard Quadling <rquadling(a)gmail.com>:
> 2010/7/27 Dušan Novaković <ndusan(a)gmail.com>:
>> I don't think that it will help :-( I've tried to set different
>> headers but still I end up with some strange response, like:
>>
>> %PDF-1.3
>> 3 0 obj
>> <</Type /Page
>> /Parent 1 0 R
>> /Resources 2 0 R
>> /Contents 4 0 R>>
>> endobj
>> 4 0 obj
>> <</Filter /FlateDecode /Length 1214>>
>> stream
>> ....
>>
>> So, if we try to look into this problem as basic. For example, I'm
>> trying to store file test.pdf from some location on server into my db
>> like this:
>>
>> $fp = fopen(PATH_TO_PDF_FILE.'test.pdf', "r");
>> $size = filesize(PATH_TO_PDF_FILE.'test.pdf');
>> $type = mime_content_type(PATH_TO_PDF_FILE.'test.pdf');
>>
>> $file = fread($fp, $size);
>>
>> Here if I do : var_dump($file) how the content should look like?
>>
>> $file = base64_encode($file);
>> close($fp);
>>
>> $query = sprintf("INSERT INTO `table` SET `file`='%s', `name`='%s',
>> `size`='%s', `type`='%s'",
>>                        mysql_real_escape_string($file),
>>                        mysql_real_escape_string('test.pdf'),
>>                        mysql_real_escape_string($size),
>>                        mysql_real_escape_string($type)
>> );
>> mysql_query($query);
>>
>>
>>
>> And lets try to retrive data now and show them on page:
>>
>> $query  = sprintf("SELECT * FROM `table` WHERE `id`='something'");
>> $res= mysql_query($query);
>> $row = mysql_fetch_assoc($res);
>>
>>  header("{$_SERVER['SERVER_PROTOCOL']} 200 OK", True, 200);
>>  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
>>  header('Content-Length: ' . $row['size']);
>>  header('Content-Type: ' . $row['type']);
>>  header('Expires: 0');
>>  header('Pragma: public');
>>
>> header('Content-Description: File Transfer');
>> header('Content-Disposition: attachment; filename=" . $row['name']);
>> header('Content-Transfer-Encoding: binary');
>>
>>  readfile(base64_decode($row['file']));
>>
>>
>> And here I should get PDF file, but instead I get the same symbols on
>> the top of page :-(
>>
>> Any suggestion? Some different header or ... ?
>>
>>
>> 2010/7/27 Richard Quadling <rquadling(a)gmail.com>:
>>> 2010/7/27 Dušan Novaković <ndusan(a)gmail.com>:
>>>> hello,
>>>>
>>>> I have some problems with storing files in db and retriving them, so
>>>> probably I'm doing something wrong :-)
>>>> Here is the case:
>>>> I have on one of the pages request to generate some PDF files and
>>>> store them in database. So, I use FPDF to create files, and that's
>>>> working perfect. Then my system is collecting generated file(s) and
>>>> storing them in DB. On the other side (page)  I have to show stored
>>>> files from database.
>>>>
>>>> So, when file (in this case PDF) is created and stored in some dir
>>>> (ex. tmp/file.pdf), by using function: fopen(filename, 'r'); $file =
>>>> fread(....); I put file(s) in array $tmpArray = array('file' =>
>>>> base64_encode($file).... ) and send it to model (db). There I have
>>>> table for files, (column type for file is BLOB). So, first I do the
>>>> $fileThatWillBeStored = base64_decode($file); and than store it. After
>>>> that I'm able to see that in DB there is one row with file, so that
>>>> part is also ok.
>>>> On the other side when I have to show that file, I just fetch it from
>>>> DB and again pack it in array, but first do the
>>>> base64_encode($fileFromDB) and send it to controller, where after
>>>> doing $file = base64_decode($fileFromDB); I just show it like this:
>>>> header("Content-length: ".$file['file_size']);
>>>> header("Content-type: ".$file['file_type']);
>>>> header("Content-Disposition: attachment; filename= ".$file['file_name']);
>>>> echo $file['file'];
>>>>
>>>> And final result is something like:
>>>>
>>>> %PDF-1.3
>>>> 3 0 obj
>>>> <</Type /Page
>>>> /Parent 1 0 R
>>>> /Resources 2 0 R
>>>> /Contents 4 0 R>>
>>>> endobj
>>>> 4 0 obj
>>>> <</Filter /FlateDecode /Length 1214>>
>>>> stream
>>>> x��W�v�F �� �L ��[�� N ��`'
>>>> �,{�� $�H�g� �/x�R?$� �Y� ��n=�U0t9"X ��h �O�)�  ��5���  � � �Q:��2B!U��( I)0
>>>>
>>>> .....
>>>>
>>>>
>>>> So, I hope you get the picture :-) Of course, I've skiped lot of
>>>> steps, because the code is huge.
>>>>
>>>> Any suggestions? additional questions?
>>>>
>>>> P.S.
>>>> I can't read on the other side file from directory, so it has to be in
>>>> the way I just described ( Generate PDF with FPDF => pack in array,
>>>> but first base64_encode => send it to model => get from array and
>>>> unpack it with base64_decode on DB side => store in DB, and then
>>>> reverse: get from DB => pack in array, but first base64_encode => send
>>>> it to controller => get it from array and unpack with base 64_decode
>>>> => show in view with headers)
>>>>
>>>> Thnx,
>>>> Dusan
>>>>
>>>>
>>>> --
>>>> mob: + 46 70 044 9432
>>>> web: http://novakovicdusan.com
>>>>
>>>> Please consider the environment before printing this email.
>>>>
>>>> --
>>>> PHP General Mailing List (http://www.php.net/)
>>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>>
>>>>
>>>
>>> As soon as you've got the data, create a hash of the file (sha1(),
>>> md5(), etc.) and store that in the database.
>>>
>>> When you restore the file, generate a new hash and compare it with the
>>> stored one to make sure you've got the right data.
>>>
>>> Assuming that the hashes match, then the next thing is to use a tool
>>> like FireBug to see EXACTLY what is being received by the client. This
>>> seems to be different to what you are sending.
>>>
>>> The headers I use for a PDF file download (as compared to a PDF online
>>> view) are ...
>>>
>>>        header("{$_SERVER['SERVER_PROTOCOL']} 200 OK", True, 200);
>>>        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
>>>        header('Content-Length: ' . filesize($a_FPN['PDF']));
>>>        header('Content-Type: application/pdf');
>>>        header('Expires: 0');
>>>        header('Pragma: public');
>>>
>>>        // Force a Save Dialogue if that is required..
>>>        if ('True' === $b_Save)
>>>                {
>>>                header('Content-Description: File Transfer');
>>>                header('Content-Disposition: attachment; filename="Jobsheet ' .
>>> $s_OrderNumber . '.pdf"');
>>>                header('Content-Transfer-Encoding: binary');
>>>                }
>>>
>>>        readfile($a_FPN['PDF']);
>>>
>>
>>
>>
>> --
>> mob: + 46 70 044 9432
>> web: http://novakovicdusan.com
>>
>> Please consider the environment before printing this email.
>>
>
> Like I said ... if you don't think there is a problem with what you
> are SENDING, take a look at the browser and see what it is
> RECEIVING...
>
> For that, any of the good browsers will allow you to see the headers
> of a request. What headers are you RECEIVING.
>
> Chrome and FireFox/FireBug would be the tools I'd be looking at next.
>
> If not, then WireShark - but that would be overkill.
>
> Anything in the middle (caching, proxy server, firewalls, A/V s/w)
> COULD be changing the header. Probably not, but at least this way you
> could report back EXACTLY what the client is receiving.
>



--
mob: + 46 70 044 9432
web: http://novakovicdusan.com

Please consider the environment before printing this email.
From: =?UTF-8?B?RHXFoWFuIE5vdmFrb3ZpxIc=?= on
Ok,

I found the problem :-) There was nothing wrong with storing or
sending files, it's just that I tried to load file with jQuery on
wrong way :-(

Sorry once more to everyone :-(

Dusan

2010/7/28 Dušan Novaković <ndusan(a)gmail.com>:
> Hi,
>
> Here are headers:
>
> Response Headers
> ----------------------------------------------------------------------------------------------------
>
> Date                                Wed, 28 Jul 2010 06:41:33 GMT
> Server                      Apache/2.2.14 (Ubuntu)
> X-Powered-By                PHP/5..3.2-1ubuntu4.1
> Expires                     0
> Cache-Control               must-revalidate, post-check=0, pre-check=0
> Pragma                      no-cache
> Content-Length              1849
> Accept-Ranges               bytes
> Content-Disposition         attachment; filename='10_file.pdf'
> Content-Transfer-Encoding       binary
> Content-Encoding            gzip
> Vary                                Accept-Encoding
> Content-Type               application/pdf
> X-Cache                    ....
> X-Cache-Lookup             ....
> Via                                ....
> Connection                 keep-alive
> Proxy-Connection           keep-alive
>
>
> Request Headers
> ----------------------------------------------------------------------------------------------------
>
> Host                               .......
> User-Agent                 Mozilla/5.0 (X11; U; Linux i686; sv-SE;
> rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3
> Accept                     text/html, */*
> Accept-Language    sv-se,sv;q=0.8,en-us;q=0.5,en;q=0.3
> Accept-Encoding    gzip,deflate
> Accept-Charset             ISO-8859-1,utf-8;q=0.7,*;q=0.7
> Keep-Alive                         115
> Proxy-Connection           keep-alive
> Content-Type               application/x-www-form-urlencoded; charset=UTF-8
> X-Requested-With           XMLHttpRequest
> Referer                    http://........../user/queue/
> Content-Length             5
> Cookie                     PHPSESSID=67bf56153fb3b9c69ed214114c8154dd
>
>
>
>
> Dusan
>
>
> 2010/7/27 Richard Quadling <rquadling(a)gmail.com>:
>> 2010/7/27 Dušan Novaković <ndusan(a)gmail.com>:
>>> I don't think that it will help :-( I've tried to set different
>>> headers but still I end up with some strange response, like:
>>>
>>> %PDF-1.3
>>> 3 0 obj
>>> <</Type /Page
>>> /Parent 1 0 R
>>> /Resources 2 0 R
>>> /Contents 4 0 R>>
>>> endobj
>>> 4 0 obj
>>> <</Filter /FlateDecode /Length 1214>>
>>> stream
>>> ....
>>>
>>> So, if we try to look into this problem as basic. For example, I'm
>>> trying to store file test.pdf from some location on server into my db
>>> like this:
>>>
>>> $fp = fopen(PATH_TO_PDF_FILE.'test.pdf', "r");
>>> $size = filesize(PATH_TO_PDF_FILE.'test.pdf');
>>> $type = mime_content_type(PATH_TO_PDF_FILE.'test.pdf');
>>>
>>> $file = fread($fp, $size);
>>>
>>> Here if I do : var_dump($file) how the content should look like?
>>>
>>> $file = base64_encode($file);
>>> close($fp);
>>>
>>> $query = sprintf("INSERT INTO `table` SET `file`='%s', `name`='%s',
>>> `size`='%s', `type`='%s'",
>>>                        mysql_real_escape_string($file),
>>>                        mysql_real_escape_string('test.pdf'),
>>>                        mysql_real_escape_string($size),
>>>                        mysql_real_escape_string($type)
>>> );
>>> mysql_query($query);
>>>
>>>
>>>
>>> And lets try to retrive data now and show them on page:
>>>
>>> $query  = sprintf("SELECT * FROM `table` WHERE `id`='something'");
>>> $res= mysql_query($query);
>>> $row = mysql_fetch_assoc($res);
>>>
>>>  header("{$_SERVER['SERVER_PROTOCOL']} 200 OK", True, 200);
>>>  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
>>>  header('Content-Length: ' . $row['size']);
>>>  header('Content-Type: ' . $row['type']);
>>>  header('Expires: 0');
>>>  header('Pragma: public');
>>>
>>> header('Content-Description: File Transfer');
>>> header('Content-Disposition: attachment; filename=" . $row['name']);
>>> header('Content-Transfer-Encoding: binary');
>>>
>>>  readfile(base64_decode($row['file']));
>>>
>>>
>>> And here I should get PDF file, but instead I get the same symbols on
>>> the top of page :-(
>>>
>>> Any suggestion? Some different header or ... ?
>>>
>>>
>>> 2010/7/27 Richard Quadling <rquadling(a)gmail.com>:
>>>> 2010/7/27 Dušan Novaković <ndusan(a)gmail.com>:
>>>>> hello,
>>>>>
>>>>> I have some problems with storing files in db and retriving them, so
>>>>> probably I'm doing something wrong :-)
>>>>> Here is the case:
>>>>> I have on one of the pages request to generate some PDF files and
>>>>> store them in database. So, I use FPDF to create files, and that's
>>>>> working perfect. Then my system is collecting generated file(s) and
>>>>> storing them in DB. On the other side (page)  I have to show stored
>>>>> files from database.
>>>>>
>>>>> So, when file (in this case PDF) is created and stored in some dir
>>>>> (ex. tmp/file.pdf), by using function: fopen(filename, 'r'); $file =
>>>>> fread(....); I put file(s) in array $tmpArray = array('file' =>
>>>>> base64_encode($file).... ) and send it to model (db). There I have
>>>>> table for files, (column type for file is BLOB). So, first I do the
>>>>> $fileThatWillBeStored = base64_decode($file); and than store it. After
>>>>> that I'm able to see that in DB there is one row with file, so that
>>>>> part is also ok.
>>>>> On the other side when I have to show that file, I just fetch it from
>>>>> DB and again pack it in array, but first do the
>>>>> base64_encode($fileFromDB) and send it to controller, where after
>>>>> doing $file = base64_decode($fileFromDB); I just show it like this:
>>>>> header("Content-length: ".$file['file_size']);
>>>>> header("Content-type: ".$file['file_type']);
>>>>> header("Content-Disposition: attachment; filename= ".$file['file_name']);
>>>>> echo $file['file'];
>>>>>
>>>>> And final result is something like:
>>>>>
>>>>> %PDF-1.3
>>>>> 3 0 obj
>>>>> <</Type /Page
>>>>> /Parent 1 0 R
>>>>> /Resources 2 0 R
>>>>> /Contents 4 0 R>>
>>>>> endobj
>>>>> 4 0 obj
>>>>> <</Filter /FlateDecode /Length 1214>>
>>>>> stream
>>>>> x��W�v�F �� �L ��[�� N ��`'
>>>>> �,{�� $�H�g� �/x�R?$� �Y� ��n=�U0t9"X ��h �O�)�  ��5���  � � �Q:��2B!U��( I)0
>>>>>
>>>>> .....
>>>>>
>>>>>
>>>>> So, I hope you get the picture :-) Of course, I've skiped lot of
>>>>> steps, because the code is huge.
>>>>>
>>>>> Any suggestions? additional questions?
>>>>>
>>>>> P.S.
>>>>> I can't read on the other side file from directory, so it has to be in
>>>>> the way I just described ( Generate PDF with FPDF => pack in array,
>>>>> but first base64_encode => send it to model => get from array and
>>>>> unpack it with base64_decode on DB side => store in DB, and then
>>>>> reverse: get from DB => pack in array, but first base64_encode => send
>>>>> it to controller => get it from array and unpack with base 64_decode
>>>>> => show in view with headers)
>>>>>
>>>>> Thnx,
>>>>> Dusan
>>>>>
>>>>>
>>>>> --
>>>>> mob: + 46 70 044 9432
>>>>> web: http://novakovicdusan.com
>>>>>
>>>>> Please consider the environment before printing this email.
>>>>>
>>>>> --
>>>>> PHP General Mailing List (http://www.php.net/)
>>>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>>>
>>>>>
>>>>
>>>> As soon as you've got the data, create a hash of the file (sha1(),
>>>> md5(), etc.) and store that in the database.
>>>>
>>>> When you restore the file, generate a new hash and compare it with the
>>>> stored one to make sure you've got the right data.
>>>>
>>>> Assuming that the hashes match, then the next thing is to use a tool
>>>> like FireBug to see EXACTLY what is being received by the client. This
>>>> seems to be different to what you are sending.
>>>>
>>>> The headers I use for a PDF file download (as compared to a PDF online
>>>> view) are ...
>>>>
>>>>        header("{$_SERVER['SERVER_PROTOCOL']} 200 OK", True, 200);
>>>>        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
>>>>        header('Content-Length: ' . filesize($a_FPN['PDF']));
>>>>        header('Content-Type: application/pdf');
>>>>        header('Expires: 0');
>>>>        header('Pragma: public');
>>>>
>>>>        // Force a Save Dialogue if that is required.
>>>>        if ('True' === $b_Save)
>>>>                {
>>>>                header('Content-Description: File Transfer');
>>>>                header('Content-Disposition: attachment; filename="Jobsheet ' .
>>>> $s_OrderNumber . '.pdf"');
>>>>                header('Content-Transfer-Encoding: binary');
>>>>                }
>>>>
>>>>        readfile($a_FPN['PDF']);
>>>>
>>>
>>>
>>>
>>> --
>>> mob: + 46 70 044 9432
>>> web: http://novakovicdusan.com
>>>
>>> Please consider the environment before printing this email.
>>>
>>
>> Like I said ... if you don't think there is a problem with what you
>> are SENDING, take a look at the browser and see what it is
>> RECEIVING...
>>
>> For that, any of the good browsers will allow you to see the headers
>> of a request. What headers are you RECEIVING.
>>
>> Chrome and FireFox/FireBug would be the tools I'd be looking at next.
>>
>> If not, then WireShark - but that would be overkill.
>>
>> Anything in the middle (caching, proxy server, firewalls, A/V s/w)
>> COULD be changing the header. Probably not, but at least this way you
>> could report back EXACTLY what the client is receiving.
>>
>
>
>
> --
> mob: + 46 70 044 9432
> web: http://novakovicdusan.com
>
> Please consider the environment before printing this email.
>



--
mob: + 46 70 044 9432
web: http://novakovicdusan.com

Please consider the environment before printing this email.