I found the following script (basic printer-friendly layout thing from vsbabu.org) and it is working great on my company's intranet. However, it does not work when attempting a printer-friendly format from a page contained inside a password protected directory (only returns a printer-friendly version of my 401 Auth Reqd page).
Either the script has to pass a username/password to validate and display the page or the htaccess files has to somehow ignore requests coming from the localhost. I cannot figure out how to do either - am at roadblock can't think of anything else to try.
I did get one suggestion to remove the header lines at the top, however, that just produced a whole lot of garbage on the resulting page. Can PHP pass a username/password string to the server to display the page or does this have to be done somehow from the .htaccess file itself?
SCRIPT:
<?
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modifieed: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: post-check=0,pre-check=0");
header("Cache-Control: max-age=0");
header("Pragma: no-cache");
/
|| Takes the referrer document, only prints the content
|| works only with documents on the same server. good enough :-)
|| V.Satheesh Babu (vsbabu@hotmail.com).
||
|| I put an HTML comment called "document_starts_here" before
|| content starts and another one "document_ends_here" after
|| the content. If you have been following some standard like
|| that, it could be useful.
||
|| Installation instructions
|| 1. Copy paste the code here to your favourite editor, and save it as some php3 file
|| 2. The file name doesn't matter. I call it printit.php3
|| 3. From your other web pages make a link to printit.php3
|| 4. Test it out by clicking on the links in those pages
||
/
if (empty($HTTP_REFERER)) {
$myURL = 'http://opsweb.mts.mb.ca/';
} else {
$myURL = $HTTP_REFERER;
}
//if ($HTTP_REFERER)
// $myURL = $HTTP_REFERER;
//else
// $myURL = "http://opsweb.mts.mb.ca/";
// here is the starting comment for your content
$START_CONT="document_starts_here";
// here is the ending comment for your content
$END_CONT = "document_ends_here";
$parsed_url = parse_url($myURL);
$myServer = $parsed_url['host'];
$document = $parsed_url['path'];
if($document[strlen($document)-1]=='/') { $document = "$document/index"; }
$base_url = dirname($document);
$fp=fsockopen($myServer,80,&$errno,&$errstr,30);
// if you've name based virtual hosting
//$request = "GET $document HTTP/1.1\r\n";
//$request .= "Host: $myServer\r\n\r\n";
/ if you've normal old type servers,
comment out the previous two lines and
use the next line instead
/
$request = "GET $document HTTP/1.0\r\n\r\n";
if(!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs($fp,$request);
$content=0;
$in_title=0;
?>
<HEAD>
<BASE HREF="<? echo "http://$myServer$base_url/"; ?>">
<LINK REL="stylesheet" TYPE="text/css" href="http://opsweb.mts.mb.ca/includes/opscontent.css">
<style type="text/css">
<!--
body {margin: 0px;}
-->
</style>
<?
while(!feof($fp)) {
$line=fgets($fp,4096);
// this is the stupid part - get the title
// python makes this so easy :-)
if(eregi("<title>",$line)){ $in_title=1; }
if ($in_title==1) $title.=$line;
if(eregi("</title>",$line)){
$in_title=0;
if(!eregi("<title>",$line))
$title.=$line;
}
if(ereg($START_CONT,$line)) {
$title = eregi_replace("</title>","",eregi_replace("<title>","",$title));
echo "<TITLE>$title</TITLE>\n</HEAD>\n<BODY>\n";
$content=1;
}
if(ereg($END_CONT,$line)) $content=0;
if($content==1)echo $line;
}
fclose($fp);
?>
</BODY>
<?
}
?>
If anyone can help me to get this working I'd be very grateful!!!
Thanks
Debbie