Templateshop - Eine große Auswahl an neuen und modernen Templates für die modified eCommerce Shopsoftware
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Frage an die Serverprofis

    p3e

    • Experte
    • Beiträge: 2.425
    Frage an die Serverprofis
    am: 03. Dezember 2017, 16:35:51
    Beim Bestellabschluss kommt die Fehlermeldung:

    Code: PHP  [Auswählen]
    Fatal error: require_once(): Failed opening required
    'includes/application_top.php' (include_path='.:/usr/local/php5.6/lib/php') in
    /shopabc/www.shop.com/callback/xtbooster/xtbcallback.php on line 12

    Also findet er aus irgendeinem Grund nicht die application_top.php die natürlich wie gehabt vorhanden ist. Es muss also so sein, dass er im falschen Verzeichnis sucht.
    Der Provider hatte zuletzt irgendwas bezüglich der php.ini umgestellt und ein paar Updates gemacht. Vorher gab es keine Probleme.
    Komischerweise erzeugt

    Code: PHP  [Auswählen]
    include('includes/application_top.php');

    nur require_once.

    Der Provider sagt, dass das mit deren Updates nicht zusammenhängen kann. Ich denke eher schon, habe aber von Servern keine Ahnung und lasse da immer alles vom Provider machen (bisher hat das gut funktioniert). Was meint Ihr was da los ist?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=38335.0

    awids

    • Experte
    • Beiträge: 3.803
    • Geschlecht:
    Re: Frage an die Serverprofis
    Antwort #1 am: 03. Dezember 2017, 18:25:57
    Hast du mal versucht, diese beiden Zeilen

    Code: PHP  [Auswählen]
    chdir('../../');
    require_once 'includes/application_top.php';    # This line includes GNU/GPL licensed ...

    zu

    Code: PHP  [Auswählen]
    require_once ('../../includes/application_top.php');

    oder

    Code: PHP  [Auswählen]
    include ('../../includes/application_top.php');

    zusammen zu fassen?

    Die Datei sieht nicht so aus, als wäre daran in den letzten Jahren noch groß was bearbeitet worden.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Frage an die Serverprofis
    Antwort #2 am: 03. Dezember 2017, 18:35:46
    [...]
    Komischerweise erzeugt

    Code: PHP  [Auswählen]
    include('includes/application_top.php');

    nur require_once.
    [...]

    Wie kommst du darauf?

    In 'callback/xtbooster/xtbcallback.php' Zeile 12 steht doch

    Code: PHP  [Auswählen]
    require_once 'includes/application_top.php';    # This line includes GNU/GPL licensed code written by xt:Commerce GmbH (www.(( Wir dulden keine kommerziellen Werbelinks - Bitte <a href="index.php?topic=3013.0">Forenregeln</a> beachten! )))

    [...]
    Code: PHP  [Auswählen]
    require_once ('../../includes/application_top.php');

    oder

    Code: PHP  [Auswählen]
    require_once ('../../includes/application_top.php');
    [...]

    Sehe hier keinen Unterschied.

    Gruss
    Hanspeter

    awids

    • Experte
    • Beiträge: 3.803
    • Geschlecht:
    Re: Frage an die Serverprofis
    Antwort #3 am: 03. Dezember 2017, 18:50:09
    [...]
    Sehe hier keinen Unterschied.
    [...]

    Korrigiert.  :O Danke für den Hinweis. ^^ Dass ich schreibfaul bin und gerne mal Zeilen mit Copy&Paste einfüge, ist ja kein Geheimnis  - aber dass ich die kopierte Zeile dann nicht entsprechend anpasse, hebt das Ganze auf einen völlig neuen Level. :D

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Frage an die Serverprofis
    Antwort #4 am: 03. Dezember 2017, 18:54:39
    Ist nicht so schlimm, die Idee finde ich gut :!:

    p3e

    • Experte
    • Beiträge: 2.425
    Re: Frage an die Serverprofis
    Antwort #5 am: 03. Dezember 2017, 20:29:03
    Erst einmal vielen Dank an awids und hpzeller für die Antworten!

    [...]
    Komischerweise erzeugt
    Code: PHP  [Auswählen]
    include('includes/application_top.php');
    nur require_once.
    [...]

    Wie kommst du darauf?
    Oh sorry, ich hatte vom Handy aus geschrieben und da ist mir der unvollständige Satz nicht aufgefallen.

    Ich hatte testweise das require_once durch includes ersetzt und die Fehlermeldung war weg. Sollte also bedeuten:
    Zitat
    Komischerweise erzeugt
    Code: PHP  [Auswählen]
    include('includes/application_top.php');
    keine Fehlermeldung sondern nur require_once.
    Aber ich verstehe nicht wieso, denn am Pfad hat sich dadurch ja nichts geändert.

    Hast du mal versucht, diese beiden Zeilen

    Code: PHP  [Auswählen]
    chdir('../../');
    require_once 'includes/application_top.php';    # This line includes GNU/GPL licensed ...

    zu

    Code: PHP  [Auswählen]
    require_once ('../../includes/application_top.php');

    oder

    Code: PHP  [Auswählen]
    include ('../../includes/application_top.php');

    zusammen zu fassen?

    Die Datei sieht nicht so aus, als wäre daran in den letzten Jahren noch groß was bearbeitet worden.
    include geht, require_once führt wieder zum Failed opening required. :(

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Re: Frage an die Serverprofis
    Antwort #6 am: 04. Dezember 2017, 13:47:48
    include() erzeugt nur eine Warnung, führt PHP aber weiter aus, wenn die Datei nicht gefunden wird.
    require() bzw. require_once() erzeugen einen Fehler und PHP bricht an der Stelle ab.

    Das bedeutet, dass die Datei trotzdem nicht gefunden wird, da der Pfad weiterhin nicht stimmt.
    Bau mal in xtbcallback.php vor Zeile 12 folgendes ein:

    Code: PHP  [Auswählen]
    var_dump(getcwd()); //gibt aktuellen Pfad an

    um zu sehen, in welchem Verzeichnis man sich dann aktuell befindet.

    p3e

    • Experte
    • Beiträge: 2.425
    Re: Frage an die Serverprofis
    Antwort #7 am: 04. Dezember 2017, 14:48:33
    In der
    \checkout_process.php Zeile 464

    Code: PHP  [Auswählen]
    foreach(auto_include(DIR_FS_CATALOG.'includes/extra/checkout/checkout_process_end/','php') as $file) require ($file);

    wird u.a. die \includes\extra\checkout\checkout_process_end\10_xsbooster.php ausgeführt, die wiederum in der Zeile 5

    Code: PHP  [Auswählen]
    require_once (DIR_FS_CATALOG.'callback/xtbooster/xtbcallback.php');

    die \callback\xtbooster\xtbcallback.php aufruft.

    Demnach müsste der aktuelle Pfad der Root sein (weil alles von der \checkout_process.php ausgeht oder habe ich da jetzt einen Denkfehler?) und davon geht er dann wegen

    Code: PHP  [Auswählen]
    chdir('../../');

    zwei Ordner nach oben? Ist dann doch gar nicht mehr im öffentlichen Bereich. Ich dachte höher geht es da so einfach gar nicht.

    web28

    • modified Team
    • Beiträge: 9.404
    Re: Frage an die Serverprofis
    Antwort #8 am: 04. Dezember 2017, 16:01:49
    Wird

    \callback\xtbooster\xtbcallback.php

    direkt aufgerufen muss per chdir('../../'); das aktuelle Verszeichnis gewechselt werden.

    Wird die Datei aus

    \includes\extra\checkout\checkout_process_end\10_xsbooster.php

    aufgerufen ergibt das den geschilderten Fehler. Außerdem ist in diesem Fall die application_top bereits includet.
    Diese beiden Zeilen in der xtbcallback.php sind nur notwendig, wenn die Datei direkt aufgerufen wird.

    Code: PHP  [Auswählen]
    chdir('../../');
    require_once 'includes/application_top.php';

    Mit einem Test auf eine Konstante aus der configure.php ('DIR_FS_DOCUMENT_ROOT') kann man das prüfen.

    Gruss Web28

    p3e

    • Experte
    • Beiträge: 2.425
    Re: Frage an die Serverprofis
    Antwort #9 am: 05. Dezember 2017, 09:52:18
    Nochmal zu dem Konstrukt

    Code: PHP  [Auswählen]
    chdir('../../');
    require_once 'includes/application_top.php';

    Wieso nimmt man nicht grundsätzlich in diesen Fällen

    Code: PHP  [Auswählen]
    require_once (DIR_FS_CATALOG.'includes/application_top.php');

    anstatt mit chdir zu arbeiten?

    Ganz am Rande: Ich nutze xtbooster gar nicht aber die Datei wird wegen dem auto_include trotzdem aufgerufen.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Frage an die Serverprofis
    Antwort #10 am: 05. Dezember 2017, 10:01:03
    Also ich nutze xtbooster auch nicht, aber so wie web28 in Antwort #8 schreibt, kann es vorkommen das die Datei 'callback/xtbooster/xtbcallback.php' direkt aufgerufen wird und dann steht die Konstante 'DIR_FS_CATALOG' natürlich nicht zur Verfügung, aber gerade das könnte man sich z.B. wie folgt zu Nutze machen.

    Anstatt diesen Code

    Code: PHP  [Auswählen]
    chdir('../../');
    require_once 'includes/application_top.php';

    könnte man diesen Code

    Code: PHP  [Auswählen]
    if (defined('DIR_FS_CATALOG')) {
      require_once (DIR_FS_CATALOG . 'includes/application_top.php');
    } else {
      require_once ('../../includes/application_top.php');
    }

    oder diesen Code

    Code: PHP  [Auswählen]
    if (defined('DIR_FS_CATALOG')) {
      require_once (DIR_FS_CATALOG . 'includes/application_top.php');
    } else {
      chdir('../../');
      require_once ('includes/application_top.php');
    }

    einsetzen.

    Die beiden Varianten müsste man testen, weil ich nicht weiss ob das wechseln des Arbeitsverzeichnisses mit  'chdir('../../');' bei direktem Aufruf des Skripts nötig ist.

    Gruss
    Hanspeter

    web28

    • modified Team
    • Beiträge: 9.404
    Re: Frage an die Serverprofis
    Antwort #11 am: 05. Dezember 2017, 11:18:51
    Mit
    Code: PHP  [Auswählen]
    chdir('../../');

    wird das aktuelle Arbeitsverzeichnis gewechselt. Das ist wichtig für alle weiteren realtive Includes.
    (Siehe Zeilen 32-44 in application_top.php)

    [...]
    Ganz am Rande: Ich nutze xtbooster gar nicht aber die Datei wird wegen dem auto_include trotzdem aufgerufen.

    Das sollte aber nicht sein wegen:

    Code: PHP  [Auswählen]
    if (isset($_SESSION['xtb0'])) {
        define('XTB_CHECKOUT_PROCESS', __LINE__);
        require_once (DIR_FS_CATALOG.'callback/xtbooster/xtbcallback.php');
      }

    Gruss Web28

    p3e

    • Experte
    • Beiträge: 2.425
    Re: Frage an die Serverprofis
    Antwort #12 am: 05. Dezember 2017, 12:14:19
    Oh, *schäm* jetzt fällt es mir wieder ein: Das liegt daran, dass ich $_SESSION['xtb0']['DEFAULT_CUSTOMER_GROUP'] für ein Modul "missbrauche", in dem ich bestimmte "Landingpages" für bestimmte Kundengruppen vorbelegen.

    Beispiel: Kommt ein Kunde auf die "Landingpage" für Händler, belegt mein Modul die Session $_SESSION['xtb0']['DEFAULT_CUSTOMER_GROUP'] mit dem Wert für die Kundengruppe Händler. Registriert er sich danach im Shop, wird er automatisch zum Händler, ohne dass der Admin da manuell eingreifen muss.
    Hatte leider keine andere Möglichkeit gefunden die DEFAULT_CUSTOMER_GROUP auf Sessionebene updatesicher festzulegen. Deshalb der Notbehelf. :whistle:

    web28

    • modified Team
    • Beiträge: 9.404
    Re: Frage an die Serverprofis
    Antwort #13 am: 05. Dezember 2017, 12:23:02
    Auf jeden Fall wurde damit ein Fehler aufgedeckt!

    \callback\xtbooster\xtbcallback.php

    Code: PHP  [Auswählen]
    if (!defined('DIR_FS_DOCUMENT_ROOT')) {
      chdir('../../');
      require_once ('includes/application_top.php');
    }

    Damit wird nur beim Direktaufruf die application_top.php geladen.

    Gruss Web28
    8 Antworten
    4949 Aufrufe
    11. November 2015, 13:40:18 von Bonsai
    3 Antworten
    3284 Aufrufe
    21. Juli 2010, 05:58:44 von roland 44
    2 Antworten
    2446 Aufrufe
    16. Juli 2013, 12:47:02 von piru
    10 Antworten
    5093 Aufrufe
    14. April 2017, 18:01:06 von Modulfux
               
    anything