1. Herzlich willkommen bei WPDE.org, dem grössten und ältesten deutschsprachigen Community-Forum rund um das Thema WordPress. Du musst angemeldet oder registriert sein, um Beiträge verfassen zu können.
    Information ausblenden

WooCommerce API timed out after 15000 milliseconds

Dieses Thema im Forum "WooCommerce" wurde erstellt von Maaax, 9. Juni 2019.

  1. Maaax

    Maaax Member

    Registriert seit:
    11. April 2019
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo Community,

    beim letzten Mal wurde mir hier sehr gut weitergeholen mit der WooCommerce API Schnittstelle.
    Diesmal möchte ich die Produkte aus der API Datenbank meines Lieferanten rausholen, in meiner eigenen Datenbank abspeichern und anschließend im Shop hochladen, wenn die Kriterien erfüllt werden.

    Das Script scheint fast wie gewünscht zu funktionieren. Jedoch gibt es ein kleines Problem. Beim Hochladen der Produkte über die WooCommerce API (PHP) kommt es zu folgender Fehlermeldung in der Linux Konsole :
    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Viele Produkte werden einfach nur mit dem Namen 'Product' im WooCommerce Shop angelegt ohne irgendwelche Eigenschaften, dh. Preis, Lagerbestand, Bilder, Produktbeschreibung werden nicht importiert.

    Muss ich vielleicht die Uploadgröße beim Hoster vergrößern ? Oder wie löse ich das Problem am besten ?

    Vielen Dank im Voraus :)
     
  2. r23

    r23 Well-Known Member

    Registriert seit:
    9. Dezember 2006
    Beiträge:
    7.420
    Zustimmungen:
    603
    Wende dich an den Hersteller von dem PHP Script.

    Du hast einen lächerlich kleinen time out von 15000 Millisekunden

    Hier kannst du dies in Stunden umrechnen lassen
    https://www.calculateme.com/time/milliseconds/to-seconds/

    in deiner hier veröffentlichen Meldung fehlt der Schlüssel "consumer_key"

    https://4-gamers-shop.com/wp-json/wc/v3/products?consumer_key=&consumer_secret

    Der Server antwortet fix...
     
  3. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    Wenn du in deinem PHP-Script zwischen jeder Aktion (also bspw. zwischen jedem Produkt-POST) folgende Funktion aufruft, kannst du den Timeout normalerweise umgehen und das Script beliebig lange laufen lassen:

    set_time_limit(0);

    Gruß
     
  4. mensmaximus

    mensmaximus Well-Known Member

    Registriert seit:
    24. Juli 2014
    Beiträge:
    8.857
    Zustimmungen:
    438
    Solche Hacks sehen Provider gar nicht gern und kündigen ganz schnell Verträge wenn es zu Problemen kommt. Solange der TO den ursächlichen Code nicht zeigt, kann man nicht konkret helfen.
     
  5. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    Das ist kein Hack, sondern ein übliches Mittel. Es macht auch Sinn ein nicht zu großes Script-Limits zu setzen und dies bei Bedarf im Script zu verlängern. Sollte das Script dann doch irgendwo hängenbleiben und kann das Limit nicht mehr verlängern, wird es dann relativ schnell abgeschossen.

    Auch sollte das jedem Provider bekannt sein und wenn er es nicht will, gibt es mehrere einfache Möglichkeiten dies dem Kunden zu verbieten.
     
  6. Maaax

    Maaax Member

    Registriert seit:
    11. April 2019
    Beiträge:
    9
    Zustimmungen:
    0
    @r23 das PHP Script habe ich zufälligerweise größtenteils selbst geschrieben. Die API Zugangsdaten schicke ich dir per PN raus :)

    Um das Programm zu verstehen ist es hilfreich zu wissen was es so macht.

    Es holt Produkte aus der Datenbank vom Lieferanten, speist die Daten in meine hauseigene SQL Datenbank ein, prüft nach bestimmten Kriterien ob das Produkt überhaupt in den Shop importiert werden soll, falls ja sollen die Bilder runtergeladen & verglichen werde -> Daten aus meiner DB auslesen und Produkt bei WooCommerce importieren.

    Ausserdem läuft das Script auf einer Linux Maschine mit Ubuntu 19.04 über die PHP CLI.

    @Babelfisch

    Die Funktion set_time_limit(0); werde ich ausprobieren, hab momentan noch ein sleep(5); drinne, was eigentlich den selben Effekt haben sollte.

    @mensmaximus

    Das Script läuft eh auf einem angemieteten VServer, denke da sollte es halb so wild sein die Funktion im PHP Code zu nutzen.

    Hier findet ihr meinen 700 Zeilen Code :

    https://pastebin.com/12kDSzPc

    € : Der Befehl set_time_limit(0); bringt an der Stelle nach
    PHP:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    leider nichts
     
    #6 Maaax, 11. Juni 2019
    Zuletzt bearbeitet: 11. Juni 2019
  7. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    Hast du denn das sleep(5) rausgenommen? Das bringt gar nichts und blockiert dein Script nur, wodurch es noch viel schneller in einen Timeout läuft.
     
  8. Maaax

    Maaax Member

    Registriert seit:
    11. April 2019
    Beiträge:
    9
    Zustimmungen:
    0
    @Babelfisch

    Hab mal alle sleep() Funktionen rausgenommen und durch
    set_time_limit(0); ersetzt. Das bringt leider nichts, die Produkte werden immer noch mit dem Produktnamen 'Product' ohne die Eigenschaften.

    Wenn ich die Bilder und Produktbeschreibungen nicht importiere, werden alle Produkte ganz normal importiert. Vielleicht sollte ich das Script minimal umgescripten und diese im Nachhinein importieren ?!
     
  9. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    Kommt denn noch der Timeout? Ist SERVERURL überhaupt von deinem Shop-Server aus erreichbar?

    Leider ist dein Quelltext sehr unleserlich, da er als Text formatiert ist. Pastebin bietet da auch Syntax-Highlighting und Einrückung an.
     
  10. Maaax

    Maaax Member

    Registriert seit:
    11. April 2019
    Beiträge:
    9
    Zustimmungen:
    0
    Ja der Timeout kommt immer noch. Das witzige ist doch, dass das Produkt vor dem Timeout erfolgreich hochgeladen wurde.
    Die restlichen leider nicht wirklich. Siehe Screenshot im Spoiler

    [​IMG]

    Code:
    Entschuldige, aber du musst dich registrieren oder anmelden um den Inhalt sehen zu können!
    Ja ServerURL ist erreichbar vom Shop Webserver, sonst würden die Produktbiler nicht hochgeladen werden.

    PHP Code :

    https://pastebin.com/4Jbp3raH
     
    #10 Maaax, 11. Juni 2019
    Zuletzt bearbeitet: 11. Juni 2019
  11. Babelfisch

    Babelfisch Well-Known Member

    Registriert seit:
    17. Mai 2016
    Beiträge:
    60
    Zustimmungen:
    4
    Dann bin ich jetzt auch erst mal überfragt und >700 Zeile Quellcode sind auch erst mal zu viel zum Durchgehen (auch es jetzt besser aussieht). Generell geht das aber auf jeden Fall. Hab selbst ein System, wo ich Produkte inkl. Bilder, PDF-Downloads und Varianten über die REST-API anlege und aktualisiere und das geht super. Dort allerdings immer nur jeweils ein Produkt auf einmal.

    Mein Tipp: Erst mal ein Produkt erfolgreich anlegen – ggf. mit Demodaten – und dann immer weiter erweitern, bis alles klappt.
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden