Ankündigung

Einklappen
Keine Ankündigung bisher.

Internal Server Error

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Internal Server Error

    Hallo,

    ich versuche mit einer API an Daten ranzukommen. Die Daten sind ziemlich gross, deswegen bekomme ich sie nicht alle zusammen mit einem Aufruf, sondern muss die API in einer Schleife aufrufen. Ich habe ausgerechnet wie viele Schleifen ich insgesamt benötige um an allen Daten ranzukommen und zwar sind es 546 Schleifen. Pro Schleife braucht der Server 2.23 Sekunden. Wir sprechen also von 1'218 Sekunden, also 20 Minuten. Sobald die Schleife durch ist, wird auf dem Server eine JSON-Datei erstellt.

    Mein Hoster hat nun max_execution_time und max_input_time erhöht, damit das Script nicht mehr in ein Timeout geratet, jedoch bekomme ich ein Internal Server Error und der Hoster bekommt die folgende Fehlermeldung:
    [fcgid:warn] [pid 32262] (104)Connection reset by peer: [client 80.74.144.144:48638] mod_fcgid: error reading data from FastCGI server
    [core:error] [pid 32262] [client 80.74.144.144:48638] End of script output before headers: index.php
    Weiter können sie mir nicht helfen.

    Ich habe die Anzahl Schleifen auf 3 reduziert (statt 546). Dann bekomme ich keine Fehlermeldung und JSON wird einwandfrei auf dem Server erstellt. Das beweist doch, dass es nicht an meinem Script liegt, sondern an Server-Einstellungen?!

    Woran könnte es liegen und wie soll ich voran gehen?

  • #2
    So lang laufende Prozesse sollten nicht per Webbrowser, sondern über die Command Line gestartet werden. Diese haben in der Regel auch keine oder sehr lange Time Limits.

    Und was meinst du mit 546 Schleifen? Meinst du eine Schleife mit 546 Durchläufen? Oder wirklich 546 Schleifen? Und wenn ja, mit wieviel Durchläufen?

    Kannst du nicht mit dem API-Anbieter reden, ob er nicht einer performantere Lösung anbieten kann als so viele API-Aufrufe?

    Kommentar


    • #3
      Sorry, mein Fehler. Nicht 546 Schleifen, sondern 546 Durchläufen. Im Prinzip sollte die Seite einmal pro Woche via Cronjob aufgerufen werden.

      Der API-Anbieter ist Wordpress. Ich denke nicht, dass sie wegen mir eine performantere Lösung anbieten würden.

      Aber das mit dem Command Line ist ein guter Hinweis! Wie könnte ich denn die URL der Website mit Command Line aufrufen? Und funktioniert das auch mit Cronjob?

      Kommentar


      • #4
        Zitat von Ray Zah Beitrag anzeigen
        Sorry, mein Fehler. Nicht 546 Schleifen, sondern 546 Durchläufen. Im Prinzip sollte die Seite einmal pro Woche via Cronjob aufgerufen werden.

        Aber das mit dem Command Line ist ein guter Hinweis! Wie könnte ich denn die URL der Website mit Command Line aufrufen? Und funktioniert das auch mit Cronjob?
        Warum eine Webseite? Warum nicht das PHP-Script? Wenn du die Webseite per Cronjob aufrufst hast du ja erst recht wieder die gleichen Limitierungen.

        Kommentar


        • #5
          Das Problem ist, dass die API nur mit Wordpress funktioniert. Meine richtige Website funktioniert ohne Wordpress aber mein Script befindet sich in einem Unterordner, worin Wordpress installiert ist. Ich müsste also example.com/wordpress aufrufen.

          Kommentar


          • #6
            Zitat von Ray Zah Beitrag anzeigen
            Das Problem ist, dass die API nur mit Wordpress funktioniert. Meine richtige Website funktioniert ohne Wordpress aber mein Script befindet sich in einem Unterordner, worin Wordpress installiert ist. Ich müsste also example.com/wordpress aufrufen.
            Es ist egal wo sich das Script befindet. Es sollte nicht über HTTP sondern über die Command Line aufgerufen werden.

            Kommentar


            • #7
              Und welchen Command müsste ich verwenden, um das Script auszuführen?

              Kommentar


              • #8
                Zitat von Ray Zah Beitrag anzeigen
                Und welchen Command müsste ich verwenden, um das Script auszuführen?
                http://php.net/manual/de/features.commandline.usage.php

                Kommentar


                • #9
                  Okay, ich habe es jetzt so ausprobiert:
                  Code:
                  php httpdocs/wp_theme/wordpress/wp-content/themes/Hidden/functions.php
                  Ich bekomme dann folgende Fehlermeldung:

                  Fatal error: Call to undefined function get_user_locale() in /home/httpd/vhosts/example.com/httpdocs/wp_theme/wordpress/wp-content/themes/Hidden/functions.php on line 12
                  Ich denke, dass mit dem Command Line war doch keine gute Idee, denn nur die Datei functions.php wird ausgeführt und die Funktionen wie get_user_locale(), welche ausserhalb der Datei von Wordpress selbst definiert wurden, werden nicht erkannt.

                  Kommentar


                  • #10
                    Zitat von Ray Zah Beitrag anzeigen
                    Ich denke, dass mit dem Command Line war doch keine gute Idee
                    Doch, ist es eigentlich schon.

                    Zitat von Ray Zah Beitrag anzeigen
                    denn nur die Datei functions.php wird ausgeführt und die Funktionen wie get_user_locale(), welche ausserhalb der Datei von Wordpress selbst definiert wurden, werden nicht erkannt.
                    Wie das mit Wordpress funktioniert, musst du selber rausfinden. Ich habe mit Wordpress keine Erfahrung. Wenn es nicht kompletter Müll ist, wird man die Wordpress-Funktionen auch in ein CLI-Script einbinden können. Und wenn es doch kompletter Müll ist, naja, hast du in die Schei*e gegriffen und aufs falsche Pferd gesetzt.

                    Kommentar


                    • #11
                      Junge, dann versuche halt den autoloader() von WP an den start zu kriegen oder bastel Dir einen.
                      Muss man echt allen pipfax bei forgeschritten posten Ray Zah ?

                      Kommentar


                      • #12
                        Ich habe es mit dem Command "/opt/php72/bin/php httpdocs/wp_theme/wordpress/index.php" probiert und es funktioniert bestens. hellbringer danke für den guten Hinweis!

                        Kommentar

                        Lädt...
                        X