954,568 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Execute file in server after window is closed

Hi all,

Iam trying to tigger some file which will be working in backend once the window is closed in php. Iam using onunload function in javascript but it triggers the file once we leave that particular page only. If we closed the window it didnt do anything. Anybody have idea how to execute file in server once the window was closed. Is there any possibilites?

Thanks in advance...

mahe4us
Junior Poster in Training
55 posts since Sep 2006
Reputation Points: 10
Solved Threads: 0
 

may i ask why you want to do it that way??
i never did something like this , but i guess if you want to execute something on the server other than web page you could put the php code in a file and execute it without browser

w_3rabi
Junior Poster
160 posts since Dec 2006
Reputation Points: 18
Solved Threads: 9
 
may i ask why you want to do it that way?? i never did something like this , but i guess if you want to execute something on the server other than web page you could put the php code in a file and execute it without browser

Hi w_3rabi,

Thankyou for your reply. Actually I made an application that users(doesnt have sessionid or registration in site) just come to site and add the products to their list. I maintained a temporary table which contains the products lists. If the users selected the products and send mail to me then the temporary table will clear. otherwise the user just selected the products and didnt send the mail to me and close the window then the table doesnt clear....... so only i want to erase contents in table once the user closed the window.

i think the detail may be just brief.... sorry.
thanks...

mahe4us
Junior Poster in Training
55 posts since Sep 2006
Reputation Points: 10
Solved Threads: 0
 

Basically you need to remember that php is a scripting language that is designed to be excecuted before a page is sent to a browser and scripts will only be processed when page is called and will only continue while a page is loading.

So if a window is closed the connection is broken, the script execution will stop.

Having said that I can think of an option but it is not very pretty.

Not knowing what your script is doing and why it needs to be executed on the unload function, it makes it slightly more difficult to be helpful.

I am going to assume that you are using AJAX in the unload function otherwise I can't see how else you are making a call to the server (except maybe opening a new window).

What I would propose is that instead of running the script directly your could use the function call to write the information that you are sending to the server, into a storage file or database, ready for processing.

The setup a cronjob that executes every x minutes that processes the commands. This way it does not matter if the window is closed.

But this brings us back to the problem of the unload function, which will not be triggered if the window is closed. If you provide some more information then, we might be able to help a bit more.

Urban

UrbanSky
Light Poster
42 posts since Oct 2006
Reputation Points: 10
Solved Threads: 4
 

Sorry, was typing when the two replys came in above.

UrbanSky
Light Poster
42 posts since Oct 2006
Reputation Points: 10
Solved Threads: 4
 

Ok having read what you are trying to do, I would just place the information in a cookie and then if they visit my site again the first thing that I do is delete the cookie to clear the information.

UrbanSky
Light Poster
42 posts since Oct 2006
Reputation Points: 10
Solved Threads: 4
 
Ok having read what you are trying to do, I would just place the information in a cookie and then if they visit my site again the first thing that I do is delete the cookie to clear the information.


i just was thinking in the same thing .......
and i guess this is better and more professional way in saving the data at the client machine but still the problem is he want to delete the dataafter an email is sent .....

w_3rabi
Junior Poster
160 posts since Dec 2006
Reputation Points: 18
Solved Threads: 9
 
Ok having read what you are trying to do, I would just place the information in a cookie and then if they visit my site again the first thing that I do is delete the cookie to clear the information.

Hi UrbanSky,

Thankyou for your nice reply. I also have the idea to run a cron job to delete the contents in temporary table. But I would like to delete the contents without using cron job in the table. How could you call a function call for this purpose? may i know that...

thanku

mahe4us
Junior Poster in Training
55 posts since Sep 2006
Reputation Points: 10
Solved Threads: 0
 

you could put a link on the page to redirect him to another page which deletes from table then redirect to th email client

:S:S

i guess ..............!!!!

w_3rabi
Junior Poster
160 posts since Dec 2006
Reputation Points: 18
Solved Threads: 9
 

Bassically, I am not sure that you can. Becuase the script has to be run when the page is called by the browser. I think that you are over complicating the process, increasing bandwidth, increasing server load, etc.

Please explain why it is important to store the information in a centeral database table on the server. How is the email being send?(Is it by a send mail script or does the client have to use there email client to send you an email?)

Urban

UrbanSky
Light Poster
42 posts since Oct 2006
Reputation Points: 10
Solved Threads: 4
 

Hi w_3rabi,

Thankyou for your reply. Actually I made an application that users(doesnt have sessionid or registration in site) just come to site and add the products to their list. I maintained a temporary table which contains the products lists. If the users selected the products and send mail to me then the temporary table will clear. otherwise the user just selected the products and didnt send the mail to me and close the window then the table doesnt clear....... so only i want to erase contents in table once the user closed the window.

i think the detail may be just brief.... sorry. thanks...

Why not just delete the temporary table when the users session is deleted?
(or when session expires).

Or you could just have a query that would check for temporary tables that have expired, and run the query every time a new table is created.

eg:

[PHP]$sql = "SELECT id from temp_table_name where update < 'NOW() - 3600'";[/PHP]

or if you have a db based session:

[PHP]

$sql = "SELECT t.id as tableid from temp_table_name as t LEFT JOIN session_table_name AS s ON (s.id = t.sessionid) where s.expires < NOW()";

[/PHP]

You don't really need to use cron. If you're worried about server/db load, just cache the last "cleanup" time to a file. Then If the last cleanup time was over 1 hour or so, runt he "cleanup" query again.

One problem I can see with using the window onunload event is that it doesn't tie into a users session. A user may have multiple windows open. Then may have not meant to close the window, and they still want their list of products there.

An expiration time linked to the session is better.

The window.onunload event with a new XMLHTTPRequest call does work though if you're sure the user only has one window open, and the one window represents a session. (common with Web2.0 designs).

digital-ether
Nearly a Posting Virtuoso
Moderator
1,293 posts since Sep 2005
Reputation Points: 461
Solved Threads: 101
 

Hi digital-ether,

Thank you for your great reply. I really get some ideas from your reply. I have store the each sessionid obtained from session_id() in the temporary table. As you told I just check the sessionid available in the table and check whether it is active or not. once it not active then i delete it using your query.

Thank

mahe4us
Junior Poster in Training
55 posts since Sep 2006
Reputation Points: 10
Solved Threads: 0
 

Not sure if this is even still relevant but

ignore_user_abort(1);


will continue to execute the script if the user closes the browser window.

castis
Newbie Poster
1 post since Oct 2009
Reputation Points: 10
Solved Threads: 0
 

I simply would use an expiring session cookie.
That way, you wouldn't have to worry about the database usage and cron jobs.
Usually, it isn't a good idea to store temporary information on the server.

codejoust
Junior Poster
180 posts since Jul 2009
Reputation Points: 18
Solved Threads: 21
 
I simply would use an expiring session cookie. That way, you wouldn't have to worry about the database usage and cron jobs. Usually, it isn't a good idea to store temporary information on the server.

Ditto.

BTW: why did this thread get resurrected after two and a half years?

diafol
Rhod Gilbert Fan (ardav)
Moderator
7,792 posts since Oct 2006
Reputation Points: 1,170
Solved Threads: 1,080
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You