Uutiset:

Ei uusia uutisia.

Main Menu

PHP-skriptiä pukkaa

Aloittaja meteorologi, maanantai, 12.05.2008, 19:01

« edellinen - seuraava »

0 Jäsenet ja 1 Vieras katselee tätä aihetta.

meteorologi

Kuten sanottua, olen tehnyt hiukan Php-skriptejä testailtavaksi. Ihan perusalkeita vain.
Nyt kuitenkin tuli mieleen suurempi projekti. Tarkoitus oli saada Php-skripti Heavyweather Puplisherin tilalle.

Tässä tämänhetkinen tulos:


<?php
$filename 
"currdat.lst";
$handle fopen($filename"r");
$contents fread($filename(array["23"]);
fclose($handle);
echo 
"$contents";
?>



Älkää naurako minun PHP-kielitaidoilleni! :'(
Vähin on otettu lainauksia Php.netin sivuilta tuohon koodiin.
Näitä skriptejä käyttää ainakin FinWx:in ylläpito. Kumarran hienosta skripistä! ;)

Tuon skriptin piti lukea currdat.lst -tiedoston eräs rivi, mutta ei tullut muuta kuin herjauksia ja varoituksia.

Voisiko Finwx:n Admin valottaa asiaa?

J.Jäntti

Lainaus käyttäjältä: Meteorologi - maanantai, 12.05.2008, 19:01
Kuten sanottua, olen tehnyt hiukan Php-skriptejä testailtavaksi. Ihan perusalkeita vain.
Nyt kuitenkin tuli mieleen suurempi projekti. Tarkoitus oli saada Php-skripti Heavyweather Puplisherin tilalle.

Tässä tämänhetkinen tulos:


<?php
$filename 
"currdat.lst";
$handle fopen($filename"r");
$contents fread($filename(array["23"]);
fclose($handle);
echo 
"$contents";
?>



Älkää naurako minun PHP-kielitaidoilleni! :'(
Vähin on otettu lainauksia Php.netin sivuilta tuohon koodiin.
Näitä skriptejä käyttää ainakin FinWx:in ylläpito. Kumarran hienosta skripistä! ;)

Tuon skriptin piti lukea currdat.lst -tiedoston eräs rivi, mutta ei tullut muuta kuin herjauksia ja varoituksia.

Voisiko Finwx:n Admin valottaa asiaa?

En usko, että täällä kukaan nauraa PHP-kielitaidoillesi. Voin myöntää, ettei minunkaan PHP-skriptauskykyni mitään kulmakarvoja nostattavaa ole, joten jos vain voin olla avuksi, pyrin auttamaan niin paljon, kuin vain mahdollista.

Heitän ihan sokkona ilmaan näin ensialkuun, jotta onko tuo php-skripti samassa hakemistossa currdat.lst:n kanssa? Tarkoitan tätä kohtaa koodista:


$filename = "currdat.lst";


Jos ei ole, niin skripti ei sitä tiedostoa löydä, ellet osoita tuohon tiedoston normipolkua, vähän tähän malliin:


$filename = "D:/hakemisto/jossa/filu/majailee/currdat.lst";


Huomaa "kautta"-merkkien suunta.

Toinen, joka kiinnitti huomioni on:


$contents = fread($filename(array["23"]);


fread-funktio ei tajua tuota (array["23"]); -kohtaa, koska sitä ei ole tehty lukemaan tiettyä kohtaa tiedostosta lainkaan, vaan vain pelkästään tiedoston alusta joko EOF (End of File)- merkkiin asti tai ensimmäiset 8 kilotavua (8192 tavua) tai ohjelmoijan erikseen määritellyn määrän.

Jotta tuo (array["23"]) toimisi, avatusta tiedostosta pitäisi saada tehtyä tuollainen array ensin, jotta sille voisi osoittaa luettavaa kohtaa. currdat.lst -tiedoston kyseessä ollen epäilen sen toimivuutta hieman.

Toistaiseksi omat skriptini pureskelevat tuota currdat.lst -tiedostoa niin, että kaikista currdat.lst:n riveistä luodaan array, poistetaan kaikki kirjaimet mutta jätetään numeroarvot ja sitten määritellään, minkänimisenä mikäkin arvo tunnistetaan, jotta ne voidaan ajaa html-koodiin.

Tämän lisäksi (array["23"]):ssa ei tarvita lainausmerkkejä. Oikeampi merkintätapa saattaisi olla jotain tässä muodossa:


($array[23]);


Käsitellään kuitenkin tätä skriptiä tässä vaiheessa askel askeleelta läpi niin ei mene nuppi sekaisin. :)
Aloitetaan tuosta tiedostopolkukysymyksestä. Eli: Onko currdat.lst -tiedosto samassa hakemistossa tuon PHP-skriptin kanssa?
Juha Jäntti
Foorumin ja sivuston ylläpitäjä
Finland Weather Exchange (FinWX)

http://www.finwx.net/
------------------------------------------
Ukkoskausi avattu Suomessa: --.--.2024
Ukkoskausi avattu Helsingissä: --.--.2024
-------------------------------------------
Ukkospäivälaskuri 2024; Helsinki/Viikinmäki
0 ukkospäivää.
------------------------------------------
X, FinWX:n ylläpidon ilmoitukset
------------------------------------------

meteorologi

Kyllä, skripti on samassa hakemistossa currdat.lst:n kanssa. Sen (jopa) älysin itsekin tuossa koodissa olevan tärkeä.

Sitten se piheliäs array-hommeli. Mitenköhän se sitten pitäisi hoitaa? $array -elementti jonnekin? ???

weatherc

Moro!

Poistaisin tuon fread:in kokonaan turhana ja pistäisin tilalle:

$contents = implode('', file($filename));
fclose($filename);

Tuohon implode-funktioon missä tuossa on '' niin väliin data-erotin joka on currdat.lst-filussa, esim. jos data on muodossa 12 23 432 niin '' tilalle tulee ' ' ja jos data muodossa 12|23|432 niin '|' jne.
tuloksena on $content-array josta voi poimia dataa esim $content[23].

Henkka

meteorologi

Lainaus käyttäjältä: weatherc - tiistai, 13.05.2008, 17:50

$contents = implode('', file($filename));
fclose($filename);


Tuohon implode-funktioon missä tuossa on '' niin väliin data-erotin joka on currdat.lst-filussa, esim. jos data on muodossa 12 23 432 niin '' tilalle tulee ' ' ja jos data muodossa 12|23|432 niin '|' jne.
tuloksena on $content-array josta voi poimia dataa esim $content[23].

Henkka

Enpä tiedä currdat.lst:n dataerottimesta, mutta tällainen se currdat.lst on:
[indoor_temperature]
deg_C = "21.0"
deg_F = "69.8"

[outdoor_temperature]
deg_C = "8.9"
deg_F = "48.0"

[indoor_humidity]
percent = "27.0"

[outdoor_humidity]
percent = "37.0"

[dewpoint]
deg_C = "-4.7"
deg_F = "23.5"


Tuossa on siis vain pätkä siitä. Nuo lainausmerkeissä olevat numerot päivittyvät 8 sekunnin välein.
=-merkkiä ennen oleva teksti (esim. deg_C = "-4.7") on kiinteä.

weatherc

Ok..
Kokeile tällaista:

$contents = implode('\n', file($filename));
print_r($contents);

ja kerro mitä se antaa ulos.
tuo print_r-komento on muuten kätevä juuri array-rakentelussa koska se antaa ulos arrayn rakenteen josta helppo löytää etsimäsi.
tuo \n tarkoittaa rivinvaihtoa (näkymätön).

Henkka

meteorologi

#6
Tässä kaksi eri testiä:

1.

PHP-skripti, ilman - echo "$contents"; tulostusskriptiä.
<?php
$filename 
"currdat.lst";
$contents implode('\n'file($filename));
print_r($contents);
?>



2. PHP-skripti, tulostusskriptin kanssa.
<?php
$filename 
"currdat.lst";
$contents implode('\n'file($filename));
print_r($contents);
echo 
"$contents";
?>



Täällä sitten tulokset:

Skripti 1. (PHP-skripti, ilman - echo "$contents"; tulostusskriptiä.)
[Poistin linkit, koska Php-skriptivyyhti selvisi jo. ;)]

Skripti 2. (PHP-skripti, tulostusskriptin kanssa.)
[Poistin linkit, koska Php-skriptivyyhti selvisi jo. ;)]


Nuo sivuilleni johtavat linkit ovat:

  • itseni kirjoittamia .txt-tiedostoja,
jotka
  • testipalvelin on suorittanut.



weatherc

#7
Ok, peruutan sen implode-systeemin, otin kopion sun currdat-filusta ja kokeilin vähäsen..

Tässä tulos:
<?php
$filename 
"currdat.lst";
    
$fp fopen($filename,"r");
    
$f_contentfread($fpfilesize($filename));
    
fclose($fp);
    
$fnotes explode("\n",$f_content);
print_r($fnotes);
echo 
'<br/><br/>';
$testi $fnotes[29];  // Otetaan no 29 arraysta joka on ulkolämpötila celsiusasteissa
$testi substr($testi8, -2);  // Poimitaan ulos pelkkä data => deg_C ="2.1" ottaen huomioon että molemmissa päissä tyhjä väli                                                        
echo "<b>Ulkolämpötila:</b> $testi";
?>


Tuon print_r-toiminnon voi poistaa kun ei enää tarvi mutta rakennus-vaiheessa erittän kätevä jotta saa selville jokaisen datan numeron array:ssa.

Henkka

meteorologi

#8
SE TOIMII VIHDOINKIN! ;D
Kunhan vähän vielä testailen, saan kerrottua enemmän.

Lämpimät kiitokset weatherc:lle ja J.Jäntille, jotka auttoivat miestä mäessä!

Pieni korjaus kuitenkin, kohdassa $testi = substr($testi, 8, -2); pitäisi olla kai, että
$testi = substr($testi, 9, -2); .
Tulee ilman turhaa yhtä "-merkkiä.

weatherc

Hieno juttu!  ;D

Juu, tuota
$testi = substr($testi, 9, -2);
kannattaa pitää vähän silmällä ja tehdä tarvittavia säätöjä ja tarvittaessa lisätä pätkä:
$testi = str_replace('"', '', $testi);
jolloin se poistaa "-merkin, huomaa että nuo merkit ovat(' " ', ' '... noin väljennetyssä muodossa.

Nuo arrayt ovat ihan käteviä vempimia kun oppii miten ne toimii, ne ovat erittäin hyödyllisiä. Omalla sivullani on paljon niitä käytössä eri takoituksiin. php on siitä hyvä kieli että sillä melkein rajattomat mahdollisuudet mitä sillä voi tehdä..

Henkka