Current time: 04-19-2014, 12:34 PM Hello There, Guest! (LoginRegister)

Post Reply 
. and .. appear instead of pics
10-13-2009, 08:02 PM
Post: #1
. and .. appear instead of pics
First of all, thanks very much for providing this forum. It is very much appreciated!

My son-in-law created a php script for my website about 10 years ago to show pictures like a manual slideshow, and it worked fine for many years. I just recently discovered that it now has a problem and I wonder if it has to do with this host having different parameters.

The problem is as follows:

The first pic shows a . , the second shows .. , and the third shows the first pic, the fourth shows the second pic, etc.

I need to get rid of pics 1 and 2 which are displaying as . and ..

My son-in-law told me to add a # before @files in the

#remove the .. and . directories

and it should remove the dots but it does not. He can't think of any other suggestions. The full code is as follows:

#!/usr/bin/perl

#this script will act as a type of slide show

use CGI;

if(CGI::param('directory') eq undef) {
print CGI::header();

open(F, "pictures.txt");
chop(@directories = <F>);
close(F);
foreach (@directories) {
my($pDirectory, $title) = split(/::/);
my($hrefTitle) = $title;
$pDirectory = $pDirectory;

#remove the spaces
$pDirectory =~ s/ / /g;
$hrefTitle =~ s/ / /g;

print "     <A HREF=\"/cgi-bin/pics.pl?directory=$pDirectory&title=$hrefTitle\">$title</A><BR>";
}
} else {
#variables
my($serverRoot) = "/home/ma3ry/christiangays.com";
my($directory) = "/" . CGI::param('directory');
my($i) = 0;
my($max) = 0;
my(@files) = ();

$i = CGI::param('picNum') unless(CGI::param('picNum') == undef);

#open the directory
if(opendir(DIR, "$serverRoot/$directory")) {

#read in the contents of the directory
my(@files) = readdir(DIR);

#remove the .. and . directories
#@files = splice(@files, 2);

#sort the files
@files = sort(@files);

#find out how many pics there are
my($max) = @files *1;

#build the page
&createPage($directory, $files[$i], $i, $max, CGI::param('directory'), CGI::param('title'));

#close the directory
closedir(DIR);

} else {
#directory is not found
print "Content-type: text/html\n\n";
print "Couldn't open directory $directory!\n\n";
}
}

exit(0);

sub createPage {
my($directory) = shift;
my($picName) = shift;
my($i) = shift;
my($max) = shift;
my($hrefDirectory) = shift;
my($title) = shift;
my($j) = $i - 1;
$i++;

print "Content-type: text/html\n\n";
print (<<HTML);
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML LANG="en">
<HEAD>
<meta http-equiv="Content-Language" content="en-us">
<TITLE></TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-">
<META NAME="generator" CONTENT="Jeff Berwick OR A PROGRAM WRITTEN BY HIM">
<META NAME="AUTHOR" CONTENT="Jeff Berwick">
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/css.css">
</HEAD>
<BODY>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" SUMMARY="LAYOUT" width="100%">
<TR>
<TD>
<img src="/images/blank.gif" width="10" height="1" alt="" border="0">
</td>
<TD class="yellow">
<img src="/images/blank.gif" width="15" height="1" alt="" border="0">
</td>
<td class="yellow2">
<BR><BR><BR>
HTML

#replace the spaces
$title =~ s/ / /g;

if($j >= 0) {
print "<a href=\"/cgi-bin/pics.pl?directory=$hrefDirectory&title=$title&picNum=$j\">Previous</a><BR><BR>\n";
} else {
print "previous<BR><BR>\n";
}

if($i - 10 > 0) {
print "<a href=\"/cgi-bin/pics.pl?directory=$hrefDirectory&title=$title&picNum=", $i - 11, "\">Jump back<BR> 10 pictures</a><BR><BR>\n";
} else {
print "Jump back<BR> 10 pictures<BR><BR>\n";
}

if($i - 1 != 0) {
print "<a href=\"/cgi-bin/pics.pl?directory=$hrefDirectory&title=$title&picNum=0\">Start</a>\n";
} else {
print "start\n";
}

#put the spaces back in
$title =~ s/ / /g;

print(<<HTML);
<BR><BR>
<BR><BR>
<a href="/pics.shtml">Return to pictures list</a>
</td>
<td class="yellow">
<H1 class="center">$title</H1>
<P class="main2">
You are viewing picture $i of $max
</P>
<P class="main2">
<img src="$directory/$picName" alt="$picName" border="0">
</P>
<BR><BR>
</td>
<td class="yellow3">
<BR><BR><BR>
HTML

#drop the extra one off the end
$max--;

#take out the spaces
$title =~ s/ / /g;

if($i <= $max) {
print "<a href=\"/cgi-bin/pics.pl?directory=$hrefDirectory&title=$title&picNum=$i\">Next</a><BR><BR>\n";
} else {
print "next<BR><BR>\n";
}

if($i <= $max - 10) {
print "<a href=\"/cgi-bin/pics.pl?directory=$hrefDirectory&title=$title&picNum=", $i + 9, "\">Jump ahead<BR> 10 pictures</a><BR><BR>\n";
} else {
print "Jump ahead<BR> 10 pictures<BR><BR>\n";
}

if($i <= $max) {
print "<a href=\"/cgi-bin/pics.pl?directory=$hrefDirectory&title=$title&picNum=", $max, "\">End</a>\n";
} else {
print "end\n";
}

print (<<HTML);
<BR><BR>
<BR><BR>
<a href="/index.shtml">Return to ChristianGays.com</a>
</td>
<TD class="yellow">
<img src="/images/blank.gif" width="15" height="1" alt="" border="0">
</td>
<TD>
<img src="/images/blank.gif" width="10" height="1" alt="" border="0">
</td>
</tr>
</table>
</BODY>
</HTML>
HTML

}
Visit this user's website Find all posts by this user
Quote this message in a reply
10-14-2009, 12:15 AM
Post: #2
. and .. appear instead of pics
Did you change the line

#@files = splice(@files, 2);

from

@files = splice(@files, 2);

It should remove the first to entries, without the #, and those two should be "." and "..".
Visit this user's website Find all posts by this user
Quote this message in a reply
10-14-2009, 12:23 AM
Post: #3
. and .. appear instead of pics
Ah, yes, I know why.

You are now on a server, where "." and ".." are not the first two. We have to remove them in another way - just wait a moment, and I'll give you the code. I have to test it first.
Visit this user's website Find all posts by this user
Quote this message in a reply
10-14-2009, 12:34 AM
Post: #4
. and .. appear instead of pics
After the lines:

add these

my($k);
for ($k=$#files;$k>=0;$k--) {
if ($files[$k] eq "." or $files[$k] eq "..") {
splice(@files,$k,1);
}
}
Visit this user's website Find all posts by this user
Quote this message in a reply
10-14-2009, 12:35 AM
Post: #5
. and .. appear instead of pics
Which should have been, that you add the code after these two lines:

#remove the .. and . directories
#@files = splice(@files, 2);
Visit this user's website Find all posts by this user
Quote this message in a reply
10-14-2009, 01:25 AM
Post: #6
. and .. appear instead of pics
Code:
@files = grep { $_ ne '.' and $_ ne '..' } @files;

# OR instead combine statements

my(@files) = sort grep { $_ ne '.' and $_ ne '..' } readdir(DIR);
PS. Also it is a Perl script, not a PHP script.

Customer since 2000 Cool openvein.org
Visit this user's website Find all posts by this user
Quote this message in a reply
10-14-2009, 05:14 PM
Post: #7
. and .. appear instead of pics
Hallelujah! You're a Godsend!!! Thank you so very, very, very much!!!! It works!!!!!

God bless,
Mary
Visit this user's website Find all posts by this user
Quote this message in a reply
Post Reply 


Forum Jump: