WooCommerce API timed out after 15000 milliseconds

  • 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 :

    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 :)

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren


  • Viele Produkte werden einfach nur mit dem Namen 'Product' im WooCommerce Shop angelegt ohne irgendwelche Eigenschaften, dh. Preis, Lagerbestand, Bilder, Produktbeschreibung werden nicht importiert.

    Wende dich an den Hersteller von dem PHP Script.


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

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

    Hier kannst du dies in Stunden umrechnen lassen
    [size=24]https://www.calculateme.com/time/milliseconds/to-seconds/[/SIZE]

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

    https://4-gamers-shop.com/wp-json/wc/v3/…consumer_secret

    Der Server antwortet fix...

    Mit offenen Augen träumen

  • 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:

    [FONT=Courier New]set_time_limit(0);[/FONT]

    Gruß


  • [FONT=Courier New]set_time_limit(0);[/FONT]

    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.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • 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.


    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.

  • @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.

    [size=14][COLOR=#000000]@mensmaximus [/COLOR]

    Das Script läuft eh auf einem angemieteten VServer, denke da sollte es halb so wild sein die Funktion im PHP Code zu nutzen.
    [/SIZE]
    Hier findet ihr meinen 700 Zeilen Code :

    https://pastebin.com/12kDSzPc

    € : Der Befehl set_time_limit(0); bringt an der Stelle nach

    PHP
    $woocommerce->post('products', $data);

    leider nichts

    Einmal editiert, zuletzt von Maaax (11. Juni 2019 um 17:25)

  • @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 ?!

  • 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.

  • 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

    Spoiler anzeigen
    Code
    START UPLOAD : b771a230-cd6e-4b64-ad3b-76a29dce4e53
    <pre><code>cURL Error: Operation timed out after 15028 milliseconds with 0 bytes receive                                                                                     d</code><pre><pre><code>Automattic\WooCommerce\HttpClient\Request Object

    Ja ServerURL ist erreichbar vom Shop Webserver, sonst würden die Produktbiler nicht hochgeladen werden.

    PHP Code :

    https://pastebin.com/4Jbp3raH

    Einmal editiert, zuletzt von Maaax (11. Juni 2019 um 21:45)

  • 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.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!