Re: passthru() on Win98 ??

From: Date: Tue, 26 Feb 2002 15:15:33 +0000
Subject: Re: passthru() on Win98 ??
References: 1 2  Groups: php.windows 
Request: Send a blank email to php-windows+get-12300@lists.php.net to get a copy of this message
Yes, this has been documented extensively on the web. The fix is to put a pdf extension at the end of the url call to your script that is returning the pdf file. You can use an arbitrary filename ending in .pdf, or you can use the actual filename of the .pdf file, which would be preferable so that if the user tries to save the .pdf file, the default filename is correct. So what this means is that the script that is linking to your .pdf-returning script needs to know the filename/that it is a .pdf file, ahead of time. So you want to do something like this: <?php $query = 'SELECT strFileFilename FROM tblFiles '; $query .= "WHERE intFileID=$id"; $filename = mysql_result(mysql_query($query), 0); print "<a href=\"/stuff/getfile.php?id=$id/$filename\">Here's the PDF</a>\n"; ?> -Mike At 03:09 PM 2/26/2002 +0100, Sviss Cobazor wrote:
However, sigh, IE seems to have a bug so that Acrobat Reader is only loaded when the URL ends with ".pdf" aka IE doesn't give a rats about the header sent to it. Using Telnet I can see that the pdf page is returned correctly but when using IE I still get a blank page due to the fact that no (pre-generated) pdf document is sent to it and therefore the URL doesn't contain a "whatever.pdf" ind the end and therefore doesn't load Acrobat Reader. Look at this example: header("Content-Type: application/pdf"); flush(); passthru("C:\htmldoc -t pdf14 --quiet --jpeg size A4 --webpage \"http://localhost/whatever.html\""); This works fine with Telnet (where output is nonsense), but doesn't with IE (where the output would make sense). Does anyone have a solution to this? How to get IE to understand that the data sent to it is to be handled as a pdf document (as in load Acrobat Reader)? "Sviss Cobazor" <sviss@nospam.dk> wrote in message news:20020226102428.17377.qmail@pb1.pair.com... It seemed that it was Putty itself that wouldn't work for me (don't ask me why). So I used Telnet and it worked. After having my advicor (this is a education project) visiting me we found out why that passthru() function didn't work. It's very simple really, passthru() doesn't allow spaces in paths so "C:\program files\etc." becomes "C:\program" => false path. Removing the application (htmldoc.exe) to "C:\" instead did the job. For anyone else having same problems this is the correct way to type it (my example): <? function topdf($filename, $options = "") {
    header("Content-Type: application/pdf");
    flush();
    passthru("C:\htmldoc -t pdf14 --quiet --jpeg size A4 --webpage
$options \"$filename\""); } ?> This function now works and sends the result pdf directly to the browser. Thanks for your time Court, I wouldn't have thought of using Telnet myself :) ~ Sviss "Court Shrock" <ShrockC@inhs.org> wrote in message news:25E1EA6CA52DD311A525009027725B55041424E7@exchange1.inhs.org...
To explain the 400 bad request, you most likely had a typo when you
typed in
the HTTP request. The request is case-sensitive and very particular.
Most
likely, the "Host: localhost" portion of the request messed up somehow. When you get a "HTTP/1.1 200 OK" response, that means that the webserver accepted the request and will process your request. In order to test whether or not the passthru function is doing things properly, you are verifying what is being sent to the browser by simulating what the
browser
would send to your webserver and then what the browser is getting in response. It will all start to make sense when you start seeing your
files
output--of course, in the request that I had you type, I assumed the
file
that returns the pdf is named "index.php" or whatever file your
webserver
will retrieve when it gets a root "/" request. If this is not the case,
you
need to replace the "GET / HTTP/1.1" line with "GET /yourfile.php
HTTP/1.1"
or even "GET /yourfile.php?var1=whatever__yougettheidea HTTP/1.1". passthru is working properly if you see something like: HTTP/1.1 200 OK Date: Mon, 25 Feb 2002 23:20:35 GMT Server: Apache/1.3.20 (Unix) PHP/4.0.6 mod_ssl/2.8.4 OpenSSL/0.9.6 X-Powered-By: PHP/4.0.6 Transfer-Encoding: chunked Content-Type: application/pdf [lots of binary data] it isn't working if you see something like this: HTTP/1.1 200 OK Date: Mon, 25 Feb 2002 23:20:35 GMT Server: Apache/1.3.20 (Unix) PHP/4.0.6 mod_ssl/2.8.4 OpenSSL/0.9.6 X-Powered-By: PHP/4.0.6 Transfer-Encoding: chunked Content-Type: text/html <html>some stupid html, or nothing at all</html> in which case, I would try a different method to verify that data is properly passing between php and htmldoc.exe. I hope this has addressed some of the confusion. Court
-----Original Message----- From: Sviss Cobazor [mailto:sviss@nospam.dk] Sent: Monday, February 25, 2002 5:12 PM To: php-windows@lists.php.net Subject: Re: [PHP-WIN] passthru() on Win98 ?? I followed your instructions and got: HTTP/1.1 400 bad request
Date: Tue, 26 Feb 2002 01:05:57 GMT Server: Apache/1.3.20 (Win32) Connection: close Content-Type: text/html charset=iso-8859-1
... And then the same in html source ... (in the putty window) So I didn't get what was expected but either way I'm not sure what to do if I did.
-- PHP Windows Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
-- Mike Flynn - Burlington, VT -- mike @ mikeflynn.net http://www.mikeflynn.net/ home=>work=>home=>store=>home [adbusters]

« previous php.windows (#12300) next »