« 1 2 »
Autor Zpráva
Lenkaa
Profil *
Ahoj,
ještě mám jeden dotaz, nevím jak je to moc složitý, ale potřebovala bych ze souboru vypsat pouze počet řádků který obsahujou určitý text.

čili..
soubor.txt
radek1-ahoj
radek2-nazdar
radek3-cau
radek4-dobryden
radek5-nazdar
radek6-cus

a ja potřebuji: zobraz číslo, kolik radků zobrazuje text "nazdar"

vysledek:
echo "v souboru.txt se vyskytuje slovo nazdar na na 2 radcich";

takto bych to nějak potřebovala ;)

opravdu nevim jak je to složitý, kdyby bylo potřeba, tak mužu poslat i nějakou fin. odmenu

strašně moc děkuji!
Hugo
Profil
Načti jednotlivé řádky souboru do pole. Potom to pole projdi a např. pomocí regularních výrazů kontroluj jestli hodnota aktuálního prvku pole odpovídá danému vzoru.
nightfish
Profil
$jmenoSouboru = "soubor.txt";

$hledaneSlovo = "nazdar";
$soubor = file($jmenoSouboru);
$pocet = 0;
foreach ($soubor as $value) {
if (strpos($value, $hledaneSlovo) !== false) $pocet++;
}
echo "v souboru $jmenoSouboru se vyskytuje slovo $hledaneSlovo na $pocet radcich";
Hugo
Profil
nightfish

Dej hladovému rybu a nasytíš ho jednou. Nauč ho ryby lovit a nasytíš ho napořád.
Lenkaa
Profil *
nightfish
děkuji, nějaky problém na serveru s pamětí, nebo u mě??
Allowed memory size of 12582912 bytes exhausted (tried to allocate 63024723 bytes)

Hugo
lovit jo, ale php? ;) to ee;)
Hugo
Profil
Lenkaa

Máš někde ve skriptu část, která žere moc paměti. Není ten načítaný soubor moc velký?
Lenkaa
Profil *
Hugo
má asi 20MB :(

co s tím?
Hugo
Profil
Lenkaa

Buď ho parsuj po částech, ale pak budeš muset vyřešit uvolňování paměti. Další možností je udělat to např. pomocí perlu, apod. ale to vyžaduje podporu na serveru.
Lenkaa
Profil *
Hugo
no to se vam řekne.. ;)
neumim napsat vypis natož ho nějak prasovat a už vubec ne vyřešit uvolnění pamětí.. jedině ža bych za chodu vytahla ramku :D

ne vážně, jestli to umite, tak si řekněte co za to.. sama to nezvladnu.
Hugo
Profil
Lenkaa

Já bych to řešil asi v perlu. U PHP uvolňování paměti moc nefunguje. Ale třeba tu někdo vymyslí něco rozumného.
nightfish
Profil
Lenkaa
zkuste tohle

$jmenoSouboru = "soubor.txt";

$hledaneSlovo = "nazdar";
$soubor = fopen($jmenoSouboru,"r");
$pocet = 0;
while (!feof($soubor)) {
$s = fgets($soubor);
if (strpos($s, $hledaneSlovo) !== false) $pocet++;
}
fclose($soubor);
echo "v souboru $jmenoSouboru se vyskytuje slovo $hledaneSlovo na $pocet radcich";
Lenkaa
Profil *
Hugo
a je to v Perlu složity?
nightfish
Profil
Lenkaa
a je to v Perlu složity?
nejspíš ani ne, nicméně bude to víceméně stejné jako to, co jsem napsat 10:49:36 v PHP (až na drobné odlišnosti syntaxe)
Hugo
Profil
Lenkaa

Otázka je, jestli ti to poběží na serveru.
Lenkaa
Profil *
nightfish
Lenkaa
zkuste tohle


:) tohle jede.. to je super!! Ale jak to nactu, když mam složku nad (nebo pod, nevim jak to nazvat) www??

proste struktura je:
otevru ftp a vidim slozky..

html
log
temp
backup

v adresari log mam ten soubor
v adresari html / www / script_od_vas.php

pujde to nějak, nebo jsem zase v prdčicích ;)

děkuji, že jste ne mě tak hodní.. ;)
nightfish
Profil
zkusil bych
$jmenoSouboru = "/log/soubor.txt";
EDIT: a nebo $jmenoSouboru = "../../log/soubor.txt";

pokud tam bude mít skript přístup, tak to projde, pokud ne, tak je problém
Lenkaa
Profil *
tak to pise tohle

Warning: fopen() [function.fopen]: open_basedir restriction in effect. File(../../access.log) is not within the allowed path(s): (/tmp:/home/webhosting/foo.foo/html/) in /home/webhosting/foo.foo/html/www/log.php on line 17

Warning: fopen(../../access.log) [function.fopen]: failed to open stream: Operation not permitted in /home/webhosting/foo.foo/html/www/log.php on line 17

Warning: feof(): supplied argument is not a valid stream resource in /home/webhosting/foo.foo/html/www/log.php on line 20

Warning: fgets(): supplied argument is not a valid stream resource in /home/webhosting/foo.foo/html/www/log.php on line 21

chapu to tak, ze tam script teda pristup nema?
nightfish
Profil
Lenkaa
ano, chápete to správně
krteczek
Profil
Lenkaa: ano script tam nemá přístup, skus se poradit se správcem hostingu jak by to šlo vyřešit (třeba ti povolí přístup), nebo navrhne jiné řešení
nightfish
Profil
řešením by mohlo být rozšíření open_basedir o adresář s logy
Lenkaa
Profil *
Tak jsem volala na webhosting..

do složky přistup neumožní a když jsem se he zaptala, jestli to teda muže dat do adresaře kam se dostane script, tak mi rekl, že to nejde..:(
přece pro Appache je jedno kam to vyplivne, složka jako složka nebo se pletu :(
ach jo..

Jinak všem strašně moc děkuji za Vaši ochotu a pomoc, děkuji mockrát! ;)
nightfish
Profil
Lenkaa
njn, takže zbývají 2 řešení

1) změnit hosting
2) vytvořit skript, který se připojí přes FTP na účet, stáhne dotyčný log a nahraje ho někam, kde k němu skript bude mít přístup (a nebo upravit skript tak, aby si byl schopen soubor otevřít přes FTP, ale to nevím do jaké míry je průchozí vzhledem k velikosti toho souboru
Hugo
Profil
do složky přistup neumožní a když jsem se he zaptala, jestli to teda muže dat do adresaře kam se dostane script, tak mi rekl, že to nejde..:(

Pokud je to freehosting tak mas asi smulu, ale pokud ho platis, tak se zkus pohadat. Presmerovat log apache je prace na minutu.
Lenkaa
Profil *
nevim ted přesně, ale platíme cca 3600kč včetně domeny-hostingu/rok

ja vim ze to neni moc.. ale at mi je nekdo dá? no ne?

přiklanim se k 1 možnosti.. otazka je kam.. mam pocit ze to je vsude stejne, neochota, arogance, nezajem.. zoufalost ;(

bude to v čr někdy lepší?? co myslíte;) asi ne, bohužel
krteczek
Profil
Lenkaa: skus www.onebit.cz hostuji tam se dvěma doménama již rok s jsem spokojený ;-)
Jinak kontaktovat je můžeš přes icq: 191086390
krteczek
Marek Kunc
Profil *
Dobrý den.
Chtěl jsem se zeptat p.nightfish
to co jste napsal jsem hledal taky hezky dlouho! Mohl by jste mi poradit, totalnímu začát. jak ten skript poopravit, aby se vypsalo hledane slovo "ahoj=100" a znova by se to prohledalo s hledanym slovem "ahoj=101" a zase "ahoj=102" atd až po 150? Byl by jste tak moc hodný? Nevím jestli mi poradíte, nejsem holka :-) Ty to mají vždycky lehčí, na něco se zeptaji a hned maji odpověď :-(

Vysledek by pak mel vypadat například
v souboru access.log se vyskytuje slovo ahoj=101 na 10 radcich
v souboru access.log se vyskytuje slovo ahoj=102 na 50 radcich
v souboru access.log se vyskytuje slovo ahoj=103 na 0 radcich
v souboru access.log se vyskytuje slovo ahoj=104 na 44 radcich
atd.

Taky předem strašně moc děkuji.
S pozdravem
Marek Kunc
nightfish
Profil
Marek Kunc
jde jen o to na vhodné místo doplnit cyklus

takže buď první možnost (náročná na paměť)

$jmenoSouboru = "soubor.txt";

$soubor = file($jmenoSouboru);
for ($i = 100; $i <=150; $i++) {
$hledaneSlovo = "ahoj=".$i;
$pocet = 0;
foreach ($soubor as $value) {
if (strpos($value, $hledaneSlovo) !== false) $pocet++;
}
echo "v souboru $jmenoSouboru se vyskytuje slovo $hledaneSlovo na $pocet radcich";
}


a nebo druhá možnost (velká režie při opakovaném procházení souboru)

$jmenoSouboru = "soubor.txt";

for ($i = 100; $i <= 150; $i++) {
$hledaneSlovo = "ahoj=".$i;
$soubor = fopen($jmenoSouboru,"r");
$pocet = 0;
while (!feof($soubor)) {
$s = fgets($soubor);
if (strpos($s, $hledaneSlovo) !== false) $pocet++;
}
fclose($soubor);
echo "v souboru $jmenoSouboru se vyskytuje slovo $hledaneSlovo na $pocet radcich";
}
Marek Kunc
Profil *
Ten prvni hlásí Allowed memory size of......
Ten druhý jede, ale nestihne to, hlásí Maximum execution time of 30 seconds exceeded.......

nešel by ten druhý prosím udělat tak, že by to proběhl a vypsal by jeden radek a začal zase znova a pod ten první radek by vypsal druhý řadek atd.. Pak by to stihl v pohodě. Co myslíte?

Děkuji
S pozdravem
Marek Kunc
nightfish
Profil
Marek Kunc
u toho druhého způsobu mě napadla ještě jedna možnost

$jmenoSouboru = "soubor.txt";

$pocet = array();
$hledanaSlova = array();
$soubor = fopen($jmenoSouboru,"r");

while (!feof($soubor)) {
$s = fgets($soubor);
for ($i = 100; $i <= 150; $i++) {
$hledaneSlovo = "ahoj=".$i;
$hledanaSlova[$i] = $hledaneSlovo;
if (strpos($s, $hledaneSlovo)) !== false) $pocet[$i]++;
}
}
fclose($soubor);
foreach ($pocet as $key => $value) {
echo "v souboru $jmenoSouboru se vyskytuje slovo ".$hledanaSlova[$key]." na ".$value." radcich";
}
Marek Kunc
Profil *
Tak jsem to hned zkusil.

Parse error: syntax error, unexpected T_IS_NOT_IDENTICAL .....on line 24

řádek 24
if (strpos($s, $hledaneSlovo)) !== false) $pocet[$i]++;

Děkuji
« 1 2 »
Toto téma je uzamčeno. Odpověď nelze zaslat.