valittaa: supplied argument is not a valid stream resource in
file_put_contents:lla toimii, mutta se vaatii php5 ja tää pitäisi
toimia php4.3x
<?php $vanha = date("Y.m.d", time() - 5*24*60*60); $viestit = file("laskuri.txt"); for ($i = 0; $i < count($viestit); $i++) { $viestit[$i]; $tiedot = explode("-", $viestit[$i], 1); $pvm = $tiedot[0]; $rat = $tiedot[1]; if ($pvm > $vanha) // echo "$pvm $rat <br>"; $tiedosto = fopen("testi.txt", "w"); $lisaa = $pvm $rat; fwrite($tiedosto, $lisaa); } fclose($tiedosto); ?>
Kehota päivittämään. Tietysti jos on vuodeksi maksettu etiäpäin niin hankala vaihtaa, mutta ehkä ne jos tarpeeks valittaa reikäsestä servusta. error_reporting(E_ALL) niin näet mikä mättää fopenissa. Syntaksivirhettä tuolla ainakin näyttäis pukkaavan tossa $lisaa
.
Nyt ku oot kommentoinu tuon yhden rivin tuolta pois, tuo $tiedosto -alkuinen rivi jää tuon if-lauseen vaikutusalueelle ja jos if palauttaa falsen, tuo $tiedosto-muuttuja ei saa koskaan arvoa.
Joo mutta ei auttanut ja kyllä kaikkea oon kokeillut. ihme homma.
Väitteesi on kovin rohkea. En aukoisi ja sulkisi tiedostoa aina jokaisella silmukan kierroksella, vaan vasta for-loopin ulkopuolella. Ja tosiaan nykyiselläänhän tuo ylikirjoittaa jokaisella kierroksella edelliset lisäykset kun avaat tiedoston write-tilaan appendin sijaan. Ja kun komennat tosiaan koodissa error_reporting(E_ALL);
ja ini_set( 'display_errors', 'On' );
niin saat virheet näkyviin. var_dump( $tiedosto );
taasen näyttää muuttujan sisällön, noita kun viljelet eri kohtaan koodia niin johan pitäisi ongelman löytyä.
$lisaa = $pvm $rat;
Eikös tuossa pitäisi olla piste
$lisaa = $pvm . $rat;
Joo jos joku taistella tän kanssa niin alla on koodi ja data.
<?php $vanha = date("Y.m.d", time() - 7*24*60*60); $viestit = file("laskuri.txt"); for ($i = 0; $i < count($viestit); $i++) { $viestit[$i]; $tiedot = explode(" - ", $viestit[$i],2); $pvm = $tiedot[0]; $rat = $tiedot[1]; if ($pvm > $vanha) $lisaa = "$pvm $rat <br>"; echo $lisaa; // tähän asti toimii } $tiedosto = fopen("testi.txt", "w"); fwrite($tiedosto, $lisaa); fclose($tiedosto); echo $lisaa; ?>
ja dataa:
2008.02.03 13.24.22 - 84.50.38.121 - 84-50-38-121-dsl.krw.estpak.ee - http://.. - PA
2008.02.03 13.27.51 - 84.50.38.121 - 84-50-38-121-dsl.krw.estpak.ee - http://.. - BIO
2008.02.04 19.04.19 - 83.102.80.190 - 83-102-80-190.lpok.fn.fi - - ka
2008.02.06 08.45.19 - 157.200.12.200 - aa1810.finnair.fi - - Ma - Su
2008.02.07 08.37.39 - 88.112.169.174 - a88-112-169-174.elisa-laajakaista.fi - - ve
Oisko näin?
<?php $vanha = date("Y.m.d", time() - 7*24*60*60); $viestit = file("laskuri.txt"); $tiedosto = fopen("testi.txt", "a"); // APPEND for ($i = 0; $i < count($viestit); $i++) { $viestit[$i]; $tiedot = explode(" - ", $viestit[$i],2); $pvm = $tiedot[0]; $rat = $tiedot[1]; if ($pvm > $vanha) { $lisaa = "$pvm $rat <br>\n"; echo $lisaa; fwrite($tiedosto, $lisaa); } // Ilmeisesti nämä asiat piti olla iffissä??? } fclose($tiedosto); ?>
Loistavaa, pelittää, tosin tuon appendin vaihdoin takaisin w, koska tarkoitus on hävittää nuo vanhat.
SUURET KIITOKSET !!!
Ei sitä tiedostoa kannata pitää varattuna koko loopin ajan, vaan kokoaa tarvittavan datan möykyksi ja kirjoittaa sen möykyn sinne tiedostoon silmukan jälkeen - kyse kun tuskin on erikoisen isosta tiedostosta.
Sekoaa jos tuon seiskan muuttaa kympiksi, tiedoston koko kasvaa noin 350000 tavuun, näin tuntuu pelaavan paremmin.
Sehän vain tarkoittaa, että tahdot poistaa yli kymmenen päivää vanhat viestit? Itse tarkoitin jotain tällaista:
<?php $vanha = time() - ( 7 * 24 * 60 * 60 ); $viestit = file( 'laskuri.txt' ); $lisaa = ''; foreach( $viestit as $viesti ): list( $pvm, $rat ) = explode( ' - ', $viesti ); list( $vuosi, $kuu, $paiva ) = explode( '.', $pvm ); $pvmAikaleima = mktime( 0, 0, 0, $kuu, $paiva, $vuosi ); if ( $pvmAikaleima > $vanha ): $lisaa .= "{$pvm} - {$rat} <br />\n"; endif; endforeach; if ( $lisaa !== '' ): $tiedosto = fopen( 'testi.txt', "w" ); fwrite( $tiedosto, $lisaa ); fclose( $tiedosto ); endif; ?>
Toi seitsemän päivää säätelee sitä kuinka suureksi laskuri.txt kasvaa.
Eli laskuri.txt ylikirjoitetaan testi.txt:n sisällöllä lopullisessa versiossa.
Mutta hyvältä näyttää laittamasi esimerkki, täytyy sitäkin testailla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.