Re: PHP calling an ISAPI Extension
| From: | Tijnema | Date: | Fri, 22 Jun 2007 20:20:53 +0000 |
| Subject: | Re: PHP calling an ISAPI Extension | ||
| References: | 1 2 3 4 5 6 7 8 9 10 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-257679@lists.php.net to get a copy of this message | ||
On 6/22/07, FrozenDice <frozendice@gmail.com> wrote:
I came up with a what I presume to be quicker way of doing this by
knowing the format. Since the headers always have \r\n after each
line, then a blank line before the content I made this little bit of
code.
$explodedResult = explode("\r\n", $result);
for($i = 0; $i <= count($explodedResult); $i++)
{
if($explodedResult[$i] == "")
{
return $explodedResult[($i + 1)];
}
}
- Dan
Yes, it is faster, but sometimes, when loading big sites, not all data
is send at once, and then you need to get the content-length from the
header and read that many bytes. That's why i've written a little bit
longer code :)
Tijnema
On 6/22/07, FrozenDice <frozendice@gmail.com> wrote: I've read through that code a few times and I still don't understand at all what's going on. Could you explain it? - Dan On 6/22/07, Tijnema <tijnema@gmail.com> wrote:-- Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.infoOn 6/20/07, Tijnema <tijnema@gmail.com> wrote:On 6/19/07, Dan <frozendice@gmail.com> wrote:Like I said, there might be stupid bugs in, this code is better: $post_data = "name=wow&likes=true"; $fp = fsockopen("localhost",8080); fwrite($fp,"POST /Project1.dll HTTP/1.1\r\nHost:localhost\r\nContent-Length:".strlen($post_data)."\r\n\r\n".$post_data); $line = fgets($fp); $length = 0; while($line != "\r\n") { if(strtolower(substr($line,0,15)) == "content-length:") { $length = (int)substr($line,15); $line = fgets($fp); } } $result = fread($fp,$length); while(strlen($result) != $length) { $result .= fread($fp,$length-strlen($result)); } echo $result;Whoops, it turned out just to be a line wrapping problem, it was putting an extra space in. I have it working now, but after every request I get back the returning header in my result to it looks like this: HTTP/1.1 200 OK Content-Length: 184 Content-Type: text/html Server: Microsoft-IIS/7.0 Content: Date: Tue, 19 Jun 2007 17:20:04 GMT The resulting page I really wished to be returned. How do I get this not to set the return header in the $result? Or shoudl I just somehow get rid of the header after I get it? I don't know how long it is so I can't do a substring. Ideas?It has to do something with the way the things are send across the internet, in packages. The manual of fread says that it will read until EOF, the given length or the end of a package... try this code: $post_data = "name=wow&likes=true"; $fp = fsockopen("localhost",8080); fwrite($fp,"POST /Project1.dll HTTP/1.1\r\nHost:localhost\r\nContent-Length:".strlen($post_data)."\r\n\r\n".$post_data); $line = fgets($fp); $length = 0; while($line != "\r\n") { if(strtolower(substr($line,0,15)) == "content-length:") { $length = (int)substr($line,15); } } $result = fread($fp,$length); while(strlen($result) != $length) { $result .= fread($fp,$length-strlen($result)); } echo $result; Ok, above code is untested, and i just written it in gmail, so might be stupid syntax error in it or such. Tijnema-- Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.info""Dan"" <frozendice@gmail.com> wrote in message news:07.C6.47650.9DA08764@pb1.pair.com...I modified your code to work with what I'm doing and this is what I got: $post_data = "name=wow&likes=true"; $fp = fsockopen("localhost",8080); fwrite($fp,"POST /Project1.dll HTTP/1.1\r\nHost: localhost\r\nContent-Length: ".strlen($post_data)."\r\n\r\n".$post_data); $result = fread($fp,102400); // Reads 100KB, change if you need more echo $result; Now when I try that I get a "Bad Request invalid header name" error. I have an IIS server running localy on port 8080, the Project1.dll is in the root directory, it contains two input components 1 a textfield to type your name, the other a checkbox called likes. What's wrong? Here's it's code: <html> <head> <title>Learning ISAPI</title> </head> <h3>Learning ISAPI!</h3> <form name="isapiform" method="POST" action="/Project1.dll"> <strong>Please enter the following information</strong> <br>Name: <input type="text" name="name"> <br><input type="checkbox" name="likes" value="true" checked> I like ISAPI!<p> <input type="submit" value="View Output"> </form> </html> "Tijnema" <tijnema@gmail.com> wrote in message news:d8269d910706190041m6e5ee258wfb95336b9c362c60@mail.gmail.com...-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.phpOn 6/19/07, Jim Lucas <lists@cmsws.com> wrote:I wish I could, I can't count on the script being on a linux machine. I also can't expect people to rebuild PHP with the curl library just to use my script. Is there any other way to do a post to a page from a php function? - Daniel "Jim Lucas" <lists@cmsws.com> wrote in message news:46770D93.6010003@cmsws.com...Dan wrote:Dan wrote:I would normaly do it with an AJAX call but I need to do a post from WITHIN a PHP function, so when it's doing php stuff ex. function something() { echo 'whatever'; $response = post some data to a ISAPI Extension eg. post to http://domain.com/scripts/app.dll return $response . "other data"; } ""Jay Blanchard"" <jblanchard@pocket.com> wrote in message news:56608562F6D5D948B22F5615E3F57E690245F0AC@YGEX01WAL.onecall.local... [snip] I'm in need of a way to contact an ISAPI Extension from a PHP function. Does anyone know how I would be able to do this? Usually you would post a page to their URL/actionname. Can I do a POST from a PHP function without reloading the page, and get a result back? That's one tall order. Anyone want to give it a shot? [/snip] Do the POST with an AJAX callperform an ajax call the a php script that calls curl to do a post to the ISAPI extension -- Jim Lucas "Some men are born to greatness, some achieve greatness,and some have greatness thrust upon them."Twelfth Night, Act II, Scene Vby William ShakespeareThe only method that I am aware of is the fsockopen method you mention in your other email -- Jim LucasYes, and what's wrong with it? <?php $post_data = "form_a=1&form_b=4"; $fp = fsockopen("www.domain.com",80); fwrite($fp,"POST /scripts/app.dll HTTP/1.1\r\nHost: www.domain.com\r\nContent-Length: ".strlen($post_data)."\r\n\r\n".$post_data); $result = fread($fp,102400); // Reads 100KB, change if you need more ?> That's not too long is it? Tijnema