Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: fwrite-ongelma

Sivun loppuun

peg [08.02.2008 10:30:03]

#

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);
?>

tsuriga [08.02.2008 11:03:45]

#

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.

Olga [08.02.2008 12:41:07]

#

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.

peg [08.02.2008 13:21:16]

#

Joo mutta ei auttanut ja kyllä kaikkea oon kokeillut. ihme homma.

tsuriga [08.02.2008 13:32:41]

#

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ä.

Moiman [08.02.2008 15:37:06]

#

$lisaa = $pvm $rat;

Eikös tuossa pitäisi olla piste

   $lisaa = $pvm . $rat;

peg [08.02.2008 17:12:04]

#

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

TsaTsaTsaa [08.02.2008 18:13:53]

#

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);
?>

peg [08.02.2008 18:23:21]

#

Loistavaa, pelittää, tosin tuon appendin vaihdoin takaisin w, koska tarkoitus on hävittää nuo vanhat.
SUURET KIITOKSET !!!

tsuriga [08.02.2008 22:20:56]

#

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.

peg [09.02.2008 00:24:38]

#

Sekoaa jos tuon seiskan muuttaa kympiksi, tiedoston koko kasvaa noin 350000 tavuun, näin tuntuu pelaavan paremmin.

tsuriga [09.02.2008 09:03:49]

#

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;

?>

peg [09.02.2008 11:54:07]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta