Script til at hente tilfældig fil fejler - nogle gange.

Tags:    php

Hej Udviklere!

Jeg har et script, som gerne skulle åbne en angivet sti, læse indholdet af mappen og returnere indholdet af en tilfædlig fil. Det virker også fint, bortset fra, at jeg modtager disse fejl - men kun en gang i mellem:

Warning: include(/home/www/example.com/tekst) [function.include]: failed to open stream: No such file or directory in /home/www/example.com/index.php on line 14

Warning: include() [function.include]: Failed opening '/home/www/example.com/tekst/..' for inclusion (include_path='.:/usr/local/php53//lib/php') in /home/www/example.com/index.php on line 14

Jeg er ikke den største haj til PHP endnu, så er ikke sikker på hvad disse fejl betyder.

Mit script ser ud som følger. Hvad kan være galt? Det er som om at den får valgt nogle filer, der ikke eksisterer.

<?php
$path = '/home/www/example.com/tekst/';
$handle = opendir ($path);
while (($filename = readdir ($handle)) != false)
{
if ($filename != '.' && $filename != '..');
{
$file_array[] = $filename;
}
}

$rand = rand (0, count ($file_array));
include ($path . $file_array[$rand]);
?>

Håber at der sidder en ørn derude, der kan hjælpe mig i mål.





Indlæg senest redigeret d. 10.03.2011 02:42 af Bruger #16468
9 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Fold kodeboks ind/udKode 


Prøv lige med sådan en fætter der. Den udskriver alle de muligheder der ligger i file_array. Det ligner umiddelbart du har en tom streng deri.



if ($filename != '.' && $filename != '..'); - fjern semikolon ( ; ) fra slutningen af linjen.

Jeg kan forklare dig hvorfor og hvorledes, men det ved du sikkert godt selv - du har sikkert bare overset det.



Hej Mads,

Mange tak for svar - og godt spottet. Den var lige smuttet.

Men scriptet fejler stadigvæk ind i mellem med følgende:

Warning: include(/home/www/example.com/tekst) [function.include]: failed to open stream: No such file or directory in /home/www/example.com/index.php on line 13

Warning: include() [function.include]: Failed opening '/home/www/example.com/tekst/' for inclusion (include_path='.:/usr/local/php53//lib/php') in /home/www/example.com/index.php on line 13

Jeg forstår det bare ikke. Har jeg overset andet?

Tak for hjælpen!
Anders



Igen tak for svar og din tid!

Følgende returneres når jeg kører nu:

Filnavn er ".."
Filnavn er "tekst1.txt"
Filnavn er "tekst2.txt"
Filnavn er "."
Filnavn er "tekst3.txt"

Warning: include(/home/www/example.com/tekst) [function.include]: failed to open stream: No such file or directory in /home/www/example.com/index.php on line 16

Warning: include() [function.include]: Failed opening '/home/www/example.com/tekst/.' for inclusion (include_path='.:/usr/local/php53//lib/php') in /home/www/example.com/index.php on line 16



Jeg synes ikke at jeg kan se den tomme streng. Men "failed opening"-fejlen returneres enten som:

Failed opening '/home/www/example.com/tekst/.' - 1 x punktum
Failed opening '/home/www/example.com/tekst/..' - 2 x punktum
Failed opening '/home/www/example.com/tekst/' - 0 x punktum

Jeg kan bare ikke se hvor det opstår.



Lad mig lige se din fulde kode igen så, så finder vi lige ud af hvorfor '.' og '..' stadig kommer med. Udover det så kommer den tomme streng med fordi du prøver at tilgå $file_array[count($file_array)] som er en for stor, så vi laver $rand = rand (0, count ($file_array)); om til $rand = rand (0, count ($file_array)-1);



Den ser således ud - med din ændring:

Fold kodeboks ind/udKode 


Og umiddelbart virker det nu. Jeg kan ikke umiddelbart få den til at fejle, men du må meget gerne tjekke efter om der skulle være en fejl.




Det ser også rigtigt ud. Og hvis det virker, er det jo godt. :) Det er jo lidt hovedsagen



Ja, for pokker! :) Tusind tak for hjælpen! Den ændring havde jeg ikke spottet selv.



t