Na serwerze zainstalowane są równolegle dwie wersje PHP - wersja 5.2.x oraz 5.3.x. Wersja PHP 5.3.x jest wersją domyślną.
Obie wersje działają w trybie suPHP, czyli skrypty php wykonywane są pod daną nazwą użytkownika, który jest właścicielem skryptu, a nie tak jak dotychczas jako nobody czyli serwer www. Dzięki temu znika problem z własnościami plików i katalogów, poprawia to też nieco bezpieczeństwo plików serwera wirtualnego.
Kolejnym udogodnieniem związanym też pośrednio z bezpieczeństwem jest zasada nadawania uprawnień na pliki i katalogi. Dotychczas chcąc zapisać skryptem php plik w katalogu, zarówno plik do którego się zapisuje jak i katalog musiał mieć uprawnienia 777. Teraz dla katalogów będzie to zawsze maksimum 755, dla plików maksimum 644. Ustawienie uprawnienia 777 na pliku czy katalogu będzie powodowało błąd Internal Server Error.
Następnym udogodnieniem w PHP 5.3.x jest możliwość stosowania w poszczególnych katalogach własnych plików php.ini, także sami będziecie mogli kontrolować i konfigurować działanie php jeśli będzie taka potrzeba. Dotychczas takie zmiany wprowadzaliście flagą php do pliku .htaccess czyli było to np:
php_flag display_errors on
php_flag register_globals on
Obecnie korzystając z PHP 5.3.x wystarczy stworzyć plik php.ini w katalogu public_html lub dowolnym innym katalogu gdzie jest to potrzebne i w nim umieścić odpowiednie wpisy czyli w tym przypadku np:
display_errors = on
register_globals = on
W związku z powyższym musiały zniknąć wszelkie wpisy zaczynające się od php_flag… z plików .htaccess, także zostały one przez nas automatycznie zakomentowane. Wprowadzenie wpisu php_flag do pliku .htaccess spowoduje Internal Server Error.
Jeśli skrypty php przestały działać oznacza to, że nie są one w pełni zgodne z PHP 5.3.x. W tym przypadku zalecamy aktualizację skryptów, zmianę kodu tak, by był on aktualny z PHP 5.3.x - więcej informacji dotyczących zmian w PHP 5.3 w stosunku do PHP 5.2 znajdziecie tutaj: http://php.net/manual/pl/migration53.php - niestety w języku angielskim.
W ostateczności jest możliwość ustawienia wersji interpretera PHP 5.2.x dodając do pliku .htaccess w katalogu public_html linijkę:
AddType application/x-httpd-php52 .php
i od tej pory skrypty php wykonywane będą przez interpreter PHP 5.2.x
Jak to w życiu bywa - nie ma róży bez kolców. Przełączenie na interpreter PHP 5.2.x spowoduje, że nie będzie możliwości samodzielnego ustawiania własnych dyrektyw PHP jak w przypadku wyżej opisanego PHP 5.3.x. W interpreterze PHP 5.2.x pod kontrolą suPHP nie ma możliwości BEZPIECZNEGO udostępnienia możliwości dodawania dyrektyw PHP przez użytkowników.
W obu przypadkach czyli dla PHP 5.2.x i PHP 5.3.x dyrektywa safe_mode ustawiona jest off gdyż nie ma ona już większego znaczenia przy trybie suPHP, a pozostawienie jej na on utrudniałoby niepotrzebnie działanie skryptów.
Na zakończenie przypominamy, że PHP 5.2.x nie jest już rozwijane i łatane pod względem bezpieczeństwa, dlatego trzeba dostosować swoje skrypty do nowszej wersji by nie pozostawać w tyle. Za kilka miesięcy zapewne całkowicie porzucimy wsparcie dla php 5.2.x - w "produkcji" jest już PHP 5.4
Standardowo w przypadku jakichkolwiek problemów prosimy pisać na admin@webhostingsolutions.pl
Poniżej kilka przydatnych linków na temat dostosowania różnych starych "gotowców" do zgodności z PHP 5.3.x.
osCommerce:
http://addons.oscommerce.com/info/7394 - pliki do nadpisania na wersję osCommerce 2.2 RC2a
http://www.oscommerce.com/solutions/downloads - wersje kompatybilne z PHP 5.3
phpBB by przemo:
http://www.przemo.org/phpBB2/forum/viewtopic.php?t=118066 - instrukcja poprawy działania forum pod PHP 5.3
Joomla - błąd: Warning: Parameter 2 to frontpage() expected to be a reference, value given in ......... on line 100
http://maximilion.wordpress.com/2010/05/15/joomla-warning-parameter-2-to-frontpage/
Zen-Cart:
http://www.zen-cart.com/forum/showthread.php?t=140960
Jeśli otrzymujesz Internal Server Error lub wyświetla się biała strona sprawdź, czy w pliku .htaccess nie ma wpisów php_flag lub php_value. Błąd ten może też oznaczać błędy php - aby je wyświetlić utwórz plik o nazwie php.ini i umieść w nim linijkę:
display_errors = on
Wspomniane było to w przykładzie powyżej ale nie zaszkodzi przypomnieć ;)
Jeśli otrzymujesz błąd: FATAL ERROR: register_globals is disabled in php.ini, please enable it! stwórz plik php.ini z wpisem
register_globals = on
Oznacza to też, że masz zapewne starą, dawno nie uaktualnianą wersję skryptu osCommerce lub innego. Pomyśl nad aktualizacją - opcja register_globals = on to znaczne pogorszenie bezpieczeństwa Twojej strony.
Przy wszelkiej maści problemach wujek Google zawsze dopomoże ;P
http://www.google.pl