I'd like to make a directory listing where instead of the entire
filename I need it to show the filename minus the extention and get the
value of charname= in the file itself.
I've been told that I had to turn the directory listing into an array
and then use "foreach (array as item)" to go through and open each file
but I've tried several different approaches and I just can't get it to work.
I've been able to make it list the directory in order using this script
but after that I'm lost.
<?
$list = Array();
$handle = opendir('testdir/.');
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$list[] = ($file);
}
}
closedir($handle);
sort ($list);
reset ($list);
while (list ($key, $val) = each ($list)) {
echo "<a href=test.php?name=$val>$val</a><br>";
}
?>
Here I'd like the $val after the name= to be just the filename without
the extention (all files in the directory are txt files) and then the
second $val which it shows in the list to be the value of the line
charname= in the txt files themselves.
Anybody have an idea what I should do?
Kim Jensen 15 2369
Try this:
<?
$list = Array();
$handle = opendir('../');
while (false !== ($file = readdir($handle))) {
$fileparts = explode(".",$file);
if (count($fileparts) > 1) {
array_pop($fileparts);
}
$file = join(".",$fileparts);
if ($file != "." && $file != ".." && $file != "") {
$list[] = $file;
}
}
closedir($handle);
sort ($list);
reset ($list);
while (list ($key, $val) = each ($list)) {
echo "<a href=test.php?name=$val>$val</a><br />";
}
?>
Erich Musick
Kim Jensen wrote: I'd like to make a directory listing where instead of the entire filename I need it to show the filename minus the extention and get the value of charname= in the file itself.
I've been told that I had to turn the directory listing into an array and then use "foreach (array as item)" to go through and open each file but I've tried several different approaches and I just can't get it to work.
I've been able to make it list the directory in order using this script but after that I'm lost.
<? $list = Array(); $handle = opendir('testdir/.'); while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $list[] = ($file); } } closedir($handle); sort ($list); reset ($list);
while (list ($key, $val) = each ($list)) { echo "<a href=test.php?name=$val>$val</a><br>";
} ?>
Here I'd like the $val after the name= to be just the filename without the extention (all files in the directory are txt files) and then the second $val which it shows in the list to be the value of the line charname= in the txt files themselves.
Anybody have an idea what I should do?
Kim Jensen
Kim Jensen wrote: while (list ($key, $val) = each ($list)) { echo "<a href=test.php?name=$val>$val</a><br>";
}
Here I'd like the $val after the name= to be just the filename without the extention (all files in the directory are txt files)
echo '<a href="test.php?name=', substr($val, -4), ">$val</a><br";
and then the second $val which it shows in the list to be the value of the line charname= in the txt files themselves.
Are you really sure you want to do that?
You have top open each and every file, read/print its contents, and close
the file. It might be a lot slow!
/* needs error-checking for fopen() and fgets() */
foreach ($list as $val) {
$f = fopen($val);
while (!feof(f)) {
$line = fgets($f);
if (preg_match('/^charname=(.*)$/', $line, $matches)) {
echo '<a href="test.php?name=', urlencode(substr($val, -4)),
'">', $matches[1], '</a><br>';
break; /* leave inner while() */
}
}
fclose($f);
}
--
Mail sent to my "From:" address is publicly readable at http://www.dodgeit.com/
== ** ## !! !! ## ** ==
TEXT-ONLY mail to the complete "Reply-To:" address ("My Name" <my@address>) may
bypass the spam filter. I will answer all pertinent mails from a valid address.
This method, though, assumes that all extensions are exactly three
characters long.
What about extensions such as pl, py, h, among others?
Pedro Graca wrote: Kim Jensen wrote:
while (list ($key, $val) = each ($list)) { echo "<a href=test.php?name=$val>$val</a><br>";
}
Here I'd like the $val after the name= to be just the filename without the extention (all files in the directory are txt files)
echo '<a href="test.php?name=', substr($val, -4), ">$val</a><br";
and then the second $val which it shows in the list to be the value of the line charname= in the txt files themselves.
Are you really sure you want to do that? You have top open each and every file, read/print its contents, and close the file. It might be a lot slow!
/* needs error-checking for fopen() and fgets() */ foreach ($list as $val) { $f = fopen($val); while (!feof(f)) { $line = fgets($f); if (preg_match('/^charname=(.*)$/', $line, $matches)) { echo '<a href="test.php?name=', urlencode(substr($val, -4)), '">', $matches[1], '</a><br>'; break; /* leave inner while() */ } } fclose($f); }
--
In Christ,
Erich Musick http://erichmusick.com
In the same way, let your light shine before others, so that they may
see your good works and give glory to your Father who is in heaven. --
Matthew 5:16 NKJV
Pedro Graca wrote: Are you really sure you want to do that? You have top open each and every file, read/print its contents, and close the file. It might be a lot slow!
The problem is that the filenames themselves even if they contain the
name I'm looking for aren't really pleasing to the eye as links.
I'd rather have links that read:
Angelina Jolie
Gwynneth Paltrow
Jude Law
Michael Gambon
Sir Lawrence Olivier
than
angelinajolie
gwynnethpaltrow
judelaw
lawrenceolivier
michaelgambon
Sorry, just got home from watching Sky Captain :)
Kim Jensen
Kim Jensen wrote: Pedro Graca wrote:
Are you really sure you want to do that? You have top open each and every file, read/print its contents, and close the file. It might be a lot slow!
The problem is that the filenames themselves even if they contain the name I'm looking for aren't really pleasing to the eye as links.
I'd rather have links that read:
Angelina Jolie Gwynneth Paltrow Jude Law Michael Gambon Sir Lawrence Olivier
than
angelinajolie gwynnethpaltrow judelaw lawrenceolivier michaelgambon
Sorry, just got home from watching Sky Captain :)
Just forgot something. If I was just now creating the whole thing I
could easily use the first examples as file names, but unfortunately I
already have thousands of links using the second type of file names so
going back and changing all of them manually or even by global
search/replace would take ages.
Kim Jensen
Erich Musick top-posted (and I changed the format): Pedro Graca wrote: Kim Jensen wrote:
Here I'd like the $val after the name= to be just the filename without the extention (all files in the directory are txt files)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
echo '<a href="test.php?name=', substr($val, -4), ">$val</a><br"; This method, though, assumes that all extensions are exactly three characters long.
Yes, as the OP stated.
What about extensions such as pl, py, h, among others?
In this case, it didn't seem necessary to make a generic function -- but
I agree that would have been a better option from the start :)
--
Mail sent to my "From:" address is publicly readable at http://www.dodgeit.com/
== ** ## !! !! ## ** ==
TEXT-ONLY mail to the complete "Reply-To:" address ("My Name" <my@address>) may
bypass the spam filter. I will answer all pertinent mails from a valid address.
Pedro Graca wrote: Are you really sure you want to do that? You have top open each and every file, read/print its contents, and close the file. It might be a lot slow!
About the slowness. Couldn't it be done so that it only took the files
starting with a specific letter?
So that if I want to see a listing of the files starting with A I'd open
dir.php?letter=a
Kim Jensen
Pedro Graca wrote: Erich Musick top-posted (and I changed the format):
Pedro Graca wrote:
Kim Jensen wrote:
Here I'd like the $val after the name= to be just the filename without the extention (all files in the directory are txt files)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
echo '<a href="test.php?name=', substr($val, -4), ">$val</a><br";
This method, though, assumes that all extensions are exactly three characters long.
Yes, as the OP stated.
My bad - failed to notice that :) What about extensions such as pl, py, h, among others?
In this case, it didn't seem necessary to make a generic function -- but I agree that would have been a better option from the start :)
--
In Christ,
Erich Musick http://erichmusick.com
In the same way, let your light shine before others, so that they may
see your good works and give glory to your Father who is in heaven. --
Matthew 5:16 NKJV
Yeah...that's a possibility
Kim Jensen wrote: Pedro Graca wrote:
Are you really sure you want to do that? You have top open each and every file, read/print its contents, and close the file. It might be a lot slow!
About the slowness. Couldn't it be done so that it only took the files starting with a specific letter?
So that if I want to see a listing of the files starting with A I'd open dir.php?letter=a
Kim Jensen
--
In Christ,
Erich Musick http://erichmusick.com
In the same way, let your light shine before others, so that they may
see your good works and give glory to your Father who is in heaven. --
Matthew 5:16 NKJV
[ (-: Tenzel Kim Jensen? ]
Tenzel Kim wrote: Kim Jensen wrote: I'd rather have links that read:
Angelina Jolie
than
angelinajolie
If I was just now creating the whole thing I could easily use the first examples as file names, but unfortunately I already have thousands of links using the second type of file names so going back and changing all of them manually or even by global search/replace would take ages.
Write a script to do that for you!
<?php
$oldfiles_dir = 'old/';
$newfiles_dir = 'new/';
foreach ($list as $val) {
/* get $charname :: fopen(), fgets(), fclose() */
copy($oldfiles_dir . $val, $newfiles_dir . $charname);
}
?>
And presto! :-)
--
Mail sent to my "From:" address is publicly readable at http://www.dodgeit.com/
== ** ## !! !! ## ** ==
TEXT-ONLY mail to the complete "Reply-To:" address ("My Name" <my@address>) may
bypass the spam filter. I will answer all pertinent mails from a valid address.
Erich Musick wrote: Pedro Graca wrote: Erich Musick top-posted (and I changed the format):What about extensions such as pl, py, h, among others?
In this case, it didn't seem necessary to make a generic function -- but I agree that would have been a better option from the start :)
What about
filename.with.a.lot.of.dots
and
filename_without_dots
?
:-)
The generic function would have to deal with them!
--
Mail sent to my "From:" address is publicly readable at http://www.dodgeit.com/
== ** ## !! !! ## ** ==
TEXT-ONLY mail to the complete "Reply-To:" address ("My Name" <my@address>) may
bypass the spam filter. I will answer all pertinent mails from a valid address.
Kim Jensen wrote: Pedro Graca wrote: Are you really sure you want to do that? You have top open each and every file, read/print its contents, and close the file. It might be a lot slow!
About the slowness. Couldn't it be done so that it only took the files starting with a specific letter?
So that if I want to see a listing of the files starting with A I'd open dir.php?letter=a
Or you could make a 'index' file and only open that one. Its contents
would be something like:
angelinajolie.txt Angelina Jolie
gwynnethpaltrow.txt Gwynneth Paltrow
judelaw.txt Jude Law
lawrenceolivier.txt Sir Lawrence Olivier
michaelgambon.txt Michael Gambon
Or use a database.
Of course these options assume the 'index' file and the database would
be updated for every new file ... (and deletions and changes).
--
Mail sent to my "From:" address is publicly readable at http://www.dodgeit.com/
== ** ## !! !! ## ** ==
TEXT-ONLY mail to the complete "Reply-To:" address ("My Name" <my@address>) may
bypass the spam filter. I will answer all pertinent mails from a valid address.
The code i posted earlier should work with that...
Pedro Graca wrote: Erich Musick wrote:
Pedro Graca wrote:
Erich Musick top-posted (and I changed the format):
What about extensions such as pl, py, h, among others?
In this case, it didn't seem necessary to make a generic function -- but I agree that would have been a better option from the start :)
What about filename.with.a.lot.of.dots and filename_without_dots ?
:-)
The generic function would have to deal with them!
--
In Christ,
Erich Musick http://erichmusick.com
In the same way, let your light shine before others, so that they may
see your good works and give glory to your Father who is in heaven. --
Matthew 5:16 NKJV
Pedro Graca wrote: [ (-: Tenzel Kim Jensen? ]
Heh. That's the problem with having a split personality. Sometimes you
forget which is which :)
Kim Jensen or was that Tenzel Kim???
Pedro Graca wrote: Or use a database.
I was trying to avoid using a database for now, as I know that if I went
ahead with that, it would end up being so huge in scope that I'd never
finish it :)
Of course these options assume the 'index' file and the database would be updated for every new file ... (and deletions and changes).
I have been considering the index file approach. However, considering
the speed problem is mainly a problem I don't want my visitors to
encounter making the slow "grab the info from all the files" version
could be done on my harddrive and the output of the script I could just
copy and paste into an index page. That way the slow stuff will be done
behind the scenes.
Maybe that's the best option. Hadn't considered that until just now.
Kim Jensen This discussion thread is closed Replies have been disabled for this discussion. Similar topics
3 posts
views
Thread by Hal Vaughan |
last post: by
|
2 posts
views
Thread by Dean |
last post: by
|
1 post
views
Thread by Vasilis Serghi |
last post: by
|
2 posts
views
Thread by Martin |
last post: by
|
2 posts
views
Thread by Tim_Mac |
last post: by
|
8 posts
views
Thread by gil |
last post: by
|
4 posts
views
Thread by Craig Vermeer |
last post: by
|
8 posts
views
Thread by dougawells |
last post: by
|
4 posts
views
Thread by techusky |
last post: by
| | | | | | | | | | |