Różnice w zachowaniu PHP na klastrze

Komunikat o błędzie - 500 Internal Server Error (Serwer napotkał błąd wewnętrzny i nie był w stanie wykonać żądania. Strona jest źle skonfigurowana lub wystąpił błąd w skrypcie CGI.

Komunikat ten najczęściej jest spowodowany przez niewłaściwe wpisy w pliku .htaccess. Może to być spowodowane błędem składni lub wykorzystaniem zabronionej dyrektywy. W dyrektywach są dozwolone tylko: Indexes, Limit, Fileinfo, Authconfig.

Mod_rewrite

W nowym środowisku nie jest możliwe zastosowanie następujących reguły przepisywania adresów:
(.*) index.php/something
- należy użyć następującej konstrukcji:
(.*) index.php?/something.

Premature end of script headers: index.php

Ten komunikat jest w 99% przypadków spowodowany przez niewłaściwe uprawnienia wykonywanego skryptu.

Poprawne uprawnienia dla skryptów PHP to 755. Jeżeli umieszczasz skrypty przez FTP, uprawnienia będą ustawione prawidłowo. Problemy mogą pojawić się podczas instalacji wtyczek do CMS Joomla, Drupal i innych. Podczas instalacji uprawnienia są ustawiane nieprawidłowo, więc skrypt nie będzie działał.

 Można to skorygować poprzez FTP poleceniem chmod, lub w PHP funkcją chmod().

Joomla - warstwa FTP

Ponieważ serwer FTP działa na innym komputerze niż serwer www, nie ma możliwości korzystania z warstwy ftp.

QuickCart

Jeśli nie ma możliwości dodawania/edycji przedmiotów, konieczne jest wyłączenie w ustawieniach "Wyświetl pliki na serwerze w formularzu".


Niedziałająca tablica zmiennych HTTP_*_VARS

Rejestracja tych zmiennych jest domyślnie wyłączona. Jeśli Twoja aplikacja ich wymaga, można się z nami skontaktować w celu zmiany konfiguracji. Jednak mocno zalecamy nie korzystanie z tych zmiennych na korzyść zmiennych $_*. Tym bardziej iż w PHP 6 planowane jest całkowite usunięcie HTTP_*_VARS.


Autoryzacja HTTP

Ponieważ PHP jest uruchamiany jako FCGI, należy dodać do skryptów php, które używają autoryzacji HTTP następujące wiersze:

 if ($_SERVER["HTTP_AUTHORIZATION"] != "") {
   $ha = base64_decode( substr($_SERVER["HTTP_AUTHORIZATION"],6) );
   list($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"]) = explode(":", $ha);
   unset($ha);
 }


Ponadto konieczne jest dodanie następujących linii do htaccess.:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

Szczegóły można znaleźć w  podręczniku PHP.

Add Feedback