Endlich: updatesichere Änderung auch von PHP-Programmen

Thema wurde von Avenger, 19. Juni 2012 erstellt.

  1. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Da müssen die Standard "get_usermod"-Routine und der Cache-Verwalter etwas modifiziert werden...

    Aber das muss m.E. unbedingt gemacht werden, weil man damit eine dramatisch einfachere Update-Prozedur fahren kann:

    man kann dann nämlich ein Service-Pack einfach komplett in den Shop kopieren, und dann mit z.B. WinMerge das "USERMOD"- mit dem "Shop-Root"-Verzeichnis abgleichen lassen. (Zur Erinnerung: nach meinem Konzept werden die geänderten Dateien mit demselben Namen in der gleichen Verzeichnis-Hierarchie des Originals im "USERMOD"-Verzeichnis gespeichert!)

    Und man kann dann direkt in WinMerge die Programm-Variante(n) im "USERMOD"-Verzeichnis semi-automtisch mit den neuen gleichnamigen SP-Modulen abgleichen, um dort vorhandene Änderungen zu integrieren!

    Und muss nicht erst mal überall in der Verzeichnis-Struktur nachschauen, ob und wo man was geändert hat!

    Gegenüber dem jetzigen Verfahren m.E. ein Quantensprung an Update-Produktivität.....

    Um das zu erreichen, muss man direkt in 2 Programme eingreifen (diese Änderungen müssen daher unbedingt in den Core-Gambio-Code integriert werden):

    "inc/get_usermod.inc.php" und "system\core\CachedDirectory.inc.php"
     

    Anhänge:

  2. C h r i s t i a n

    C h r i s t i a n G-WARD 2012

    Registriert seit:
    26. April 2011
    Beiträge:
    3.456
    Danke erhalten:
    330
    Danke vergeben:
    551
    Juhu, freu mich! Dann macht die Geschichte wirklich Sinn.

    Das Vorgehen, nur nochmal zur Sicherheit:

    Zipilein ziehen entpacken und auf den FTP-Server kopieren.

    danach lege ich das Verzeichnis USERMOD an, in der dann alle USERMOD Dateien in derselben Hierachi wie die normalen Dateien kopiert werden.

    Soweit ok, aber nun bin ich mir nicht so sicher:
    - Das USERMOD Verzeichnis liegt dann im Shop-Root?
    - die darin enthaltenen Verzeichnisse enden immer mit USERMOD?
     
  3. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.543
    Danke erhalten:
    11.305
    Danke vergeben:
    1.611
    Vielen Dank an Avenger!
    Da habe ich am WE doch was zum Spielen :)
     
  4. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    1. Ja.

    2. Nein, ohne "-USERMOD". Einfach so, wie die Verzeichnisse und Programme in/relativ zur Shop-Root heißen.
     
  5. C h r i s t i a n

    C h r i s t i a n G-WARD 2012

    Registriert seit:
    26. April 2011
    Beiträge:
    3.456
    Danke erhalten:
    330
    Danke vergeben:
    551
    coole Sache, dann werde ich mal unseren Testshop zur Maschine tunen.....
     
  6. THR

    THR Erfahrener Benutzer

    Registriert seit:
    1. Juni 2011
    Beiträge:
    276
    Danke erhalten:
    13
    Danke vergeben:
    22
    Code:
    Nehmen wir mal an, wir brauchen eine geänderte Version der "default.php": nichts leichter als das!
    
    In der "index.php" wird der Aufruf
    
    PHP-Code:
    include (DIR_WS_MODULES.'default.php'); 
    ersetzt mit
    PHP-Code:
    include (get_usermod(DIR_WS_MODULES.'default.php')); 
    So. Die ersten Änderungen an den Originalen kommen ja schon mit den Versionen die in deinem Archiv sind.
    Wenn diese seitens Gambio geändert werden steht man(n) Frau doch auch wieder im Dunkeln.

    Auch die besagte Änderung in der originale index.php?
    Also werden die dann beim Update überschrieben?

    Oder!

    Die Archiv Dateien sollten bereits in das USERMOD Verzeichnis
    Dieser neue Aufruf kommt in die /USERMOD/index.php
    und die "neue" default.php soll auch im USERMOD liegen

    ?????
     
  7. THR

    THR Erfahrener Benutzer

    Registriert seit:
    1. Juni 2011
    Beiträge:
    276
    Danke erhalten:
    13
    Danke vergeben:
    22
    #27 THR, 20. Juni 2012
    Zuletzt bearbeitet: 20. Juni 2012
    Ich habe das jetzt mal mit der /admin/includes/column_left.php getestet.
    Meine Variante habe ich in /USERMOD/admin/includes/column_left.php abgelegt.

    Leider wird die Änderung aus meiner Datei nicht übernommen.

    Was habe ich falsch gemacht??

    Ich dachte es wird geprüft ob in der USERMOD Struktur eine Variante vorhanden ist.
    Wenn ja dann diese ansonsten die originale.
    Richtig?
     
  8. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Bis Du sicher, dass datt auch für den /admin/-Pfad gilt??
    Ich denke es betrifft "nur" den /templates/...Pfad!??
     
  9. THR

    THR Erfahrener Benutzer

    Registriert seit:
    1. Juni 2011
    Beiträge:
    276
    Danke erhalten:
    13
    Danke vergeben:
    22
    #29 THR, 20. Juni 2012
    Zuletzt bearbeitet: 20. Juni 2012
    Avenger hatte doch geschrieben
    Wobei die aktuelle Version ja theoretisch/praktisch im USERMOD die ganze Shop Struktur abbilden könnte.
     
  10. THR

    THR Erfahrener Benutzer

    Registriert seit:
    1. Juni 2011
    Beiträge:
    276
    Danke erhalten:
    13
    Danke vergeben:
    22
    Leider funktioniert das nach mehrmaligen Test nicht. Obwohl alle Dateien nun an ihrem vorgesehenen Plätzen sind wird die USERMOD struktur nicht genutzt.

    mmmhhhh....???
     
  11. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.543
    Danke erhalten:
    11.305
    Danke vergeben:
    1.611
    Wenn ich die Dateien aus dem ZIP-Ordner in den Shop kopiere erhalte ich diese Fehlermeldung:
     
  12. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Zunächst mal:

    für das Admin-Menü gibt es eine wesentlich bessere Möglichkeit der Anpassung, die man auf jeden Fall nutzen sollte...

    Aber zum Verfahren selbst noch einmal eine Erläuterung:

    automatisch auf veränderte Programm-Module prüfen kann man (nach dem im ersten Post hier beschriebenen Verfahren) alle Programme, die vom Server direkt aktiviert werden.

    Das sind also alle Programme, die in der "Shop-Root" (Beispiele: index.php, products_info.php, checkout_xxx.php, usw.), oder im "admin"-Verzeichnis (Beispiele: start.php, categories.php, customers.php, orders.php, usw.,) liegen.

    PHP-Programme, die von diesen Programmen aufgerufen werden, können nicht automatisch geprüft werden, sondern müssen über die "get_usermod"-Routine geladen werden!

    Im genannten Beispiel müsste also in einem geänderten Admin-Programm der Aufruf

    PHP:
    require(DIR_WS_INCLUDES 'column_left.php');
    ersetzt werden mit:

    PHP:
    require(get_usermod(DIR_WS_INCLUDES 'column_left.php'));
    (Was man aber tunlichst vermeiden sollte, da 'column_left.php' ja in jedem Admin-Modul integriert werden muss....)

    Anderes Beispiel:

    wenn man in dem (geänderten) "categories.php"-Programm im Admin eine andere "categories.php"-Klasse verwenden will (um z.B. zusätzliche Felder im Kategorie/Artikel-Stammsatz zu behandeln), muss man das "categories.php"-Programm als USERMOD bereit stellen, und dort den Aufruf

    PHP:
    require_once('includes/classes/categories.php');
    ersetzen mit

    PHP:
    require_once(get_usermod('includes/classes/categories.php'));
    Und natürlich auch eine geänderte Variante der "categories.php"-Klasse bereit stellen.

    (Ideal wäre es natürlich, wenn der Gambio Core-Code komplett auf diese Aufrufe über "get_usermod" umgestellt würde... Dann könnte man sich im genannten Beispiel ersparen, das "categories.php"-Programm auch als USERMOD zu definieren...)
     
  13. THR

    THR Erfahrener Benutzer

    Registriert seit:
    1. Juni 2011
    Beiträge:
    276
    Danke erhalten:
    13
    Danke vergeben:
    22
    Ok. War nur ein Test mit einer nicht Shop gefärdenden Datei. ;-)

    Hoffentlich habe ich das nun richtig verstanden.
    Egal wie ich das USERMOD Verzeichnis verwenden will - ich muss die neuen Versionen in den Originaldateien über.
    Code:
    require_once(get_usermod('pfad/xy.php')); 
    aufrufen.
     
  14. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Außer denen in der Shop-Root und im "admin"-Verzeichnis, da geht das automatisch...

    Und nicht in den "Originaldateien", sondern einer "USERMOD"-Version der Originaldatei...

    Sonst macht das ja keinen Sinn.
     
  15. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    35.543
    Danke erhalten:
    11.305
    Danke vergeben:
    1.611
    Also sowie ich die .htaccess hochlade habe ich diesen "Internal Server Error"
     
  16. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Ich habe das jetzt mal entsprechend dem beschriebenen Verfahren bei mir reorganisiert.

    Alleine im Shop-Frontend habe ich 26 Dateien in das "USERMOD"-Verzeichnis verlagert, aus dem Admin werden noch eine ganze Reihe weiterer dazu kommen.

    Dabei habe ich festgestellt, dass es für die Flexibilität sinnvoll wäre, wenn im Gambio-Core mehr Programme schon mit "get_usermod" aufgerufen würden.

    Heiße Kandidaten dafür sind in der "application_top" enthalten:

    PHP:
    require_once(DIR_FS_INC 'get_usermod.inc.php');


    require_once (
    DIR_FS_INC.'xtc_db_connect.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_close.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_error.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_perform.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_query.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_queryCached.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_fetch_array.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_num_rows.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_data_seek.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_insert_id.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_free_result.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_fetch_fields.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_output.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_input.inc.php');
    require_once (
    DIR_FS_INC.'xtc_db_prepare_input.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_top_level_domain.inc.php');
    require_once (
    DIR_FS_INC.'xtc_hide_session_id.inc.php');

    // include needed functions
    require_once(DIR_FS_INC 'xtc_create_random_value.inc.php');
    require_once(
    DIR_FS_INC 'xtc_get_prid.inc.php');
    require_once(
    DIR_FS_INC 'xtc_draw_form.inc.php');
    require_once(
    DIR_FS_INC 'xtc_draw_input_field.inc.php');
    require_once(
    DIR_FS_INC 'xtc_image_submit.inc.php');
    require_once(
    DIR_FS_INC 'xtc_get_prid.inc.php');

    // html basics
    require_once (DIR_FS_INC.'xtc_href_link.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_separator.inc.php');
    require_once (
    DIR_FS_INC.'xtc_php_mail.inc.php');

    require_once (
    DIR_FS_INC.'xtc_product_link.inc.php');
    require_once (
    DIR_FS_INC.'xtc_category_link.inc.php');
    require_once (
    DIR_FS_INC.'xtc_manufacturer_link.inc.php');

    // html functions
    require_once (DIR_FS_INC.'xtc_draw_checkbox_field.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_form.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_hidden_field.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_input_field.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_password_field.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_pull_down_menu.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_radio_field.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_selection_field.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_separator.inc.php');
    require_once (
    DIR_FS_INC.'xtc_draw_textarea_field.inc.php');
    require_once (
    DIR_FS_INC.'xtc_image_button.inc.php');

    require_once (
    DIR_FS_INC.'xtc_not_null.inc.php');
    require_once (
    DIR_FS_INC.'xtc_update_whos_online.inc.php');
    require_once (
    DIR_FS_INC.'xtc_activate_banners.inc.php');
    require_once (
    DIR_FS_INC.'xtc_expire_banners.inc.php');
    require_once (
    DIR_FS_INC.'xtc_expire_specials.inc.php');
    require_once (
    DIR_FS_INC.'xtc_parse_category_path.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_product_path.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_category_path.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_parent_categories.inc.php');
    require_once (
    DIR_FS_INC.'xtc_redirect.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_uprid.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_all_get_params.inc.php');
    require_once (
    DIR_FS_INC.'xtc_has_product_attributes.inc.php');
    require_once (
    DIR_FS_INC.'xtc_image.inc.php');
    require_once (
    DIR_FS_INC.'xtc_check_stock_attributes.inc.php');
    require_once (
    DIR_FS_INC.'xtc_currency_exists.inc.php');
    require_once (
    DIR_FS_INC.'xtc_remove_non_numeric.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_ip_address.inc.php');
    require_once (
    DIR_FS_INC.'xtc_setcookie.inc.php');
    require_once (
    DIR_FS_INC.'xtc_check_agent.inc.php');
    require_once (
    DIR_FS_INC.'xtc_count_cart.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_qty.inc.php');
    require_once (
    DIR_FS_INC.'create_coupon_code.inc.php');
    require_once (
    DIR_FS_INC.'xtc_gv_account_update.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_tax_rate_from_desc.inc.php');
    require_once (
    DIR_FS_INC.'xtc_get_tax_rate.inc.php');
    require_once (
    DIR_FS_INC.'xtc_add_tax.inc.php');
    require_once (
    DIR_FS_INC.'xtc_cleanName.inc.php');
    require_once (
    DIR_FS_INC.'xtc_calculate_tax.inc.php');
    require_once (
    DIR_FS_INC.'xtc_input_validation.inc.php');
    require_once (
    DIR_FS_INC.'xtc_js_lang.php');
    require_once (
    DIR_FS_INC.'xtc_get_products_name.inc.php');

    require_once (
    DIR_FS_CATALOG 'gm/modules/gm_gprint_application_top.php');
    require_once (
    DIR_FS_CATALOG 'gm/classes/GMCounter.php');
    require_once (
    DIR_FS_CATALOG 'gm/classes/GMLightboxControl.php');
    require_once (
    DIR_FS_CATALOG 'admin/gm/classes/GMOpenSearch.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_clear_string.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_prepare_string.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_set_conf.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_get_conf.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_set_content.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_get_content.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_get_content_by_group_id.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_get_categories_icon.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_mega_flyover_prepare.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_is_valid_trusted_shop_id.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_convert_qty.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_create_corner.inc.php');
    require_once (
    DIR_FS_CATALOG 'gm/inc/gm_get_privacy_link.inc.php');
    Auch die 'cart_actions.php' ist ein Kandidat dafür, da man da auch sehr oft Änderungen vorsehen muss.

    PHP:
    require (DIR_WS_INCLUDES.FILENAME_CART_ACTIONS);
     
  17. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Beim Testen der Funktionalität ist mir aufgefallen, dass "gm_javascript.js.php" und "gm_ajax.php" die standard "application_top.php" einbinden.

    Da wird m.E. viel unnötiger Ballast eingebunden, der viel Zeit kostet und gar nicht verwendet wird.

    Hier wäre eine angepasste Variante sicher sehr ratsam.
     
  18. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.693
    Danke vergeben:
    903
    Die neue application_top.php haben wir schon fertig. Die kommt dem nächsten großen Feature-Service Pack.
     
  19. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.985
    Danke erhalten:
    470
    Danke vergeben:
    369
    #39 HolgerNils (xycons.de), 17. September 2012
    Zuletzt bearbeitet: 17. September 2012
    Avenger, hi!
    Ich habe die zweite Option aktiviert und die erste auskommentiert, damit ich xxx-USERMOD.php benutzen kann.
    Aber dann bekomme ich folgenden Fehler:
    Code:
    FATAL ERROR(256): "CachedDirectory scan_dir failed, because p_path is not a valid absolute path: /var/www/web1413/html/USERMOD" in /var/www/web1413/html/system/core/CachedDirectory.inc.php:203 ([URL="http://www.esmokerstore2012.alfahosting.org/logoff.php#"]Details[/URL])
    Backtrace: #0  trigger_error called at [/var/www/web1413/html/system/core/CachedDirectory.inc.php:203] #1  (#CachedDirectory) scan_dir called at [/var/www/web1413/html/system/core/CachedDirectory.inc.php:150] #2  (#CachedDirectory) rebuild_cache called at [/var/www/web1413/html/system/core/CachedDirectory.inc.php:225] #3  (#CachedDirectory) load_cache called at [/var/www/web1413/html/system/core/CachedDirectory.inc.php:55] #4  (#CachedDirectory) CachedDirectory called at [/var/www/web1413/html/system/core/ClassRegistry.inc.php:49] #5  (#ClassRegistry) scan_dir called at [/var/www/web1413/html/system/core/MainFactory.inc.php:92] #6  (#MainFactory) get_class_registry called at [/var/www/web1413/html/system/core/MainFactory.inc.php:121] #7  (#MainFactory) load_class called at [/var/www/web1413/html/system/core/MainFactory.inc.php:155] #8  (#MainFactory) create_object called at [/var/www/web1413/html/includes/application_top.php:228] #9  include called at [/var/www/web1413/html/logoff.php:33] 
    
    
    Hm, sieht so aus als wenn er zumindest ein leeres "USERMOD"-Verzeichnis braucht in der Root ;-)
    So ist der Fehler weg, aber ich kriegs nicht ans Fliegen. Weder mit -USERMOD noch im jeweiligen Verzeichnis "USERMOD".

    z. B. meine "create_account.php" habe ich in modifizierter Version ins "USERMOD"-Dir gelegt (von der Basis aus) und wird ums verrecken nicht gezogen.
     
  20. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.985
    Danke erhalten:
    470
    Danke vergeben:
    369
    <schubs>