|
Posted by shimmyshack on 02/13/07 15:54
On 13 Feb, 11:20, Maxim Heijndijk <inva...@email.address> wrote:
> Koncept wrote:
>
> > Something like this should work for you. I hope I got the logic correct
> > given your specs. I have to admit that I didn't really take a lot of
> > time to figure out exactly what you were doing with the shell script:
>
> Well, I now have modified the script so the end and startpages are there
> too. Also the script reads the captions and the variables from
> includefiles. But I want to simplify my site even more:
>
> At the moment, the directory structure is as follows:
>
> index.html
>
> photo/rroma/index.php
> photo/rroma/captions.txt
> photo/rroma/vars.inc
>
> photo/travel/spain/index.php
> photo/travel/spain/captions.txt
> photo/travel/spain/vars.inc
>
> links in index.html point to the index.php files. But the index.php
> files are exactly the same, as they read vars and captions from textfiles.
>
> What I want is an index.html with links that point to a single index.php
> file. The links in the html file should contain querystrings that will
> be passed to the phpscript so that the script knows from which directory
> to get the captions and vars. so the structure will look like this:
>
> index.html
> index.php
>
> photo/rroma/captions.txt
> photo/rroma/vars.inc
>
> photo/travel/spain/captions.txt
> photo/travel/spain/vars.inc
>
> How do I do that??
>
> This is the script with include files up to now:
>
> ## index.php
>
> <?php
>
> // Read config from file
> include("vars.inc");
>
> // Create path structure
> $dirPath=str_repeat("../",$dirLevel);
>
> // Get the page request from $_GET
> if(isset($_GET['page'])&&is_numeric($_GET['page'])){
> $_GP=$_GET['page']>0?$_GET['page']:1;
>
> }else{
> $_GP=1;
> }
>
> // Assign next, previous and current variables
> if($_GP>1&&$_GP<$pages){
> list($p,$n,$c)=array($_GP-1,$_GP+1,$_GP);}elseif($_GP==1){
>
> list($p,$n,$c)=array($pages,2,1);}elseif($_GP==$pages){
>
> list($p,$n,$c)=array($_GP-1,1,$_GP);
>
> }
>
> // Prefix variables with "0" if value is less than 10
> $preName=$p<10?"0{$p}":$p;
> $curName=$c<10?"0{$c}":$c;
> $nxtName=$n<10?"0{$n}":$n;
>
> // First and last page must point to $startPage
> if($startPage!==0&$c==$pages){
> $rootDir = dirname($_SERVER['PHP_SELF']);
> $next="{$rootDir}/${dirPath}${startPage}";}else{
>
> $next="{$_SERVER['PHP_SELF']}?page={$n}";
>
> }
>
> if($startPage!==0&$c==1){
> $rootDir = dirname($_SERVER['PHP_SELF']);
> $prev="{$rootDir}/${dirPath}${startPage}";}else{
>
> $prev="{$_SERVER['PHP_SELF']}?page={$p}";
>
> }
>
> // Check for the the source image...
> if(!is_file($curImg="{$jpgDir}/images/{$curName}.jpg")){
> trigger_error("Missing image file $curImg",E_USER_ERROR);
>
> }
>
> // Get image properties
> list($x,$y,$type,$attr)=getimagesize($curImg);
>
> // Get the photo caption for this image
> $caption=$captions[$c-1];
>
> // Send template to browser
> echo <<<HTML
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml">
> <head>
> <title>{$generalTitle} - Photo {$curName}</title>
> <meta http-equiv="content-type" content="text/html; charset=utf-8" />
> <meta http-equiv="refresh" content="15;URL={$next}" />
> <meta name="author" content="Fotografie & Webdesign: Maxim
> Heijndijk" />
> <meta name="copyright" content="Fotografie & Webdesign: Maxim
> Heijndijk" />
> <link rel="stylesheet" type="text/css" href="{$dirPath}../index.css" />
> </head>
> <body oncontextmenu="return false">
> <table summary="{$generalTitle} - Photo {$curName}" align="center"
> cellspacing="0" cellpadding="0" border="0" width="100%" class="caption">
> <tr>
>
> <!-- Previous -->
> <td align="right" valign="bottom" width="10%">
> <a href="{$prev}"><img alt="Previous"
> src="{$dirPath}images/prev.gif" border="0" width="22" height="24" /></a>
> </td>
>
> <!-- Current -->
> <td align="center" valign="bottom" width="80%">
> <a href="{$next}"><img alt="{$imgAlt}" src="images/{$curName}.jpg"
> border="0" {$attr} /></a>
> </td>
>
> <!-- Next -->
> <td align="left" valign="bottom" width="10%">
> <a href="{$next}"><img alt="Next" src="{$dirPath}images/next.gif"
> border="0" width="22" height="24" /></a>
> </td>
> </tr>
> <tr>
>
> <td align="center" nowrap="nowrap" valign="top" width="100%"
> height="10%" colspan="3">
> <br />{$caption}<br /><br />
> </td>
> </tr>
> </table>
>
> </body>
>
> </html>
>
> HTML;
> ?>
>
> ## captions.txt
>
> MONTSERRAT
> MONTSERRAT - Wedding
> MONTSERRAT
> BARCELONA - Tibidabo
> EL MASNOU - Fireworks, Ple de Riure del Masnou
>
> ## vars.inc
> <?php
>
> $jpgDir = dirname($_SERVER['SCRIPT_FILENAME']);
> $subDir = "travel/spain";
> $dirLevel = "2";
> $generalTitle = "Spain";
> $startPage = "travel.html";
> $imgAlt = "© Maxim Heijndijk";
> $captions = @file("captions.txt");
> $pages = "47";
>
> ?>
the check for $_GET['page'] is not sufficient IMHO, what about
+1.3, 1e2 or +%20%20%201.2
these cases are let through but aren't picked up by the logic. (+
becomes a space when on the webpage)
also for that matter you could have
..9999999999999999999999999999
it works, but isnt desired behaviour, perhaps you could simply use a
reg exp something like [1-9][0-9]?
which allows for numbers 1-99 and then set cast $_GET['page'] as an
integer and then a bounds check.
As well as this no one should these days be using a php file ending
in .inc
it can probably be downloaded and the variable names used for bad.
Why not just name it and all files of this sort vars.inc.php?
same goes for data files in my opinion, which should either be renamed
and the strings put in there as a php array, (or just included in
vars.inc) or should be saved in a private directory not accessible by
the public. After all the reason to place the @ in front of the
file)_ call, and the reason to use E_USER_ERROR is to hide bare errors
from the public.
Just my $0.02
Navigation:
[Reply to this message]
|