Does work with Mozilla....
Regards,
Karl
Free Software: "You don't pay back, you pay forward."
-- Robert A. Heinlein
---------------------------<snip>-------------------
<?php
/* Example of how to do a "please wait" message while a web page loads.
*
* May 28, 2003
*
* Karl O. Pinc <kop AT meme DOT com>
*
* This code does not work with Microsoft's Internet Explorer.
* (I suspect they want you to use their DHTML instead of the
* W3/RFC standards. Unfortunately for them, javascript will do
* the same thing and is more popular.)
*
* This technique can be adapted to send files along with a web page,
* send many successive pages, send many alternative representations of
* the same content, and so forth. (RFC 1341 is your friend.)
*
* The idea is to send two complete web pages in response to a single
* client request. The first page has the "please wait" message, the
* second is the data we want to deliver. We send two pages by returning
* multipart/mixed mime document, each page being a separate part.
*
* For this page to work with apache/php the php short_open_tag configuration
* directive must be set to "off", so the xml declaration is passed to the
* client. Put "php_flag short_open_tag off" (in a <Directory> directive?)
* in /etc/httpd/conf/httpd.conf or a .htaccess file.
*
* Note that this page relies on the w3.org site for the
* xhtml dtd declaration. If you want to be stand-alone, copy
* the document to your own server and adjust the URLs in the doctype
* declaration. (The xmlns namespace in the "head" tag is a string
* identifying the namespace, not a document.)
*
* As coded this page needs a (possibly empty) CSS file named 'markup.css'
* in this file's parent directory. See:
* http://www.w3.org/TR/REC-html40/present/styles.html
* for more information.
*
* Technique from "The Linux Journal, Issue 82", "Web Servers and
* Dynamic Content", http://www.linuxjournal.com/article.php?sid=4386, the
* section titled "Pushing Continual Updates to the Browser".
* See also section 7.2 of RFC 1341, nicely formatted at:
* http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html
*/
//
// Some constants
//
// The RFC is finicky, it wants carriage-return, line-feed as EOL
// in mime documents.
define(CRLF, "\r\n");
// The canonical name of the UTF-8 (us-ascii superset) encoding.
define(UTF8, 'UTF-8');
//
// Generate 70 characters to use for a boundary string. The boundary generated
// is the most random allowed under RFC1341. The odds are
// _long_ that the string won't occur elsewhere in the HTML.
//
// Note the space is last!
define(BCHARS
, "'()+,./01234567890:=?_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
");
define(BCHARS_LAST_POS, 74); // indexed zero relative
define(BCHARSNOSPACE_LAST_POS, 73); // 74 chars before the space
$BOUNDARY = '';
for ($i = 1; $i <= 69; $i++) {
// substr() is likely at least as fast as a php array reference.
$BOUNDARY .= substr(BCHARS, rand(0, BCHARS_LAST_POS), 1);
}
$BOUNDARY .= substr(BCHARS, rand(0, BCHARSNOSPACE_LAST_POS), 1);
//
// Other initialization -- make more 'constant's.
//
$DELIMITER = CRLF . '--' . $BOUNDARY . CRLF;
$CLOSE_DELIMITER = CRLF . '--' . $BOUNDARY . '--';
$CONTENT_HEADER = 'Content-type: text/html; charset=' . UTF8 . CRLF
. 'Content-Style-Type: text/css' . CRLF . CRLF;
// Note that we just assumed that all the parts are the same mime type and
// encoding. This does not have to be the case.
// Another possibility for a mime type is "text/plain", if that
// floats your boat. You can also use various mime headers to
// send files to the client and so forth.
//
// Have the server tell the client we'll be sending a multipart mime document.
//
// (Recall, header() _must_ be called before any output is sent. Check
// those require()-s and include()-s that might be above to be sure
// they don't generate output!)
// (Old-time netscape used multipart/x-mixed-replace, but mozilla
// works straight from the RFC recommendation.)
header("Content-Type: multipart/mixed; boundary=\"$BOUNDARY\"");
//
// Test the client's implementation of multipart/mixed.
// (If you're trying to get IE to work, remove this and the
// other test output in the epilogue.)
//
?>
All output before the first boundary delimiter is preamble and should
be ignored by the browser.
If you can see this, your browser is not RFC 1341 compliant.
<?php
//
// The first page to display.
//
// First, encapsulation as mime message, then the body, which includes
// the requisite meta information about html version, encoding, etc. to
// be standards compliant. (This meets XHTML 1.0, Strict.)
print($DELIMITER);
print($CONTENT_HEADER);
// Note, the \n trailing the ? > is part of the ? > tag and not sent to client.
?>
<?xml version="1.0" encoding="<?php print(UTF8); ?>"?>
<?xml-stylesheet type="text/css" href="markup.css"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<link type="text/css" rel="stylesheet" href="markup.css"></link>
<title>Test page -- waiting</title>
</head>
<body>
<p>
Please wait while our computer does something important sounding....
</p>
</body>
</html>
<?php
// Finish the encapsulation of the first page.
print($DELIMITER);
// Send the first page.
flush();
// Wait 7 seconds, so the user has time to read the first page.
sleep(7);
//
// Second page to display.
//
print($CONTENT_HEADER);
// Note, the \n trailing the ? > is part of the ? > tag and not sent to client.
?>
<?xml version="1.0" encoding="<?php print(UTF8); ?>"?>
<?xml-stylesheet type="text/css" href="markup.css"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<link type="text/css" rel="stylesheet" href="markup.css"></link>
<title>Test page</title>
</head>
<body>
<p>
All done. Ain't you glad you waited?
</p>
</body>
</html>
<?php
// Finish the second page.
print($CLOSE_DELIMITER);
//
// Just for grins, continue checking the client's rfc conformance.
//
flush(); // Send the second page.
// Note, the \n trailing the ? > is part of the ? > tag and not sent to client.
?>
All output after the closing boundary delimiter is epilogue and
should be ignored by the browser.
If you can see this, your browser is not RFC 1341 compliant.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php