Frage

Ich habe ein PHP-Skript, das für Updates auf viele (in Tausend) Websites überprüft. Gelegentlich (häufiger als die Zahl der Standorte erhöht), erhalte ich eine Ausführungs-Timeout auf das Update von einer dieser Seiten, und das gesamte Skript geht den Bach runter.

Die beste Idee, die ich tun konnte, ist jedes Update gabeln, also wenn es stirbt, geht die gesamte Update nur. Von dem, was ich gesammelt, so scheint es, PHP Einfädeln auf, etwas nicht zu verlassen, vor allem auf einer Windows-Plattform (die ich leider arbeiten).

Ich dachte über die Verwendung von curl als Forking Mechanismus, aber es wird nicht für den Server viel teurer sein (in Zeit und Rechenleistung)?

Ich würde gerne ein paar Ideen und Erfahrungen über PHP Forking / Einfädeln ...

hören

Danke, Omer.

War es hilfreich?

Lösung 5

Nun, am Ende ging ich für Locke, und es funktioniert gut.

brauchte ich eine Cross-Plattform-Lösung, wie ich auf einem Mac zu entwickeln, während in diesem Fall die Produktion serer Windows ist. Das bedeutete pcntl war indiskutabel.

Ich war besorgt, dass Tausende von curl Anfragen zu meinem eigenen Server senden könnte es in Beschlag nehmen und die Mühe Nutzer auf der Website zu der Zeit, aber ich war falsch.

Ich habe jedoch eine set_time_limit(0) an das Skript hinzuzufügen, das alle curl Anrufe initiiert, sonst ist es einfach mal aus.

Andere Tipps

Wenn Sie vorhaben, curl zu benutzen Blick in die multi * Familie von Methoden, die Sie cURL und die Interaktion mit einer Reihe von Standorten optimieren ermöglicht. Aber sagen, dass Sie auch Ihre max Ausführungszeit (über ini_set) bis zu einem gewissen beliebig hohe Zahl einstellen könnte und / oder Ihre eigenen Watchdog-Zähler halten, so dass Sie es nie zu hoch kommen lassen.

Aber ja, schließlich werden in Probleme und der Mangel an Voll Thread-Unterstützung in PHP laufen. So ist Ihre beste Wette auf anderen Alternativen zu suchen, zum Beispiel andere Sprachen / Plattformen, die eigene Threading unterstützen.

ich es geschafft, eine Form von Threading in PHP mit pcntl extension.It zu bekommen war nicht die beste Lösung, aber es hat den Trick.

http://www.php.net/manual/en/ref .pcntl.php

auch versuchen, die folgenden Links, die gab mir eine Vorstellung davon, wie über die Umsetzung zu gehen.

http://www.van-steenbeek.net/?q=php_pcntl_fork

http://www.hudzilla.org/phpbook/read.php/16_1_3

http://www.electrictoolbox.com/article/php/process- Forking /

Ich hoffe, das hilft, aber PHP ist nicht sehr gut mit Threading though.

Sie könnten setzen die ini-Richtlinie max_execution_time auf 0. Dies sollte die maximale Ausführungszeit entfernen, und lassen Sie das Skript, ohne zu verursachen, diesen Fehler laufen. Dieser Wert hat jedoch in der php.ini-Datei festgelegt werden -. Mit ini_set funktioniert nicht

set_time_limit(0);

set_time_limit docs

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top