Autor Zpráva
Michal Švarc
Profil *
Mám přibližně takovýto kód
Zápis

$SouborB = fopen($NazevSouboruB, 'a');//otevři soubor
fwrite($SouborB, $cisloIP."\n");//zapiš
fclose($SouborB);//zavři

Výpis

$fileB = file($NazevSouboruB);//otevři soubor, a načti do pole
$linesB = count($fileB);//spočti řádky
//********Hledej stejnou IP v souboru dat************
for ($radekB=0; $radekB<=($linesB); $radekB++)//u všech rádků porovnej s momentální IP
{
if (($cisloIP)==$fileB[$radekB])
{
...
}
}

Potíž spočívá ve skutečnosti (zjištěno po mnoha pokusech), že porovnání
if (($cisloIP)==$fileB[$radekB])
se vyhodnotí správně pouze za předpokladu: a) u všech možností platí
!=
; b) platí rovnost pouze pokud se porovnávaný řetězec (v tomto případě IP adresa) nachází na posledním řádku; z toho vyvozuji že zapsáním
fwrite($SouborB, $cisloIP."\n");
a následným načtením
$fileB = file($NazevSouboruB);
se do jednotlivých položek pole
$fileB
zapíše i konec řádku. A tím se dostávám k otázce jak ho mohu v testu
if (($cisloIP)==$fileB[$radekB])
interpretovat? Zkoušel jsem
if (($cisloIP."\n")==$fileB[$radekB])
a to nefunguje. Díky za případnou [url=mailto:mimikiki@atlas.cz]radu[/url].
krteczek
Profil
pokud máš na každém řádku vždy jen jednu ip adresu bude jednodužší použít file();

$ip=file($NazevSouboru);

for($i=0;$i<count($ip);$i++)
{
echo $ip[$i]."<br>";
}

prostě file automaticky vytvoří z jednotlivých řádků položky pole $ip
krteczek
Michal Švarc
Profil *
Nerad to říkám, ale tohle v tom kódu mám (viz víše). Potíž je v tom že to (ten obsah souboru), chci porovnat s IP adresou ze které se někdo připojí. Zjistím jeho adresu, dokážu ji i zapsat do toho souboru, ale nejde mi porovnat, zda už v tom souboru byla předtím (to mi bere akorát když ta adresa byla zapsaná jako poslední).
krteczek
Profil
to byl jen jiný(lepší přístup k datům v souboru.
předpokládám že soubor má takovou podobu:
soubor data.txt

127.0.0.111
22.22.22.222
12.10.80.11
127.0.0.1
127.0.0.2
127.0.0.3
127.0.0.4
127.0.0.7

v tom případě k němu pro kontrolu obsahu přistoupím pomocí file();

$ip_aktualni=$_SERVER['REMOTE_ADDR'];
$ip_soubor=file("data.txt");
for($i=0;$i<count($ip_soubor);$i++)
{
if($ip_soubor[$i]!='')
{
if($ip_soubor[$i]==$ip_aktualni)
{
echo "<br><strong>adresy jsou shodné: aktualni ip: ".$ip_aktualni." = ". $ip_soubor[$i].' na řádku č.:'. $i+1.'</strong>';
}
else
{
echo "<br>adresy nejsou shodné: aktualni ip: ".$ip_aktualni." = ". $ip_soubor[$i].' na řádku č.:'. $i+1;
}
}
}

Tady máš komplet porovnání řádek po řádku.
za syntax chyby neručím, nezkoušel jsem to, ale logicky by to mělo byt ok
krteczek
Michal Švarc
Profil *
možná se ti to bude zdát divné ale, mám to podobně, a prostě mi to funguje špatně. Když si ty adresy vypíšu, nevydím rozdíl. Ale skript v tom rozdíl vydí a podmínka podobná té tvé
if($ip_soubor[$i]==$ip_aktualni)
mi funguje pouze pro
if($ip_soubor[count($ip_soubor)]==$ip_aktualni)
.
Tady mám plný kód já už vážně nevím.
Zdrojový kód
Toto téma je uzamčeno. Odpověď nelze zaslat.