1

PHP ei toimi Karviaisen päivityksen jälkeen

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 avatar
1.1k
Annttu
asked 2013-08-31 10:53:40 +0300
edit flag offensive 0 remove flag close merge delete

Comments

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.

jyrkipes's avatar jyrkipes (2014-02-27 16:04:00 +0300) edit

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

jyrkipes's avatar jyrkipes (2014-02-27 22:12:31 +0300) edit
add a comment see more comments

5 Answers

0

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/8971…

masipila's avatar
191
masipila
answered 2014-02-25 00:35:34 +0300
edit flag offensive 0 remove flag delete link

Comments

Näin näyttäisi olevan.

Annttu's avatar Annttu (2014-02-25 01:41:12 +0300) edit
add a comment see more comments
0

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.

Annttu's avatar
1.1k
Annttu
answered 2013-08-31 11:12:08 +0300
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments
0

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 curlingtest.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ä curlingtest.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ä

masipila's avatar
191
masipila
answered 2014-02-25 02:00:04 +0300
edit flag offensive 0 remove flag delete link

Comments

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.

Annttu's avatar Annttu (2014-02-25 02:24:42 +0300) edit

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.

masipila's avatar masipila (2014-02-25 09:38:40 +0300) edit

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.

masipila's avatar masipila (2014-02-25 09:42:18 +0300) edit
add a comment see more comments
0

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?

jyrkipes's avatar
31
jyrkipes
answered 2014-02-27 22:30:46 +0300, updated 2014-02-27 22:40:38 +0300
edit flag offensive 0 remove flag delete link

Comments

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?

jyrkipes's avatar jyrkipes (2014-02-27 22:48:02 +0300) edit

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?

jyrkipes's avatar jyrkipes (2014-02-28 00:06:02 +0300) edit
add a comment see more comments
0

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
Annttu's avatar
1.1k
Annttu
answered 2014-02-24 15:40:52 +0300
edit flag offensive 0 remove flag delete link

Comments

add a comment see more comments

Your Answer

Login/Signup to Answer