Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kokoaminen

Sivun loppuun

masiaro [11.08.2011 18:31:42]

#

Moi,

miten voin tehdä taulukon HTML:llä alla olevasta kokoajan muuttuvasta tiedostosta, kuitenkin vain 69-bussi. Eli miten saan koodin poimimaan vain ne 69-bussit ja tehdä taulukon HTMLllä?

kello-bussi-päätepysäkki----

8589|Malmin asema tulo|Kirkonkyläntie|Helsinki
1829|77A|Siltamäki|1077A 2
1832|76A|Malmi|1076A 1
1835|69|Elielinaukio|1069 2
1838|70T|Suutarila|1070T 1
1849|77A|Siltamäki|1077A 2
1852|76A|Malmi|1076A 1
1855|69|Elielinaukio|1069 2
1858|70T|Suutarila|1070T 1
1909|77A|Siltamäki|1077A 2
1912|76A|Malmi|1076A 1
1915|69|Elielinaukio|1069 2
1919|70T|Suutarila|1070T 1
1929|77A|Siltamäki|1077A 2
1932|76A|Malmi|1076A 1
1935|69|Elielinaukio|1069 2
1940|70T|Suutarila|1070T 1
1949|77A|Siltamäki|1077A 2
1951|76A|Malmi|1076A 1
1955|69|Elielinaukio|1069 2
2002|70T|Suutarila|1070T 1

Metabolix [11.08.2011 18:44:46]

#

Lue tiedosto file-funktiolla, käy rivit läpi foreach-silmukalla, katkaise riviltä eri osat explode-funktiolla ja tarkista, että toinen osa on 69.

qeijo [11.08.2011 18:48:19]

#

<?php

//Testaamaton

$rivit = file('bussit.txt');
$t = "";

foreach ($rivit as $rivi)  {
    $e = explode("|", $rivi);
    if($e[1] == "69") {
        $t .= '<tr><td>' . implode("</td><td>", $e) . '</td></tr>';
    }
}

if(!empty($t)) {
    print '<table border="1">
            ' . $t . '
            </table>';
}
?>

Ei kovin kaunis..

masiaro [11.08.2011 18:53:08]

#

Kiitoksia!

Miten sitten saan tuon koodin toimimaan kun lähdetiedosto on eri palvelimella?

qeijo [11.08.2011 18:54:25]

#

masiaro kirjoitti:

Kiitoksia!

Miten sitten saan tuon koodin toimimaan kun lähdetiedosto on eri palvelimella?

$rivit = file('http://jossainmuualla.fi/bussit.txt');

masiaro [11.08.2011 18:58:31]

#

Ei noin toiminut, joutuuko siitä ettei toisella palvelimella olevalla tiedostolla ole mitään päätettä osoitteessa?

http://api.reittiopas.fi/public-ytv/fi/api/?stop=1382127&user=user&pass=pass­&time=

qeijo [11.08.2011 19:06:25]

#

masiaro kirjoitti:

Ei noin toiminut, joutuuko siitä ettei toisella palvelimella olevalla tiedostolla ole mitään päätettä osoitteessa?

Onko kyse tiedostosta vai dynaamisesti luodusta sisällöstä?

Metabolix [11.08.2011 19:09:14]

#

Laita virheilmoitukset käyttöön, niin saatat saada lisätietoa:

ini_set("display_errors", 1);
ini_set("error_reporting", E_ALL | E_STRICT);

qeijo kirjoitti:

Onko kyse tiedostosta vai dynaamisesti luodusta sisällöstä?

Mitä väliä sillä muka on?

masiaro [11.08.2011 19:11:46]

#

Kyse on siis dynaamisesti luodusta sisällöstä.

Herjaa nämä


Warning: file() [function.file]: URL file-access is disabled in the server configuration in /var/www/customers/viparofi/public_html/testi.php on line 7

Warning: file(http://api.reittiopas.fi/public-ytv/fi/api/?stop=1382127&user=xxx&pass=xxx) [function.file]: failed to open stream: no suitable wrapper could be found in /var/www/customers/viparofi/public_html/testi.php on line 7

Warning: Invalid argument supplied for foreach() in /var/www/customers/viparofi/public_html/testi.php on line 10

Cornix [11.08.2011 19:15:26]

#

Web-hotellissasi on siis estetty tiedostojen lataaminen toisesta URL:sta. Jos palvelin olisi omasi, voisit muuttaa PHP:n asetuksia, mutta tuosta hakemiston nimessä olevasta "customers"-sanasta päättelisin, että asia ei ole näin.

Ei siis onnistu ilman asetusten vaihtoa.

Metabolix [11.08.2011 19:18:38]

#

Palvelimesi asetuksista on estetty tiedostojen haku netistä. Paras vaihtoehto olisi säätää palvelimen asetuksia; luultavasti nyt täytyisi siis asettaa PHP:n asetuksista (tiedostosta php.ini) asetuksen "allow_url_fopen" arvoksi "On". Jos kyseessä on webhotelli, voit varmaankin kääntyä asiassa ylläpidon puoleen. Toinen mahdollisuus on hakea tiedosto netistä jotenkin paljon mutkikkaammin, esimerkiksi cURL-kirjastolla tai socketeilla.

The Alchemist [11.08.2011 22:19:38]

#

Ihan pakko oli vielä tehdä lyhyempi versio tästä.

<?php
$data = file_get_contents('bussit.txt');
preg_match_all('/^\d{4}\|69\|.+$/m', $data, $matches);

print "<table>\n";

foreach ($matches[0] as $row)
	printf("<tr><td>%s</td></tr>\n", implode('</td><td>', explode('|', $row)));

print "</table>\n";
?>

Metabolix [11.08.2011 22:42:58]

#

Ihan pakko oli tehdä vielä lyhyempi:

<?php echo "<table>\n", implode(str_replace("|", "</td><td>", preg_filter('/^[^|]*\\|69\\|.*/', '<tr><td>$0</td></tr>', file("bussit.txt")))), "</table>\n";

Tai välivaiheiden kera:

<?php
$f = file("bussit.txt");
$f = preg_filter('/^[^|]*\\|69\\|.*/', '<tr><td>$0</td></tr>', $f);
$f = str_replace("|", "</td><td>", $f);
echo "<table>\n", implode($f), "</table>\n";

qeijo [12.08.2011 17:39:55]

#

Metabolix kirjoitti:

Mitä väliä sillä muka on?

Esimerkiksi jos tieto luodaan/esitetään js:llä niin file():hän ei sitä tuo..

LaNu [13.08.2011 18:15:24]

#

qeijo kirjoitti:

Metabolix kirjoitti:

Mitä väliä sillä muka on?

Esimerkiksi jos tieto luodaan/esitetään js:llä niin file():hän ei sitä tuo..

Et sinä tuota kysynyt. Ja vaikka käytettäisiin vbscriptiä, niin ei silläkään olisi mitään väliä. Näkeehän sen nyt jo korvalla tuosta avausviestistä, ettei sinun kysymykset olleet millään tavalla relevantteja.


masiaro: Jos URL File Access on kielletty, kannattaa tarkastaa onko CURL:n disablointi unohtunut ;-)

Tuossa on esimerkkiä, jolla varmaan saat selville onko CURL sallittu: https://www.php.net/manual/en/function.curl-exec.php

qeijo [14.08.2011 17:19:52]

#

LaNu kirjoitti:

Et sinä tuota kysynyt. Ja vaikka käytettäisiin vbscriptiä, niin ei silläkään olisi mitään väliä.

En ymmärrä.. Missä vaiheessa vbscript liittyi keskusteluun?

LaNu kirjoitti:

Näkeehän sen nyt jo korvalla tuosta avausviestistä, ettei sinun kysymykset olleet millään tavalla relevantteja.

:(

Asia vain kuitenkin on niin että.. Jos sivustoon haetaan osa, esim div:iin sisältöä ajax pyynnöillä. Niin yllä mainittu ratkaisu ei toimisi. Siksi kysyin, siksi relevantti.

Metabolix [14.08.2011 17:29:21]

#

"Dynaaminen sisältö" tarkoittaa paljon muutakin kuin JS-kikkailuja. Esimerkiksi PHP:llä tuotetaan "dynaamista sisältöä", koska sisältöä ei ole suoraan kirjoitettu sivun lähdekoodiin.

JS-kikkailu toki estäisi näin yksinkertaisen lähestymistavan, mutta millä todennäköisyydellä joku käyttäisi JS:ää noin ruman tekstisisällön tuottamiseen, ja mitä ihmettä JS-kikkare tekisi HSL:n reittioppaan kehittäjärajapinnassa, josta selvästikin on tarkoitus hakea dataa koneellisesti?

qeijo [15.08.2011 10:31:17]

#

Metabolix kirjoitti:

"Dynaaminen sisältö" tarkoittaa paljon muutakin kuin JS-kikkailuja. Esimerkiksi PHP:llä tuotetaan "dynaamista sisältöä", koska sisältöä ei ole suoraan kirjoitettu sivun lähdekoodiin.

Daa.

Metabolix kirjoitti:

JS-kikkailu toki estäisi näin yksinkertaisen lähestymistavan..

Pointtini.

Metabolix kirjoitti:

.. mutta millä todennäköisyydellä joku käyttäisi JS:ää noin ruman tekstisisällön tuottamiseen, ja mitä ihmettä JS-kikkare tekisi HSL:n reittioppaan kehittäjärajapinnassa, josta selvästikin on tarkoitus hakea dataa koneellisesti?

Aivan totta. <3


Sivun alkuun

Vastaus

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

Tietoa sivustosta