Har en kodebit som i dette tilfelle finner siste oppdaterte tekstfil i en
mappe ( med undermapper! )
Koden fungerer helt som den skal, men får altså "PHP Notice: Undefined
offset: 1 in... on line 6"
Feilmeldingen kommer 2 ganger pr kjøring, og har vel sammenheng med at den
finner "mappe1" og "undermappe1" som ikke inneholder "." og dermed ikke kan
splittes i "$name" og "$ext".. tror jeg da...
Men jeg finner ikke ut hvordan jeg kan "komme rundt" den! Noen forslag?
function mostRecentModifiedFileTime($dirName,$doRecursive) {
global $newest, $newest_artist;
$d = dir($dirName);
$lastModified = 0;
while($entry = $d->read()) {
linjen som gir feil:
list($name,$ext) = split("\.", $entry,2);
if ($entry != "." && $entry != ".." && $ext != "m3u" && $ext !=
"jpg" && $ext != "txt" && $ext != "php" && $ext = "mp3") {
if (!is_dir($dirName."/".$entry)) {
clearstatcache('fileatime');
$currentModified = filemtime($dirName."/".$entry);
} else if ($doRecursive && is_dir($dirName."/".$entry)) {
$currentModified =
mostRecentModifiedFileTime($dirName."/".$entry,true);
}
if ($currentModified > $lastModified){
$lastModified = $currentModified;
}
}
if ($lastModified > $newest ){
$newest = $lastModified;
$newest_artist = $dirName."/".$entry;
}
}
$d->close();
return $lastModified;
}
mvh
Svein Hovlandsdal
> Koden fungerer helt som den skal, men får altså "PHP Notice: Undefined
> offset: 1 in... on line 6"
> Feilmeldingen kommer 2 ganger pr kjøring, og har vel sammenheng med at
> den finner "mappe1" og "undermappe1" som ikke inneholder "." og dermed
> ikke kan splittes i "$name" og "$ext".. tror jeg da... Men jeg finner
> ikke ut hvordan jeg kan "komme rundt" den! Noen forslag?
Det høres nesten ut som om du har satt loglevel bedre egnet for debugging
enn produksjon.
Sjekk "error_reporting" i php.ini.
--
Regards/mvh Joachim Mæland
If everything seems under control, you're just not going fast enough.
-Mario Andretti
> Det høres nesten ut som om du har satt loglevel bedre egnet for debugging
> enn produksjon.
>
> Sjekk "error_reporting" i php.ini.
Sorry, skulle jo ha sagt det - men det er debugging jeg driver med for
øyeblikket, prøver å få vekk flest mulige feil...
mvh
Svein
> Sorry, skulle jo ha sagt det - men det er debugging jeg driver med for
> øyeblikket, prøver å få vekk flest mulige feil...
;-)
Du kan sjekke innholdet i $entry, slik at du bare benytter split() når
denne ikke vil feile. Pass bare på at du ikke introduserer hull som
enkeltfiler kan ramle ned i. Vet f.eks. ikke hvor relevant det er med
filnavn på 1 karakter, uten extension, skjulte filer osv...
Dersom du fortløpende skriver innholdet av $entry, vil det være svært
enkelt å se nøyaktig hva som trigger "feil"-meldingen.
> Dersom du fortløpende skriver innholdet av $entry, vil det være svært
> enkelt å se nøyaktig hva som trigger "feil"-meldingen.
På en måte var det det jeg gjorde, og feilen var egentlig at den fant "." og
".." før jeg trodde den skulle finne dem! ( en liten glipp der!-)
Løsningen ble likevel en omskrivning av koden - som ble slik til slutt:
(hvis noen er intressert i den da..)
---------------------------------------------------------
function mostRecentModifiedFileTime($dirName, $doRecursive = true) {
global $newest, $newest_artist;
$d = dir($dirName);
$lastModified = 0;
$currentModified = 0;
while($entry = $d->read()) {
if ($entry == '.' || $entry == '..') {
continue;
}
if (!is_dir($dirName . '/' . $entry)) {
list($name, $ext) = split('\.', $entry, 2);
if ($ext == 'mp3') {
clearstatcache();
$currentModified = filemtime($dirName . '/' . $entry);
}
} else {
$currentModified = mostRecentModifiedFileTime($dirName . '/' . $entry);
}
$lastModified = max($lastModified, $currentModified);
if ($lastModified > $newest ){
$newest = $lastModified;
$newest_artist = $dirName."/".$entry;
}
}
$d->close();
return $lastModified;
}
mvh: Svein Hovlandsdal
"som dagene går" -> hovlandsdal.com