Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: AJAX: responsen rivinvaihto

Sivun loppuun

B_R_H [23.07.2009 16:42:21]

#

Tästä jutusta tuli mieleeni, että olisi kiva tietää perussyy miksi
https://www.ohjelmointiputka.net/keskustelu/19452-javascript-trim

Kyse on siitä, kun ajax-kutsulla käynnistetään palvelimella php-scripti, joka kaikessa monimutkaisuudessaan alla

<?php
$muuttuja='Tämä on paluuteksti';
echo $muuttuja;
?>

Tätä kun tarkistelee palvelimen päässä vaikka tiedostoon kirjoittamalla, on se oikeassa muodossa eli

fwrite($fp, "*".$muuttuja."*".PHP_EOL);

Tulostuu tiedostoon *Tämä on paluuteksti* eli se mitä pitäisi.

Kun selaimen päässä tarkistaa vaikka alertilla saman asian, on Responsetext muodossa
*
Tämä on paluuteksti*
eli eteen on tullut ylimääräinen rivinvaihto.

Mistä tuo tuohon tulee ja miksi?

jlaire [23.07.2009 16:49:51]

#

Onkohan tiedostossa rivinvaihto ennen <?php-tagia? Jos on, ota se pois.

Chiman [23.07.2009 16:57:44]

#

Tai onko tiedosto tallennettu utf-8 BOM -muodossa? Hyvät editorit osaavat tallentaa tiedoston myös ilman BOM:ia (kaksi ylimääräistä tavua tiedoston alussa).

http://en.wikipedia.org/wiki/Byte-order_mark

B_R_H [23.07.2009 17:19:55]

#

Funktio:
Ei kyllä tiedoston ekat merkit on <?php ei ennen sitä mitään.

Chiman:
Mistähän tuon löytäisi, kun käytän linuxilla jediä tai millä tuon voisi helpoiten tarkistaa?

Edit: katsoin tiedostoa hexdumpilla ja alku näyttä olevan sen mitä pitää eli
0000000 3f3c 6870 0a70

Grez [23.07.2009 18:57:58]

#

Vika ei välttämättä ole niissä pätkissä koodia, jotka olet tähän ketjuun kirjoittanut. Ehkä voisit laittaa ne loputkin asiaan vaikuttavat koodit näkyville, niin voisi olla helpompi selvittää vikaa.

B_R_H [24.07.2009 11:31:24]

#

Noniin,

Grezin vinkkaamana ajoin virhettä nurkkaa ja tässä se mikä tuon lisärivin aiheuttaa. Vika ei toisaankaan ole tuossa vaan jossakin muualla.

Tämä yhdistelmä siis aiheuttaa eteen rivinvaihdon:

<?php
// koodissa require kantayhteydelle
require('../kantayhteys.inc');
$lista ='c';
echo $lista;

$fp=fopen("/tmp/testi.txt", "a");
fwrite($fp,"**".$lista."**".PHP_EOL);
fclose($fp);
?>

<?php
// kantayhteys.inc
$db = pg_connect("dbname=tietokanta user=kayttaja password=xxxxxx");
if (!$db) {
    echo "Ei loytynyt tietokantaa!";
    exit;
}
?>

Jos nuo koodit liitetään samaan php-tiedostoon, ongelmaa ei ole eli:

<?php
// kantayhteys.inc
$db = pg_connect("dbname=tietokanta user=kayttaja password=xxxxxx");
if (!$db) {
    echo "Ei loytynyt tietokantaa!";
    exit;
}
$lista ='c';
echo $lista;

$fp=fopen("/tmp/testi.txt", "a");
fwrite($fp,"**".$lista."**".PHP_EOL);
fclose($fp);
?>

ja vielä kun tämän ajamista testasin suoraan päätteen ikkunan php listaa.php, niin siinä toimii aivan samoin!

Ongelma on siis siinä, että requirella haettu osuus aiheuttaa rivinvaihdon - miksi?

Mod. korjasi kooditagit PHP:ksi

Metabolix [24.07.2009 11:36:19]

#

Koska includella liitetyn tiedoston lopussa on sulkutagin jälkeen ylimääräinen rivinvaihto, jonka PHP tulostaa sivulle. Ratkaisu: ota sulkutagi ?> pois.

B_R_H [24.07.2009 11:51:04]

#

Kiitos taas - on hienoa, että löytyy osaamista ja tietoa.

Ilmeisesti tarkoitat, että kantayhteys.inc olisi näin?

<?php
// kantayhteys.inc
$db = pg_connect("dbname=tietokanta user=kayttaja password=xxxxxx");
if (!$db) {
    echo "Ei loytynyt tietokantaa!";
    exit;
}

Onko tästä jokin haitta tai vaikutus muualle, kun tätä käytetään ehkä sadassa eri paikassa? Millainen on sitten tuon requiren/includen tiedoston oikea formaatti, kun kaikissa esimerkeissä näyttää alkavan <?php ja loppuvan ?>

B_R_H [24.07.2009 14:08:24]

#

Vielä tähän samaan:
Jos vaihdan tuon requiren toiseen

<?php
require('../virhetaso.inc');
$lista ='c';
echo $lista;

$fp=fopen("/tmp/testi.txt", "a");
fwrite($fp,"**".$lista."**".PHP_EOL);
fclose($fp);
?>

<?
// virhetaso.inc
error_reporting(8);
?>

Niin tuota rivinvaihtoa ei tule?!

Metabolix [24.07.2009 14:19:33]

#

?> kertoo PHP-tulkille, että tästä eteenpäin tiedosto on suoraan tulostettavaa (HTML:ää) seuraavaan <?php-tagiin asti. Tagin jättäminen pois ei siis haittaa mitään, koska tiedoston lopun ei kuulukaan sisältää mitään tulostettavaa. Muita vaikutuksia tällä ei ole.

Ehkä tuon toisen tiedostosi lopussa taas ei ole lainkaan ylimääräistä rivinvaihtoa. Voit tarkistaa asian taas hexdumpilla.

B_R_H [24.07.2009 15:02:09]

#

Hitto!
Kyllä käy kateeksi, kun joku tietää mitä etsitään.

Hexdumppihan sen kertoi. Tuon kantapalikan > perässä oli tabulaattori ja sen kun poisti, niin homma selvisi. Johan lakkasi extrarivinvaihdotkin häiritsemästä.

Kiitos taas!


Sivun alkuun

Vastaus

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

Tietoa sivustosta