Joomla Templates and Joomla Extensions by JoomlaVision.Com

osCommerce - polska strona wsparcia

Naszą witrynę przegląda teraz 44 gości 

Get Adobe Flash Player

Artykuły w etykiet: błąd

Błąd "Fatal error: Call to a member function add_current_page() on a non-object in /sklep/includes/application_top.php" zdarza się dosyć często w sklepach osCommerce i jest o tyle uciążliwy, że nie zniknie do momentu wygaśnięcia sesji lub zamknięcia i ponownego uruchomienia przeglądarki. Poniżej prezentujemy rozwiązanie problemu.

W pliku includes/application_top.php odszukaj kod:

testKod: php
  1. if (tep_session_is_registered('navigation')) {
  2. if (PHP_VERSION < 4) {
  3. $broken_navigation = $navigation;
  4. $navigation = new navigationHistory;
  5. $navigation->unserialize($broken_navigation);
  6. }
  7. } else {
  8. tep_session_register('navigation');
  9. $navigation = new navigationHistory;
  10. }
  11. $navigation->add_current_page();

i zamień go na:

testKod: php
  1. if (tep_session_is_registered('navigation')) {
  2. if (PHP_VERSION < 4) {
  3. $broken_navigation = $navigation;
  4. $navigation = new navigationHistory;
  5. $navigation->unserialize($broken_navigation);
  6. }
  7. } else {
  8. tep_session_register('navigation');
  9. $navigation = new navigationHistory;
  10. }
  11. if(!is_object($navigation)){
  12. $navigation = new navigationHistory;
  13. }
  14. $navigation->add_current_page();

Dodatkowe informacje

  • Wersja skepu osCommerce Merchant rc2.2, Proffesional 1.0.3
  • Dostępne wersje językowe Polska, Angielska
Opublikowane w Tips & tricks
czwartek, 13 października 2011 10:06

Aktualizacja sklepu osCommerce pod PHP5

W związku z zaprzestaniem wspierania wersji PHP4, wiele providerów aktualizuje parser php do wersji PHP5. Dla wielu użytkowników sklepów oscommerce oznacza to błędy w działaniu sklepu.

Jeśli w Twoim sklepie pojawia się którykolwiek z wymienionych poniżej błędów, należy zaktualizować sklep zgodnie z instrukcją zamieszczoną w tej poradzie.

Błąd #1:
w sklepie lub panelu administracyjnym pojawia się tekst:
FATAL ERROR: register_globals is disabled in php.ini, please enable it!

Rozwiązanie:
W pliku admin/includes/application_top.php odszukujemy kod:

testKod: php
  1. if (function_exists('ini_get')) {
  2. ini_get('register_globals') or exit('FATAL ERROR: register_globals is disabled in php.ini, please enable it!');
  3. }

I zamieniamy go na:

testKod: php
  1. if (function_exists('ini_get') && (ini_get('register_globals') == false) && (PHP_VERSION < 4.3) ) {
  2. exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory. Please use PHP 4.3+ if register_globals cannot be enabled on the server.');
  3. }

Następnie odszukaj kod:

testKod: php
  1. $SID = (defined('SID') ? SID : '');

i dodaj przed nim:

testKod: php
  1. if ( ($session_started == true) && (PHP_VERSION >= 4.3) && function_exists('ini_get') && (ini_get('register_globals') == false) ) {
  2. extract($_SESSION, EXTR_OVERWRITE+EXTR_REFS);
  3. }

W pliku includes/functions/sessions.php przed kodem:

testKod: php
  1. if (STORE_SESSIONS == 'mysql') {

dodajemy:

testKod: php
  1. if ( (PHP_VERSION >= 4.3) && ((bool)ini_get('register_globals') == false) ) {
  2. @ini_set('session.bug_compat_42', 1);
  3. @ini_set('session.bug_compat_warn', 0);
  4. }

Funkcje:

testKod: php
  1. function tep_session_start() {
  2. return session_start();
  3. }
  4.  
  5. function tep_session_register($variable) {
  6. global $session_started;
  7.  
  8. if ($session_started == true) {
  9. return session_register($variable);
  10. } else {
  11. return false;
  12. }
  13. }
  14.  
  15. function tep_session_is_registered($variable) {
  16. return session_is_registered($variable);
  17. }
  18.  
  19. function tep_session_unregister($variable) {
  20. return session_unregister($variable);
  21. }

zamieniamy na:

testKod: php
  1. function tep_session_start() {
  2. global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS;
  3.  
  4. $sane_session_id = true;
  5.  
  6. if (isset($HTTP_GET_VARS[tep_session_name()])) {
  7. if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_GET_VARS[tep_session_name()]) == false) {
  8. unset($HTTP_GET_VARS[tep_session_name()]);
  9.  
  10. $sane_session_id = false;
  11. }
  12. } elseif (isset($HTTP_POST_VARS[tep_session_name()])) {
  13. if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_POST_VARS[tep_session_name()]) == false) {
  14. unset($HTTP_POST_VARS[tep_session_name()]);
  15.  
  16. $sane_session_id = false;
  17. }
  18. } elseif (isset($HTTP_COOKIE_VARS[tep_session_name()])) {
  19. if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_COOKIE_VARS[tep_session_name()]) == false) {
  20. $session_data = session_get_cookie_params();
  21.  
  22. setcookie(tep_session_name(), '', time()-42000, $session_data['path'], $session_data['domain']);
  23.  
  24. $sane_session_id = false;
  25. }
  26. }
  27.  
  28. if ($sane_session_id == false) {
  29. tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));
  30. }
  31.  
  32. return session_start();
  33. }
  34.  
  35. function tep_session_register($variable) {
  36. global $session_started;
  37.  
  38. if ($session_started == true) {
  39. if (PHP_VERSION < 4.3) {
  40. return session_register($variable);
  41. } else {
  42. if (isset($GLOBALS[$variable])) {
  43. $_SESSION[$variable] =& $GLOBALS[$variable];
  44. } else {
  45. $_SESSION[$variable] = null;
  46. }
  47. }
  48. }
  49.  
  50. return false;
  51. }
  52.  
  53. function tep_session_is_registered($variable) {
  54. if (PHP_VERSION < 4.3) {
  55. return session_is_registered($variable);
  56. } else {
  57. return isset($_SESSION) && array_key_exists($variable, $_SESSION);
  58. }
  59. }
  60.  
  61. function tep_session_unregister($variable) {
  62. if (PHP_VERSION < 4.3) {
  63. return session_unregister($variable);
  64. } else {
  65. unset($_SESSION[$variable]);
  66. }
  67. }

Następnie edytujemy plik admin/includes/application_top.php.Odszukaj w nim kod:

testKod: php
  1. if (function_exists('ini_get')) {
  2. ini_get('register_globals') or exit('FATAL ERROR: register_globals is disabled in php.ini, please enable it!');
  3. }

i zamień go na:

testKod: php
  1. if (function_exists('ini_get') && (ini_get('register_globals') == false) && (PHP_VERSION < 4.3) ) {
  2. exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory. Please use PHP 4.3+ if register_globals cannot be enabled on the server.');
  3. }

Następnie znajdź kod:

testKod: php
  1. tep_session_start();

i dodaj po nim:

testKod: php
  1. if ( (PHP_VERSION >= 4.3) && function_exists('ini_get') && (ini_get('register_globals') == false) ) {
  2. extract($_SESSION, EXTR_OVERWRITE+EXTR_REFS);
  3. }

Zapisz plik application_top.php i otwórz plik admin/includes/functions/sessions.php. Na początku pliku dodaj kod:

testKod: php
  1. if ( (PHP_VERSION >= 4.3) && ((bool)ini_get('register_globals') == false) ) {
  2. @ini_set('session.bug_compat_42', 1);
  3. @ini_set('session.bug_compat_warn', 0);
  4. }

następnie odszukaj funkcje:

testKod: php
  1. function tep_session_start() {
  2. return session_start();
  3. }
  4.  
  5. function tep_session_register($variable) {
  6. return session_register($variable);
  7. }
  8.  
  9. function tep_session_is_registered($variable) {
  10. return session_is_registered($variable);
  11. }
  12.  
  13. function tep_session_unregister($variable) {
  14. return session_unregister($variable);
  15. }

i zamień je na:

testKod: php
  1. function tep_session_start() {
  2. global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS;
  3.  
  4. $sane_session_id = true;
  5.  
  6. if (isset($HTTP_GET_VARS[tep_session_name()])) {
  7. if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_GET_VARS[tep_session_name()]) == false) {
  8. unset($HTTP_GET_VARS[tep_session_name()]);
  9.  
  10. $sane_session_id = false;
  11. }
  12. } elseif (isset($HTTP_POST_VARS[tep_session_name()])) {
  13. if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_POST_VARS[tep_session_name()]) == false) {
  14. unset($HTTP_POST_VARS[tep_session_name()]);
  15.  
  16. $sane_session_id = false;
  17. }
  18. } elseif (isset($HTTP_COOKIE_VARS[tep_session_name()])) {
  19. if (preg_match('/^[a-zA-Z0-9]+$/', $HTTP_COOKIE_VARS[tep_session_name()]) == false) {
  20. $session_data = session_get_cookie_params();
  21.  
  22. setcookie(tep_session_name(), '', time()-42000, $session_data['path'], $session_data['domain']);
  23.  
  24. $sane_session_id = false;
  25. }
  26. }
  27.  
  28. if ($sane_session_id == false) {
  29. tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));
  30. }
  31.  
  32. return session_start();
  33. }
  34.  
  35. function tep_session_register($variable) {
  36. if (PHP_VERSION < 4.3) {
  37. return session_register($variable);
  38. } else {
  39. if (isset($GLOBALS[$variable])) {
  40. $_SESSION[$variable] =& $GLOBALS[$variable];
  41. } else {
  42. $_SESSION[$variable] = null;
  43. }
  44. }
  45.  
  46. return false;
  47. }
  48.  
  49. function tep_session_is_registered($variable) {
  50. if (PHP_VERSION < 4.3) {
  51. return session_is_registered($variable);
  52. } else {
  53. return isset($_SESSION) && array_key_exists($variable, $_SESSION);
  54. }
  55. }
  56.  
  57. function tep_session_unregister($variable) {
  58. if (PHP_VERSION < 4.3) {
  59. return session_unregister($variable);
  60. } else {
  61. unset($_SESSION[$variable]);
  62. }
  63. }

Błąd #2:
w panelu administracyjnym sklepu pojawia się tekst:
Fatal error: Cannot re-assign $this in admin/includes/classes/upload.php on line 31

Rozwiązanie:
W pliku admin/includes/classes/upload.php odszukaj kod:

testKod: php
  1. $this = null;

i zamień na:

testKod: php
  1. unset($this);

Po tych zabiegach Twój sklep będzie działał bez zarzutu.

Dodatkowe informacje

  • Wersja skepu osCommerce Merchant rc2.2, Proffesional 1.0.3
  • Dostępne wersje językowe Polska, Angielska

Logowanie

Nasze sondy

Czy podoba ci się nowa odsłona strony?
 
Money.pl - wiadomości, notowania, giełda, kursy walut
NBP 2012-05-22
USD 3,3811 -0,34%
EUR 4,3205 -0,27%
CHF 3,5973 -0,27%
GBP 5,3419 -0,44%
Money.pl - Kliknij po więcej
22 maja 2012
Źródło: MeteoGroup