losowa fortunka pusta

0
        $dir="/usr/share/fortune/";
        $ile_plikow=0;
        $kat=opendir($dir);
        while($plik=readdir($kat)){
          if(is_file($dir."/".$plik) && strpos($plik,".dat")==false){
            $pliki[$ile_plikow]=$plik;
            $ile_plikow++;
          }
        }
        closedir($kat);
        $ktory=rand(0,$ile_plikow-1);
        $file=$pliki[$ktory];
        $plik=$dir."/".$file;

        $plik=explode('%',implode('',file($plik)));
        $max=count($plik);
        $los=rand(1,$max-1);
        $fortunka=$plik[$los];
        print(nl2br(htmlspecialchars($fortunka)));
        print("<br /><br />( ".$ktory."/".$ile_plikow."-".$file." | ".$los."/".$max." )");

Mam sobie taki kod jak powyżej (btw. nav mi go x lat temu skomponował), ma wylosowac plik a potem z tego pliku wylosowac fortunke. Co jakiś czas jednak nie pojawia się nic. Gdzie tu tkwi i jaki błąd? Poniżej budowa pliku z fortunkami, każda fortunka jest zakończona pojedynczym znakiem % w nowej linii:

Stirlitz szedł ulicami Berlina, coś jednak zdradzało w nim szpiega: może
czapka-uszanka, może walonki, a może ciągnący się za nim spadochron?
%
Stirlitz otrzymał telegram: "Jeśli nie zapłacicie za energię elektryczną,
wyłączymy wam radiostację".
%
- Stirlitz, co jest lepsze: radio czy gazeta? - zapytał podejrzliwie Müller.
- Gazeta, w radio nie zawiniesz śledzia - odparł spokojnie Stirlitz.
%
0

Zależy gdzie skrypt się wywala. Mówiąc "nie pojawia się nic" masz na myśli kompletne nic (biała strona), czy po prostu brak fortunki w miejscu gdzie powinna być? Debuguj skrypt, walnij:

var_dump($ktory);
var_dump($pliki[$ktory]);
var_dump($plik[$los]);

Na koniec działania skryptu. Jeśli gdzieś jest NULL, to znaczy że źle czytasz z tablicy. W teorii ciężko określić, co zawiniło.

0

brak fortunki. wypisuje wszelkie dane (plik, ktory z ilu, ktora z ilu) poza samym tekstem.

1

Na początku dokumentu wklej:

error_reporting(E_ALL);
ini_set('display_errors', 1);

Powinno pokazać coś więcej, gdzie odwołujesz się do złego indeksu.

0
Demonical Monk napisał(a)

error_reporting(E_ALL);

error_reporting(0xFFFF);

daje lepsze rezultaty

0

mi var_dump pomogł, ale imo to nie jest kod, ktorego nie można zinterpretowac w pamieci, jeśli sie pretenduje do znawcy php (a ja o sobie tego nie twierdze) :)
pisałem, że losowanie plliku jest ok, tylko czegoś nie wyświetla. a błąd jest w 2 ostatnich linijkach.

$plik=explode('%',implode('',file($plik)));
$max=count($plik);
$los=rand(1,$max-1);

implode/explde tworzy ostatni element pusty. count zwraca liczbe elementow + element pusty. zas tablice indeksuje sie od 0. wystarczy:

$los=rand(0,$max-2);
 

ale i tak dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1