Autor Zpráva
Dano_V
Profil
Zdravým všetkých

Mám takú otázku, či je veľký rozdiel medzi jednotlivými verziami PHP skriptov? Mám jeden skript na počítanie čítanosti, alebo pozeranosti konkrétnej strany, ktorý mi vynikajúco fungoval na serveroch s verziami PHP 4 a 5, ale teraz som prešiel na server, kde je nainštalovaná verzia 7. A tu sa začali moje problémy. Počítadlo zadrháva. Po nakliknutí vypisuje mi takéto správy:
Warning: fread(): Length parameter must be greater than 0 in /www/doc/www.zzzz.sk/www/filmy/kucera/index.php on line 42 Po druhom a treťom kliknutí nabehne a napíše potrebné číslo. Vyzerá tak, že to číslo pripočíta, ale neukazuje, preto by som sa chcel opýtať, či by mi niekto z odborníkov vedel povedať, aké zmeny tam nastali, ako to treba upraviť. Ak by tam bolo treba previesť veľké zmeny, tak sa toho budem musieť vzdať. Keď to jeden deň preklikám, že to ide dobre, na druhý deň je natom tak isto, ako predošlý deň. Preto si myslím, že by tam nemala byť nejaká veľká chyba. Zistil som dodatočne, že počítanie funguje, iba pred tým, ako ukáže čísla vypíše toto chybové hlásenie. Keďže ale na čísla som mal vynechané iba úzke okienko, tak som čísla nevidel.
Samotný skript vyzerá takto:

<?php
////////////////////////   POČÍTADLO UNIKÁTNÝCH NÁVŠTĚVNÍKOV   ////////////////////
///////////////////////////// ZKONTROLUJ NOVÉ DÁTUM //////////////////////////////
$datum = "datum.dat";
$pocitadloDnes = "pocitadloDnes.dat";
$pocitadloVse = "pocitadloVse.dat";
$ipLog = "ipLog.dat";

if (!File_Exists ($datum)) {exit("Nedá sa nájsť Dátum.");}
if (!File_Exists ($pocitadloDnes)) {exit("Nedá sa nájsť  dnešné Počítadlo.");}
if (!File_Exists ($ipLog)) {exit("Nedá sa nájsť IP Log.");}

//////////////////////////// ZÍSKAJ DÁTUM POSLEDNEJ NÁVŠTEVY A DNEŠNÝ DÁTUM
$klika = fopen($datum, 'r');
if ($klika == false) {exit("Nedá sa otvoriť Dátum na vstup.");}
$stareDatum = fread($klika, filesize( $datum ));
fclose($klika);
$noveDatum = date("j/m/Y");

if ($noveDatum != $stareDatum) {resetujNovyDen ($noveDatum, $stareDatum, $datum, $pocitadloDnes, $ipLog);}
if (!stejnyNavstevnik($ipLog)) {
    inkrementujPocitadlo ($pocitadloVse);
    inkrementujPocitadlo ($pocitadloDnes);
}
$dnes = ziskejPocitadlo($pocitadloDnes);
$vse = ziskejPocitadlo($pocitadloVse);
?>
<div id="pod" style="display: block;float: right;  text-align: right; font: bold 16px 'Times New Roman'; color: #973Eff; padding-right: 15px;">
Počet návštevníkov:  <?php zobrazCifry ($vse); ?><br>
Z toho dnes:  <?php zobrazCifry ($dnes); ?></div>

<?php
/////////////////////////// JE TO TEN ISTÝ NÁVŠTEVNÍK? //////////////////////////////

function stejnyNavstevnik($ipLog) {

$newIP = getenv ("REMOTE_ADDR");
//////////// JE IP ADDRESA V SÚBORU?
$klika = fopen($ipLog, 'r');
if ($klika == false) {exit("Nedá sa otvoriť IP Log na vstup.");}
$data = fread($klika, filesize($ipLog));
fclose($klika);
$lines = explode ("\n", $data);
if (in_array ($newIP, $lines)) {return true;}

//////////// PRIDAJ IP ADRESU
$klika = fopen ($ipLog, 'a' );
if ($klika == false) {exit("Nedá sa otvoriť IP Log na rozšíreine.");}
fwrite ($klika, "$newIP\n");
fclose ($klika);
return false;
} // END FUNC


//////////////////////////// RESETUJ SÚBORY PRE NOVÝ DEŇ //////////////////////////
function resetujNovyDen ($noveDatum, $stareDatum, $datum, $pocitadloDnes, $ipLog) {

$klika = fopen($datum, 'w');
if ($klika == false) {exit("Nedá sa otvoriť Dátum na výstup.");}
fwrite ($klika, "$noveDatum" );
fclose($klika);

$klika = fopen($pocitadloDnes, 'w');
if ($klika == false) {exit("Nedá sa otvoriť Dnešný dátum na výstup.");}
fwrite ($klika, "0" );
fclose($klika);

$klika = fopen( $ipLog, 'w' );
if ($klika == false) {exit("Nedá sa otvoriť IP Log na výstup.");}
fwrite ($klika, "" );
fclose($klika);
} // END FUNC

///////////////////////////// INKREMENTUJ POČÍTADLO /////////////////////////
function inkrementujPocitadlo ($soubor) {
$klika = fopen( $soubor, 'r' );
if ($klika == false) {exit("Nedá sa otvoriť Počítadlo na vstup.");}
$data = fread($klika, filesize($soubor));
fclose($klika);
$data ++;
$klika = fopen($soubor, 'w');
if ($klika == false) {exit("Nedá sa otvoriť počítadlo na výstup.");}
fwrite ($klika, "$data" );
fclose($klika);
} //END FUNC


/////////////////////////// ZÍSKAJ POSLEDNÚ HODNOTU POČÍTADLA //////////////////////
function ziskejPocitadlo ($soubor) {
$klika = fopen($soubor, 'r');
if ($klika == false) {exit("Nedá sa otvoriť počítadlo na vstup.");}
$data = fread($klika, filesize($soubor));
fclose($klika);
return $data;
} //END FUNC

///////////////////////////////// ZOBRAZ POČÍTADLO //////////////////////////////////
function zobrazCifry ($pocitadlo) {
$cislo = $delka = strlen($pocitadlo);
while ($cislo >= 0) {
    $CHAR[$cislo] = substr($pocitadlo, $cislo,  1);
    $cislo--;
   }
$i = 0;
while ($i < $delka) {
    echo "<img src=".$CHAR[$i].".gif>";
    $i++;
}
} // END FUNC


?>
Davex
Profil
Dano_V:
Chyba tam byla odjakživa. Spíš to vypadá, že bylo dříve na webserveru vypnuté vypisování chyb.

Pro přečtení nebo zapsání souboru je jednodušší používat funkce file_get_contents a file_put_contents.

Přehled všech podstatných změn mezi verzemi se dá dohledat v dokumentaci PHP.
Dano_V
Profil
Vyzerá to tak, že asi zistím, ako sa dá to chybové hláseniem vypnúť, a bude problém vyriešený. Keď to funguje, tak to hlásenie nepotrebujem.

Teraz asi budem aj ja taký, akí sú naši lekáry. Keď nevedia vyliečiť príčinu bolestí, tak Vám dajú tabletky proti bolestiam. Bolesť ostáva, iba to necítite!-))

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0