Virhe laskua tulostettaessa

Started by Morfiini, 17.02.12 - klo:09:43

Previous topic - Next topic

Morfiini

Moi,
Asensin VLlaskusta version 1.4.3 ja saan nyt seuraavan virheen laskua tulostettaessa:

"TCPDF ERROR: Some data has already been output, can't send PDF file"

Itse asiassa sama virhe on tullut myös aikaisempien versioiden kanssa, mutta se on yleensä korjaantunut XAMPP:n APACHE:n uudelleenkäynnistyksellä. PHP memory-limit-asetus on 128M.

Olisiko muilla ollut samanlaista virhettä, ja siihen ratkaisua?

Morfiini

Vielä lisäys edelliseen, että lähetettäessä lasku ohjelmasta sähköpostin liitetiedostona, se onnistuu ihan normaalisti. Sen sijaan kaikki mitä yrittää tulostaa laskulta pdf:nä näytölle, ne epäonnistuvat ja tulee tuo sama virheilmoitus kuin yllä.

Ere Maijala

Tuo tarkoittaa, että selaimelle on lähetetty jotain ennen PDF:n valmistumista, jolloin PDF:ää ei enää pystytä lähettämään. Tuliko ennen virheilmoitusta mitään muuta näytölle?

--Ere

Morfiini

Ei tule mitään muuta näytölle ennen virheilmoitusta. Jos on jotain logifilejä mitä voisin ottaa liittyen tähän, niin voin kopioida niitä lähempään tarkasteluun.


Morfiini

Lisätietoa vielä threadiin, että asensin tuon version 1.4.3 uudella tietokannalla ilman vanhojen tietojen tuontia versioon, eli ns. puhtaalta pöydältä. Asensin vielä varmuuden ja testauksen vuoksi aikaisemman käyttämäni version vllaskusta (1.3.3) ja tässä PDF:n tulostus toimii normaalisti samalla koneella.

Ere Maijala

Tuleeko PHP:n virhelokiin mitään? Jos on Windows-XAMPP:sta kyse, niin oletuksena lienee C:\xampp\php\logs\php_error_log. Onko mitään PHP:n asetuksia rukattu oletuksista? Mulla on yksi XAMPP-testiasennus, jossa en saa virhettä toistettua.

--Ere

Morfiini

Tuohon virhelokiin ei tule mitään, ja tuo antamasi polku on virhelokin oletuksena. Olen rukannut sähköpostiasetuksia php.ini:stä seuraavasti,muuta ei oletusasetuksille ole tehty (paitsi ne mitä oli asennusohjeissa):  

PHP.INI
[mail function]
sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t"
mail.add_x_header = Off
mail.log = "C:\xampp\php\logs\php_mail.log"

Ere Maijala

Voisit tietty kokeilla poistaa tuon tarkistuksen käytöstä ja katsoa, mitä siitä seuraa. Sillä voisi saada vinkkiä siitä, mistä tuo johtuu. Eli muokkaa tcpdf\tcpdf.php:n riviä 8395 ja kommentoi se vaikka pois käytöstä parilla kauttaviivalla tähän tapaan:


if (ob_get_contents()) {
//$this->Error('Some data has already been output, can\'t send PDF file');
}


--Ere

Morfiini

Kommentoin tuon rivin pois ja tämä ohjeesi auttoi asiaan, eli nyt alkoi toimimaan! Ja PHP:n virheloki pysyy tyhjänä.

Drupal-maailmasta löysin yhden threadin, josta saattaisi olla apua (lopusta kohdat #16-#21) tämän ongelman syihin (koodin tallentaminen ANSI UTF:n sijasta ja ylimääräiset välilyönnit koodissa).

http://drupal.org/node/283950

Ere Maijala

Voisitko kokeilla vielä vaihtaa tuon yllämainitun rivin tällaiseksi:


$this->Error('Some data has already been output, can\'t send PDF file, contents: ' . ob_get_contents() . '.');


Ja jos ei sillä tule mitään näkyviin, niin vielä tällä:


$this->Error('Some data has already been output, can\'t send PDF file, contents: ' . bin2hex(ob_get_contents() . '.');


Haluaisin saada kiinni sen, mitä tuolla output bufferissa on, niin voisi ainakin varmistaa oikean korjauksen.

--Ere

Ere Maijala

Hoplaa, jälkimmäisestä puuttui yksi sulku, eli näin:


$this->Error('Some data has already been output, can\'t send PDF file, contents: ' . bin2hex(ob_get_contents()) . '.');

Morfiini

Ensimmäisellä koodinpätkällä vastaus oli seuraava:
"TCPDF ERROR: Some data has already been output, can't send PDF file, contents: ."

Toisella koodinpätkällä vastaus oli seuraava:
"TCPDF ERROR: Some data has already been output, can't send PDF file, contents: efbbbf."

Ere Maijala

Hmm. Johonkin tiedostoon on jotenkin eksynyt alkuun BOM (byte order marker, UTF-8 -tiedostossa juurikin tuo EF BB BF. Oletko muokannut mitään muuta kuin config.php-tiedostoa? Jos siinä olisi BOM, niin sen pitäisi näkyä muuallakin ongelmina ja varoituksina, joten epäilisin sen olevan jossain toisessa tiedostossa. Paketissa olevissa tiedostoissa noita ei pitäisi olla.

--Ere

Morfiini

Muita tiedostoja en ole muokannut. Mutta arvaas mitä: nyt tein uudelleen "config.php.sample"-tiedostosta uuden "config.php":n ja tämä alkoi toimimaan eli nyt ne kehvelin pdf:t aukeavat. Siis tässä kopioinnissa näyttäisi aikaisemmin käyneen jokin käpy, en vaan keksi että mikä mutta varmaankin syy on käyttäjässä. Editoreina olen käyttänyt Wordpadia ja Notepad++:a. No, joka tapauksessa nyt taas pelittää.

Ere Maijala

No hyvä, että selvisi, vaikka edelleen hämmentää, miten tuo ei aiheuttanut muita ongelmia. Vähintään PHP:n virhelokissa olisi pitänyt näkyä vaikka mitä varoituksia headereista ym. Joka tapauksessa kiitos kärsivällisyydestä selvittelyn suhteen. Tästä voi olla jollekin toisellekin joskus hyötyä.