fsockopen() Cookie problem Maximum execution time of 30 seconds exceeded

This is a discussion on fsockopen() Cookie problem Maximum execution time of 30 seconds exceeded within the alt.comp.lang.php forums, part of the PHP Programming Forums category; Im having a wierd problem with one of my php scripts opening a socket connection with session variables. My page ...


Go Back   Usenet Forums > PHP Programming Forums > alt.comp.lang.php

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 03-20-2007
Thorak
 
Posts: n/a
Default fsockopen() Cookie problem Maximum execution time of 30 seconds exceeded

Im having a wierd problem with one of my php scripts opening a socket
connection with session variables. My page is continualy returning

Fatal error: Maximum execution time of 30 seconds exceeded in "bla bla
bla" line 43
line 43 is: $html .= fgets($fp, 4096);

The thing is this code below works for me if i remove the line:

$Headers .= "Cookie: ".$Cookie."\r\n";

problem is then i don't have my session data filling in the form
fields. As soon as I add this line so that the form fields can get the
information needed then i get this Maximum execution error.

I know im getting a result for: $Cookie = $_SERVER["HTTP_COOKIE"]
cause of the echo that is returned and does match the echo of the
session on all my other scripts.

I have tried using things like: stream_set_timeout($fp, 60); to
control this - but they dont seem to do anything. And changing the:
$fp = fsockopen($URL, 80, $errno, $errstr, 30); to $fp =
fsockopen($URL, 80, $errno, $errstr, 120);

/*
//==================================
//==============================
*/
session_start();

$URL = "vinyl-design"; // localhost network connection
$Cookie = $_SERVER["HTTP_COOKIE"]; // gives
"PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1"

$Page = 'interface2/order_details.php';

$fp = fsockopen($URL, 80, $errno, $errstr, 30);

// check if the website is found
if(!$fp) {
echo 'Failed opening socket connection!<br>'.$errstr.'('.
$errno.')';
}

else {
// write to the http server
$Headers = "GET /".$Page." HTTP/1.1\r\n";
$Headers .= "Host: ".$URL."\r\n";
$Headers .= "Content-Type: text/html\r\n";
$Headers .= "Cookie: ".$Cookie."\r\n";
$Headers .= "Connection: Close\r\n\r\n";
fwrite($fp, $Headers);

// read the website
while(!feof($fp)) {
stream_set_timeout($fp, 60);

// store the html into a variable
$html .= fgets($fp, 4096);

$info = stream_get_meta_data($fp); // get any error
information
while reading the data

if ($info['timed_out']) {
echo 'Connection timed out while trying to
read data!';
}
}
fclose($fp);

}

echo $html;

/*
//==============================
//==================================
*/

Reply With Quote
  #2 (permalink)  
Old 03-21-2007
shimmyshack
 
Posts: n/a
Default Re: fsockopen() Cookie problem Maximum execution time of 30 seconds exceeded

On 20 Mar, 21:00, "Thorak" <diving...@gmail.com> wrote:
> Im having a wierd problem with one of my php scripts opening a socket
> connection with session variables. My page is continualy returning
>
> Fatal error: Maximum execution time of 30 seconds exceeded in "bla bla
> bla" line 43
> line 43 is: $html .= fgets($fp, 4096);
>
> The thing is this code below works for me if i remove the line:
>
> $Headers .= "Cookie: ".$Cookie."\r\n";
>
> problem is then i don't have my session data filling in the form
> fields. As soon as I add this line so that the form fields can get the
> information needed then i get this Maximum execution error.
>
> I know im getting a result for: $Cookie = $_SERVER["HTTP_COOKIE"]
> cause of the echo that is returned and does match the echo of the
> session on all my other scripts.
>
> I have tried using things like: stream_set_timeout($fp, 60); to
> control this - but they dont seem to do anything. And changing the:
> $fp = fsockopen($URL, 80, $errno, $errstr, 30); to $fp =
> fsockopen($URL, 80, $errno, $errstr, 120);
>
> /*
> //==================================
> //==============================
> */
> session_start();
>
> $URL = "vinyl-design"; // localhost network connection
> $Cookie = $_SERVER["HTTP_COOKIE"]; // gives
> "PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1"
>
> $Page = 'interface2/order_details.php';
>
> $fp = fsockopen($URL, 80, $errno, $errstr, 30);
>
> // check if the website is found
> if(!$fp) {
> echo 'Failed opening socket connection!<br>'.$errstr.'('.
> $errno.')';
>
> }
>
> else {
> // write to the http server
> $Headers = "GET /".$Page." HTTP/1.1\r\n";
> $Headers .= "Host: ".$URL."\r\n";
> $Headers .= "Content-Type: text/html\r\n";
> $Headers .= "Cookie: ".$Cookie."\r\n";
> $Headers .= "Connection: Close\r\n\r\n";
> fwrite($fp, $Headers);
>
> // read the website
> while(!feof($fp)) {
> stream_set_timeout($fp, 60);
>
> // store the html into a variable
> $html .= fgets($fp, 4096);
>
> $info = stream_get_meta_data($fp); // get any error
> information
> while reading the data
>
> if ($info['timed_out']) {
> echo 'Connection timed out while trying to
> read data!';
> }
> }
> fclose($fp);
>
> }
>
> echo $html;
>
> /*
> //==============================
> //==================================
> */



Use a proper fully qualified domain name not some vinyl-server host.
change the hosts entry and use the REAL host you are going to use.

Try sending a list of proper headers.
Why are you sending

$Headers .= "Content-Type: text/html\r\n";
and
$Headers .= "Connection: Close\r\n\r\n";
typically thats what the server sends your user agent,

and also do you know what requirements the servrer application has in
terms of headers, use a proxy and browse round while logged in and
then copy the headers that are sent by your browser into your script.

They might look something like

$eol = "\r\n";
$Headers = "GET /".$Page." HTTP/1.1".$eol;
$Headers .= "Host: ".$URL.$eol;
$Headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT
5.1; en-GB; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3".$eol;
$Headers .= "Accept: */*".$eol;
$Headers .= "Accept-Language: en-GB,en,fr-MC;q=0.9,fr;q=0.9,it-
IT;q=0.9,it;q=0.8,fr-FR;q=0.8,de-DE;q=0.8,de;q=0.7,en-US;q=0.7,pl-
PL;q=0.6,pl;q=0.6,zh-SG;q=0.6,zh;q=0.5,pt-PT;q=0.5,pt;q=0.5,hu-
HU;q=0.4,hu;q=0.4,sv-FI;q=0.4,sv;q=0.3,es-ES;q=0.3,es;q=0.3,nl-
NL;q=0.2,nl;q=0.2,nl-BE;q=0.1,it-CH;q=0.1,en-ZA;q=0.1,en-us;q=0.0".
$eol;
$Headers .= "Accept-Encoding: gzip,deflate".$eol;
$Headers .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7".$eol;
$Headers .= "Keep-Alive: 300".$eol;
$Headers .= "Proxy-Connection: keep-alive".$eol;
$Headers .= "Referer: http://".$URL."/".$Page.".$eol;
$Headers .= "Cookie: PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1".$eol.
$eol;

also be careful when posting your session ID, if your IP can be
guessed, people can easily make a connection to your application if
you allow public connections and use it as you, with annoying results.

Reply With Quote
  #3 (permalink)  
Old 03-21-2007
Thorak
 
Posts: n/a
Default Re: fsockopen() Cookie problem Maximum execution time of 30 seconds exceeded

On Mar 21, 10:07 am, "shimmyshack" <matt.fa...@gmail.com> wrote:
> On 20 Mar, 21:00, "Thorak" <diving...@gmail.com> wrote:
>
>
>
> > Im having a wierd problem with one of my php scripts opening a socket
> > connection with session variables. My page is continualy returning

>
> > Fatal error: Maximum execution time of 30 seconds exceeded in "bla bla
> > bla" line 43
> > line 43 is: $html .= fgets($fp, 4096);

>
> > The thing is this code below works for me if i remove the line:

>
> > $Headers .= "Cookie: ".$Cookie."\r\n";

>
> > problem is then i don't have my session data filling in the form
> > fields. As soon as I add this line so that the form fields can get the
> > information needed then i get this Maximum execution error.

>
> > I know im getting a result for: $Cookie = $_SERVER["HTTP_COOKIE"]
> > cause of the echo that is returned and does match the echo of the
> > session on all my other scripts.

>
> > I have tried using things like: stream_set_timeout($fp, 60); to
> > control this - but they dont seem to do anything. And changing the:
> > $fp = fsockopen($URL, 80, $errno, $errstr, 30); to $fp =
> > fsockopen($URL, 80, $errno, $errstr, 120);

>
> > /*
> > //==================================
> > //==============================
> > */
> > session_start();

>
> > $URL = "vinyl-design"; // localhost network connection
> > $Cookie = $_SERVER["HTTP_COOKIE"]; // gives
> > "PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1"

>
> > $Page = 'interface2/order_details.php';

>
> > $fp = fsockopen($URL, 80, $errno, $errstr, 30);

>
> > // check if the website is found
> > if(!$fp) {
> > echo 'Failed opening socket connection!<br>'.$errstr.'('.
> > $errno.')';

>
> > }

>
> > else {
> > // write to the http server
> > $Headers = "GET /".$Page." HTTP/1.1\r\n";
> > $Headers .= "Host: ".$URL."\r\n";
> > $Headers .= "Content-Type: text/html\r\n";
> > $Headers .= "Cookie: ".$Cookie."\r\n";
> > $Headers .= "Connection: Close\r\n\r\n";
> > fwrite($fp, $Headers);

>
> > // read the website
> > while(!feof($fp)) {
> > stream_set_timeout($fp, 60);

>
> > // store the html into a variable
> > $html .= fgets($fp, 4096);

>
> > $info = stream_get_meta_data($fp); // get any error
> > information
> > while reading the data

>
> > if ($info['timed_out']) {
> > echo 'Connection timed out while trying to
> > read data!';
> > }
> > }
> > fclose($fp);

>
> > }

>
> > echo $html;

>
> > /*
> > //==============================
> > //==================================
> > */

>
> Use a proper fully qualified domain name not some vinyl-server host.
> change the hosts entry and use the REAL host you are going to use.
>
> Try sending a list of proper headers.
> Why are you sending
>
> $Headers .= "Content-Type: text/html\r\n";
> and
> $Headers .= "Connection: Close\r\n\r\n";
> typically thats what the server sends your user agent,
>
> and also do you know what requirements the servrer application has in
> terms of headers, use a proxy and browse round while logged in and
> then copy the headers that are sent by your browser into your script.
>
> They might look something like
>
> $eol = "\r\n";
> $Headers = "GET /".$Page." HTTP/1.1".$eol;
> $Headers .= "Host: ".$URL.$eol;
> $Headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT
> 5.1; en-GB; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3".$eol;
> $Headers .= "Accept: */*".$eol;
> $Headers .= "Accept-Language: en-GB,en,fr-MC;q=0.9,fr;q=0.9,it-
> IT;q=0.9,it;q=0.8,fr-FR;q=0.8,de-DE;q=0.8,de;q=0.7,en-US;q=0.7,pl-
> PL;q=0.6,pl;q=0.6,zh-SG;q=0.6,zh;q=0.5,pt-PT;q=0.5,pt;q=0.5,hu-
> HU;q=0.4,hu;q=0.4,sv-FI;q=0.4,sv;q=0.3,es-ES;q=0.3,es;q=0.3,nl-
> NL;q=0.2,nl;q=0.2,nl-BE;q=0.1,it-CH;q=0.1,en-ZA;q=0.1,en-us;q=0.0".
> $eol;
> $Headers .= "Accept-Encoding: gzip,deflate".$eol;
> $Headers .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7".$eol;
> $Headers .= "Keep-Alive: 300".$eol;
> $Headers .= "Proxy-Connection: keep-alive".$eol;
> $Headers .= "Referer: http://".$URL."/".$Page.".$eol;
> $Headers .= "Cookie: PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1".$eol.
> $eol;
>
> also be careful when posting your session ID, if your IP can be
> guessed, people can easily make a connection to your application if
> you allow public connections and use it as you, with annoying results.



I cant change "vinyl-host" as this is an intranet site running on a
network - there is no WWW to be had.

This is what firefox is saying my header information is:

<!--
//=============================================
// Headers returned from Firefox


http://vinyl-design/interface2/order...ge=1&OldOrder=

GET /interface2/order_details.php?
OrderID=21425&CSR=Ryan&CustID=&Page=1&OldOrder= HTTP/1.1
Host: vinyl-design
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:
1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
Accept: text/xml,application/xml,application/xhtml+xml,text/
html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://vinyl-design/interface2/order...r=&RecutOrder=
Cookie: PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1
Cache-Control: max-age=0

HTTP/1.x 200 OK
Date: Tue, 20 Mar 2007 22:26:50 GMT
Server: Apache/1.3.31 (Win32)
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-
check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/4.3.4
Set-Cookie: PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1; path=/
Keep-Alive: timeout=15, max=96
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html

//=============================================
-->

Reply With Quote
  #4 (permalink)  
Old 03-21-2007
shimmyshack
 
Posts: n/a
Default Re: fsockopen() Cookie problem Maximum execution time of 30 seconds exceeded

On Mar 21, 8:28 pm, "Thorak" <diving...@gmail.com> wrote:
> On Mar 21, 10:07 am, "shimmyshack" <matt.fa...@gmail.com> wrote:
>
>
>
> > On 20 Mar, 21:00, "Thorak" <diving...@gmail.com> wrote:

>
> > > Im having a wierd problem with one of my php scripts opening a socket
> > > connection with session variables. My page is continualy returning

>
> > > Fatal error: Maximum execution time of 30 seconds exceeded in "bla bla
> > > bla" line 43
> > > line 43 is: $html .= fgets($fp, 4096);

>
> > > The thing is this code below works for me if i remove the line:

>
> > > $Headers .= "Cookie: ".$Cookie."\r\n";

>
> > > problem is then i don't have my session data filling in the form
> > > fields. As soon as I add this line so that the form fields can get the
> > > information needed then i get this Maximum execution error.

>
> > > I know im getting a result for: $Cookie = $_SERVER["HTTP_COOKIE"]
> > > cause of the echo that is returned and does match the echo of the
> > > session on all my other scripts.

>
> > > I have tried using things like: stream_set_timeout($fp, 60); to
> > > control this - but they dont seem to do anything. And changing the:
> > > $fp = fsockopen($URL, 80, $errno, $errstr, 30); to $fp =
> > > fsockopen($URL, 80, $errno, $errstr, 120);

>
> > > /*
> > > //==================================
> > > //==============================
> > > */
> > > session_start();

>
> > > $URL = "vinyl-design"; // localhost network connection
> > > $Cookie = $_SERVER["HTTP_COOKIE"]; // gives
> > > "PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1"

>
> > > $Page = 'interface2/order_details.php';

>
> > > $fp = fsockopen($URL, 80, $errno, $errstr, 30);

>
> > > // check if the website is found
> > > if(!$fp) {
> > > echo 'Failed opening socket connection!<br>'.$errstr.'('.
> > > $errno.')';

>
> > > }

>
> > > else {
> > > // write to the http server
> > > $Headers = "GET /".$Page." HTTP/1.1\r\n";
> > > $Headers .= "Host: ".$URL."\r\n";
> > > $Headers .= "Content-Type: text/html\r\n";
> > > $Headers .= "Cookie: ".$Cookie."\r\n";
> > > $Headers .= "Connection: Close\r\n\r\n";
> > > fwrite($fp, $Headers);

>
> > > // read the website
> > > while(!feof($fp)) {
> > > stream_set_timeout($fp, 60);

>
> > > // store the html into a variable
> > > $html .= fgets($fp, 4096);

>
> > > $info = stream_get_meta_data($fp); // get any error
> > > information
> > > while reading the data

>
> > > if ($info['timed_out']) {
> > > echo 'Connection timed out while trying to
> > > read data!';
> > > }
> > > }
> > > fclose($fp);

>
> > > }

>
> > > echo $html;

>
> > > /*
> > > //==============================
> > > //==================================
> > > */

>
> > Use a proper fully qualified domain name not some vinyl-server host.
> > change the hosts entry and use the REAL host you are going to use.

>
> > Try sending a list of proper headers.
> > Why are you sending

>
> > $Headers .= "Content-Type: text/html\r\n";
> > and
> > $Headers .= "Connection: Close\r\n\r\n";
> > typically thats what the server sends your user agent,

>
> > and also do you know what requirements the servrer application has in
> > terms of headers, use a proxy and browse round while logged in and
> > then copy the headers that are sent by your browser into your script.

>
> > They might look something like

>
> > $eol = "\r\n";
> > $Headers = "GET /".$Page." HTTP/1.1".$eol;
> > $Headers .= "Host: ".$URL.$eol;
> > $Headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT
> > 5.1; en-GB; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3".$eol;
> > $Headers .= "Accept: */*".$eol;
> > $Headers .= "Accept-Language: en-GB,en,fr-MC;q=0.9,fr;q=0.9,it-
> > IT;q=0.9,it;q=0.8,fr-FR;q=0.8,de-DE;q=0.8,de;q=0.7,en-US;q=0.7,pl-
> > PL;q=0.6,pl;q=0.6,zh-SG;q=0.6,zh;q=0.5,pt-PT;q=0.5,pt;q=0.5,hu-
> > HU;q=0.4,hu;q=0.4,sv-FI;q=0.4,sv;q=0.3,es-ES;q=0.3,es;q=0.3,nl-
> > NL;q=0.2,nl;q=0.2,nl-BE;q=0.1,it-CH;q=0.1,en-ZA;q=0.1,en-us;q=0.0".
> > $eol;
> > $Headers .= "Accept-Encoding: gzip,deflate".$eol;
> > $Headers .= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7".$eol;
> > $Headers .= "Keep-Alive: 300".$eol;
> > $Headers .= "Proxy-Connection: keep-alive".$eol;
> > $Headers .= "Referer: http://".$URL."/".$Page.".$eol;
> > $Headers .= "Cookie: PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1".$eol.
> > $eol;

>
> > also be careful when posting your session ID, if your IP can be
> > guessed, people can easily make a connection to your application if
> > you allow public connections and use it as you, with annoying results.

>
> I cant change "vinyl-host" as this is an intranet site running on a
> network - there is no WWW to be had.
>
> This is what firefox is saying my header information is:
>
> <!--
> //=============================================
> // Headers returned from Firefox
>
> http://vinyl-design/interface2/order...D=21425&CSR=Ry...
>
> GET /interface2/order_details.php?
> OrderID=21425&CSR=Ryan&CustID=&Page=1&OldOrder= HTTP/1.1
> Host: vinyl-design
> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:
> 1.8.1.2) Gecko/20070219 Firefox/2.0.0.2
> Accept: text/xml,application/xml,application/xhtml+xml,text/
> html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
> Accept-Language: en-us,en;q=0.5
> Accept-Encoding: gzip,deflate
> Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
> Keep-Alive: 300
> Connection: keep-alive
> Referer:http://vinyl-design/interface2/order...rderID=21425&C...
> Cookie: PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1
> Cache-Control: max-age=0
>
> HTTP/1.x 200 OK
> Date: Tue, 20 Mar 2007 22:26:50 GMT
> Server: Apache/1.3.31 (Win32)
> Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-
> check=0
> Expires: Thu, 19 Nov 1981 08:52:00 GMT
> Pragma: no-cache
> X-Powered-By: PHP/4.3.4
> Set-Cookie: PHPSESSID=c32fc53d15e03ba25f1ad6be035a7eb1; path=/
> Keep-Alive: timeout=15, max=96
> Connection: Keep-Alive
> Transfer-Encoding: chunked
> Content-Type: text/html
>
> //=============================================
> -->


this could be as simple as allowing the execution of the scripr to
continue over 30secs, which tends to be a default.
If you are using the machine to do a lot of work, or if the machine is
busy doing other things, then it might take longer than 30secs, I was
thrown off saying this because you said it worked if you removed the
session line - but I wonder now what that meant.

In general, the way I would approach logging in to a site would be to
use the cURL library, and store the crendentials (crendentials that
you know work) for that connection inside a cookie file for the
duration.

Also [from a pm] you are using this to output close of play print
outs.
Why not open word, create a super looking (but not TOO complicated)
doc
with a certain format.
Put stars where the content should go
Make a page break where you need it
Save as RTF (which is open format and text)
(no images)
then save the RTF as a string, and add in the vars from the database,
cycling through until the last page
This works quickly and can be sent for download and archiving, and/or
saved to the server, works with linux and windows.
is quick and small zipped up.
Its harder than it sounds though, but looks fantastic.

I woudl say this is a simple timeout issue rather than what I
suspected - some kind of session or header issue, as you clearly
control the server on which the code is running, and so should know
what it accepts in terms of headers.

Use the cURL library to make the connection and you should be fine.
You can use methods such as yours but why reinvent the wheel here,
especially as there are great examplse online in the manual. (and if
you ever go SSl, it can carry on working with only minor revision)

Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT +1. The time now is 12:05 PM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0