Mitä tehdä, kun aikaisemmin toiminut sivusto ei Karviaisen päivityksen jälkeen toimikkaan? Sivusto antaa vain virheen

500 Internal server error

~/sites/domain.tld/log/error.log tiedostossa on paljon seuraavanlaisia rivejä:

(104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
Premature end of script headers: php5.fcgi
Annttu's gravatar image Annttu kysyi
31.08.2013 klo 07:53
3041314, hyväksyttyjä vastauksia: 42%

Myös täällä oli tuo "Premature end of..." ja poistui poistamalla "magic_quotes". Tämän(kään) jälkeen ei kaikki toimi. Normi php näyttää jo vastaavan mutta drupal oksentaa näin: " mod_fcgid: stderr: PHP Fatal error: Class 'PDO' not found in..."

Liittynee tuohon sunnuntain päivitykseen jotenkin.

(27.02.2014 klo 14:04) jyrkipes

..ja esim tuon uploadprogressin asennushan ei toiminut ilman roottia? Muistelen aikoinani pyytäneen ja siten sen asennetuksi saaneen.

(27.02.2014 klo 20:12) jyrkipes

Karviaisen päivityksen myötä PHP:n versio on muuttunut versiosta 5.3.3 versioon 5.4.4. Samalla osa ennen PHP:ssä olleista asetuksista on poistettu.

php.ini

Jos sivustollasi on ollut oma php.ini, tulee vastaavat muutokset tehdä myös sinne. Käytössä olevan php.ini-tiedoston löydät katsomalla ~/sites/domain.tld/www/php5.fcgi tiedostosta joko ympäristömuuttuja PHPRC:n arvo tai php5-cgi:n parametri -c tai --php-ini

php.ini muutokset

Php.ini-tiedostosta tulee kommentoida seuraavat rivit lisäämällä ;-merkki niiden eteen:

magic_quotes_gpc
allow_call_time_pass_reference

.htaccess

Mikäli php5.fcgi tiedostossa ei ole määritetty php.iniä, kannattaa vielä tarkistaa, ettei näitä asetuksia ole myöskään asetettu missään sivuston .htaccess tiedostossa.

ikilinkki
Annttu's gravatar image Annttu vastasi
31.08.2013 klo 08:12
3041314, hyväksyttyjä vastauksia: 42%

PHP versio 5.4:ssä on poistunut kokonaan käytöstä myös mahdollisuus käyttää pass-by-referenceä. Tästä johtuen sivustot joiden PHP-koodissa on käytössä pass-by-referenceä ei toimi enää ollenkaan, vaan tuloksena on tyhjä sivu ja virhe 500.

Pass-by-referencen tunnistaa ohjelmakoodista &$muuttuja muotoisista muuttujan käytöstä esimerkiksi funktiokutsuissa.

Saat sivuston takaisin käyttöön poistamalla kaikkien tämmöisien muuttujien edestä &-merkin. Suositeltavaa on tämän jälkeen myös päivittää sovellus uusimpan versioon.

funktio(&$muttuja); # ei toimi!
funktio($muuttuja); # toimii
ikilinkki
Annttu's gravatar image Annttu vastasi
24.02.2014 klo 13:40
3041314, hyväksyttyjä vastauksia: 42%

Annttu, pass-by-reference ei ole poistunut PHP:stä kokonaan, vaan ainoastaan ns. call-time pass by reference jossa funktion kutsumisen yhteydessä yritetään antaa parameteri pass-by-referenssinä näin: funktio(&$muuttuja); Tämä ei siis toimi PHP 5.4:n kanssa.

On edelleen täysin mahdollista sanoa funktion määrittelyvaiheessa, että jokin funktion parametreistä pitää käsitellä aina pass-by-referenssinä.

http://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available

ikilinkki
masipila's gravatar image masipila vastasi
24.02.2014 klo 22:35
513, hyväksyttyjä vastauksia: 0%

Näin näyttäisi olevan.

(24.02.2014 klo 23:41) Annttu ♦♦

Löytyisikö vinkkiä mistä etsiä vikaa tähän internal server erroriin / Premature end of script headers -ongelmaan?

Tilanne on minulla seuraava: - dev.curling.fi pyörii Drupal 7:lla ja tällä saitilla tämä ongelma esiintyy - www.curling.fi pyörii Drupal 6:lla ja tällä saitilla ongelmaa ei esiinny

Error.logiin tulee siis juurikin tällaista tavaraa: [Mon Feb 24 23:51:30 2014] [warn] [client xx.xxx.xxx.xxx] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server [Mon Feb 24 23:51:30 2014] [error] [client xx.xxx.xxx.xxx] Premature end of script headers: php5.fcgi

Tämä ei kuitenkaan vaikuttaisi olevan kaikkia Drupal 7 saitteja koskeva ongelma Kapsin ympäristössä. Asensin curling_test.curling.fi:hin puhtaan Drupal 7 -asennuksen. Ainut muutos jonka tein tähän vanilla-asennukseen oli se, että kommentoin pois "pakasta vedetyn" asennuksen .htaccess -tiedostosta Options +FollowSymLinks -asetuksen, koska Kapsilla käytetään FollowSymLinksIfOwnerMatch -asetusta. Lopputulos oli sikäli onnellinen, että curling_test.curling.fi toimii OK.

Vertasin dev.curling.fi:n (Drupal 7) ja pakasta vedetyn curling_test.curling.fi:n (Drupal 7) .htaccess -tiedostoja ja ainut ero näissä on dev.curling.fi -sivuston IP-pohjainen pääsyrajaus.

  • Vika ei siis kaiketi ole dev.curling.fi:n .htaccess -asetuksissa.
  • dev.curling.fi:ssä ei ole käytössä myöskään .user.ini -tiedostoa
  • Yritin tsekkailla myös dev.curling.fi:n sites/default/settings.php -tiedostoa (dev-saittion upgradettu drupalin versiosta 6 joten se eroaa hivenen pakasta vedetyn version 7 sisällöstä) mutta en tullut hullua hurksaammaksi, vika ei vaikuttaisi löytyvän sieltäkään...

Tämä on voi hyvin todennäköisesti olla joku vain dev.curling.fi:tä koskettava ongelmatilanne, mutta kirjoitin tämän silti tänne julkisen ukk.kapsi.fi:n puolelle suoran ylläpitotiketin sijaan siltä varalta, että joku muu Kapsin käyttäjä painii samantyyppisen ongelman parissa... Onko mitään ideoita mistä vikaa voisi seuraavaksi etsiä?

Cheers, Markus Sipilä

ikilinkki
masipila's gravatar image masipila vastasi
25.02.2014 klo 00:00
513, hyväksyttyjä vastauksia: 0%
1

Hyvä lähtökohta on kirjautua Kirsikka-palvelimelle, siirtyä www-sivuston kansioon ja ajaa esim. php5-cgi index.php komento. Näin saat kaikki PHP:n antamat virheilmoitukset näkyviin.

Mikäli php5.fcgi tiedostossa on jotain muuta kuin #!/usr/bin/php5-cgi, käytä php5-cgi:n tilalla #!-jälkeistä osaa. Esim jos php5.fcgi tiedostossa olisi rivi "#!/usr/bin/php5-cgi -c .php.ini", aja komento /usr/bin/php5-cgi -c .php.ini index.php

Mikäli tämäkään ei anna minkäänmoista järkevää virhettä voi vielä kokeilla ajaa komento lisäämällä alkuun strace -f komento tai pyydä apua ylläpidolta.

(25.02.2014 klo 00:24) Annttu ♦♦

Kiitos Annttu! Vika löytyi tällä tempulla saman tien! Tämä vinkki voisi muuten olla hyvä idea lisätä myös sivulle http://www.kapsi.fi/ohjeet/php.html, jossa on listattuna muutama yleinen PHP-ongelma.

(25.02.2014 klo 07:38) masipila

Ja mainittakoon vielä sen verran (edelleen jos joku muu painii vastaavien ongelmien kanssa), että tässä minun tapauksessani oli kyse virheestä omassa koodissani (call time pass by reference). Hämmennystä aiheutti se, että error.logiin ei tullut tästä kertovaa virheilmoitusta (kuten tuotantosaitillani tuli), vaan ainoastaan tuo ei-mitään-kertova Premature end of script headers.

(25.02.2014 klo 07:42) masipila

Hmmm, sekoilin termien vastaus/kommentti -kanssa. Pahoittelut

Kirjauduin karviselle ja hetken haahuilun jälkeen näyttäisi että modulit ei ole yhteensopivia ja/tai niitä ei ole.: jyrkipes@kirsikka:~/sites/jyge.fi/www$ php5-cgi -c php.ini -v PHP Warning: PHP Startup: uploadprogress: Unable to initialize module Module compiled with module API=20090626 PHP compiled with module API=20100525 These options need to match in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/pdo.so' - /usr/lib/php5/20090626/pdo.so: cannot open shared object file: No such file or directory in ... jne

Tärkein lienee että puuttuvat modulit löytyivät kun korjasin php.ini:n

extension_dir = "/usr/lib/php5/20100525/"

Nyt asetus osoittaa siis sinne missä tuon sunnuntaina päivitetyn php:n modulit nykyään ovat.

Vielä pitäis keksiä minne tai se uploadprogress piti asentaa?

muokattu 27.02.2014 klo 20:40
ikilinkki
jyrkipes's gravatar image jyrkipes vastasi
27.02.2014 klo 20:30
111, hyväksyttyjä vastauksia: 0%

eli uploadprogress pitäisi (http://www.kapsi.fi/ohjeet/php-pear.html) voida asentaa antamalla loitsu: pear install pecl/uploadprogress tuo vain antaa lopuksi virheen:Installing '/usr/lib/php5/20100525/uploadprogress.so' ERROR: failed to write /usr/lib/php5/20100525/uploadprogress.so (copy(/usr/lib/php5/20100525/uploadprogress.so): failed to open stream: Permission denied)

Miten tuo asennetaan ilman roottia?

(27.02.2014 klo 20:48) jyrkipes

ok, ylläolevan epäonnistumisen jälkeen menin ~/pear/download -hakemistoon. kopioin tgz-tiedoston ~/test/ -hakemistoon. annoin siellä loitsut phpize, ./configure, make, make test ja make install. Viimeinen failaa mutta ./modules -hakemistosta löytyi .so-tiedosto jonka kopioin ~test/ -hakemistoon. Sitten asetin php.ini:n extension=/home/users/myuser/test/module.so ja boom done, toimii. Toki tuo ei ole oikea ja ylläpidon tarkoittama tapa asentaa moduleja, eihän?

(27.02.2014 klo 22:06) jyrkipes

Sinun vastauksesi

näytä/piilota esikatselu

Tarkkaile kysymystä

Sähköpostitse:

Kirjautumisen jälkeen voit tilata tähän kysymykseen jätetyt uudet vastaukset ja kommentit omaan sähköpostiisi.

RSS-lukijan kautta:

Pelkät vastaukset

Vastaukset ja kommentit

Markdown-perusteet

  • *kursiivi* tai _kursiivi_
  • **lihavointi** tai __lihavointi__
  • linkki:[teksti](http://url.com/ "otsikko")
  • kuva?![alt teksti](/path/img.jpg "otsikko")
  • numeroitu luettelo: 1. Foo 2. Bar
  • Lisätäksesi rivinvaihdon kirjoita kaksi välilyöntiä rivin loppuun.
  • Tavallisemmat HTML-tagit toimivat myös.

Kysymyksen avainsanat:

×14
×5
×1

kysytty: 31.08.2013 klo 07:53

katsottu: 2,678 kertaa

päivitetty: 27.02.2014 klo 22:06