Unbegrenzte PHP-Downloads. PHP-Methode zur unendlichen Ausführung, die von der Konsole ausgeführt wird

PHP (englisch PHP: Hypertext Preprocessor – „PHP: Hypertext Preprocessor“; ursprünglich Personal Home Page Tools – „Werkzeuge zum Erstellen persönlicher Webseiten“) ist eine Allzweck-Skriptsprache, die intensiv für die Entwicklung von Webanwendungen verwendet wird.

Derzeit wird PHP von der überwiegenden Mehrheit der Hosting-Provider unterstützt und ist eine der führenden Sprachen zum Erstellen dynamischer Websites.

Die PHP-Sprache und ihr Interpreter werden von einer Gruppe von Enthusiasten im Rahmen eines Projekts mit entwickelt Open Source. Das Projekt wird unter einer eigenen Lizenz vertrieben, die mit der GNU General Public License nicht kompatibel ist.

Umfang von PHP

Im Bereich der Webprogrammierung, insbesondere der Serverseite, ist PHP eine der beliebtesten Skriptsprachen (neben JSP, Perl und den in ASP.NET verwendeten Sprachen).

Die Popularität im Bereich der Erstellung von Websites wird durch das Vorhandensein einer großen Anzahl integrierter Tools zur Entwicklung von Webanwendungen bestimmt. Die wichtigsten sind:

  • automatisches Extrahieren von POST- und GET-Parametern sowie Webserver-Umgebungsvariablen in vordefinierte Arrays;
  • Interaktion mit vielen verschiedene Systeme Datenbankverwaltung ( , MySQLi, Oracle (OCI8), Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape und Apache Derby, Informix, Ovrimos SQL, IBM Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, / InterBase, Paradox File Access, MaxDB, Schnittstelle PDO (PHP-Datenobjekte));
  • automatisiertes Senden von HTTP-Headern;
  • mit HTTP-Autorisierung arbeiten;
  • mit Cookies und Sessions arbeiten;
  • Arbeit mit lokalen und gelöschte Dateien, Steckdosen;
  • Verarbeitung von auf den Server hochgeladenen Dateien;
  • Arbeiten mit XForms.

PHP wird derzeit von Hunderttausenden von Entwicklern verwendet. Laut Ranking der TIOBE Corporation basierend auf Daten Suchmaschinen, im September 2015 lag PHP auf Platz 6 unter den Programmiersprachen. Zu den größten Websites, die PHP verwenden, gehören

Ich habe mehr darüber gesprochen, wie man Denver einrichtet und sicherstellt, dass alles funktioniert, und mir nur ein wenig Zeit genommen, um einen einfachen ws-Echo-Server zu implementieren. Aber wenn Sie die Quellarchive heruntergeladen haben, können Sie sicher leicht herausfinden, wie Sie Nachrichten empfangen und senden, was völlig ausreicht, um die Technologie zu nutzen.
Ich bin froh, dass es in meinem Blog eine Reaktion gab, die noch nicht beworben wurde, und dies veranlasste mich, eine Fortsetzung zu schreiben und die Frage offenzulegen, wie man das PHP-Skript des ws-Servers trotzdem auf dem Hosting zum Laufen bringt, wie man das sicherstellt dass der Prozess läuft und das PHP-Skript läuft und nicht durch Timeout oder beim Neustart von Apache geschlossen wurde, wie man das Ausführen eines doppelten PHP-Prozesses vermeidet und Antworten auf andere notwendige Fragen, um einen garantiert funktionierenden ws-Server zu erhalten. Ich werde auf jeden Fall einen Internet-WS-Echo-Server mit Chat-Funktion erstellen und auf meinem mittelmäßigen Hosting platzieren. Für den Rest dieses Artikels werde ich das PHP-Skript, das kontinuierlich auf dem Server ausgeführt wird und ws bereitstellt, als ws-Server bezeichnen, obwohl es eigentlich ein serverseitiger Prozess ist. Und vor allem werde ich eine fertige Lösung auch für diejenigen anbieten, die keinen SSH-Zugriff auf die Konsole des Hosting-Servers oder der virtuellen Maschine haben.

Es wird heute viel Arbeit geben

Fangen wir einfach an.

Platzieren und Ausführen eines Web-Socket-Servers auf einem Hosting

Die Einfachheit liegt darin, dass es beim Start keine Probleme gibt. Sie können das PHP-Skript echows.php aus dem letzten Artikel nehmen, ohne etwas daran zu ändern, es auf das Hosting hochladen und über den Browser auf die Datei zugreifen. Der einzige Unterschied zur Ausführung in Denver besteht möglicherweise darin, dass die Apache-Einstellungen und Hosting-Caching-Mechanismen vorhanden sind verbieten die Anzeige unvollständiger Informationen PHP-Skript, in diesem Fall sehen Sie keine Informationen im Browserfenster und die Seite wird weiterhin im Browser geladen. Wenn Sie jedoch versuchen, sich von unserem ws-Client mit dem ws-Server zu verbinden, sehen Sie, dass die Verbindung erfolgreich war und der ws-Echo-Server auf alle gesendeten Anfragen antwortet. Als Adresse des ws-Servers im ws-Client müssen Sie natürlich ws://yourdomain.com:8889 angeben. Wie Sie sehen, ist alles in Ordnung. Das einzige Problem, auf das Sie möglicherweise stoßen, sind die Hosting-Firewall-Einstellungen und -Ports, die mit anderen Diensten ausgelastet sind. Wenn Sie mehrere Domains auf einer IP-Adresse haben, können Sie auf den ws-Server unter der Adresse dieser Domain ws://anotheromain.com:8889 zugreifen, was, wie Sie sehen, nicht sehr gut ist, insbesondere für das Hosting, wo Hunderte von Websites hängen Auf einer Domäne kann theoretisch jemand die gleichen Ports wie Sie verwenden, und dies kann zur Inoperabilität des ws-Servers führen. Ich empfehle daher erneut dringend, dass Sie die Ports sorgfältig auswählen und sicherstellen, dass der Server immer funktioniert, wenn ws nicht mehr funktioniert schließt alle Verbindungen und schließt Sockets korrekt. Nun, was das PHP-Skript selbst betrifft, so lebt unser PHP-Skript, wie Sie vielleicht bemerkt haben, nur 100 Sekunden lang. Wenn es danach versucht, eine Verbindung herzustellen oder eine Nachricht zu senden, schließt es alle Verbindungen und beendet seine Ausführung. Wie kann man es "für immer" leben lassen? Methoden gibt es genug. Das Problem ist aber nicht, dass das PHP-Skript endlos laufen soll, sondern das Problem ist, wie sichergestellt werden kann, dass das Skript in verschiedenen Situationen korrekt endet und dann seine Arbeit korrekt wieder aufnimmt. Wenn der Server beispielsweise aus- und wieder eingeschaltet wird, startet das PHP-Skript nicht von selbst, und es ist eine sehr schlechte Idee, zu überwachen, ob der ws-Server ausgeführt wird, und ihn manuell zu starten, wenn er nicht funktioniert.

Unendliche Ausführungsmethode für PHP-Skripte, die vom Browser ausgeführt wird

Als erstes müssen Sie im Skript selbst die unbegrenzte Lebensdauer des PHP-Skripts set_time_limit(0) angeben; und Ignorieren des Browserabbruchs ignore_user_abort(true); damit das PHP-Skript nach dem Schließen des Browserfensters ausgeführt wird. Wenn Sie die erforderlichen Aktionen ausgeführt haben, können Sie es über den Browser starten. Das Problem ist, dass wir bei einmaliger Ausführung nicht überprüfen können, ob mit dem Prozess alles in Ordnung ist, ob während der Ausführung Fehler aufgetreten sind und ob das Skript weiterhin funktioniert oder nicht, können wir nur überprüfen, indem wir uns mit ihm verbinden mit dem ws-Client. Natürlich können Sie diesem Skript die Funktionalität hinzufügen, eine Protokolldatei zu führen, in der der Verlauf seiner Arbeit aufgezeichnet wird. Auch wenn Sie Apache auf dem Hosting neu starten, wird der Prozess mit dem Skript zu 100 % abgeschaltet. Diese Methode kann nur in dem Fall geeignet sein, wenn wir ein garantiert funktionierendes debuggtes ws server PHP-Skript auf den Server hochladen und es uns wichtig ist, dass es nur für eine kurze absehbare Zeit funktioniert, abhängig von der Zuverlässigkeit des Hosting-Providers, aber dies Methode ist für den Betrieb eines vollwertigen industriellen WS-Servers von völlig unanwendbar wegen seiner extremen Unzuverlässigkeit und der Unmöglichkeit, in dem Moment herunterzufahren, in dem wir ihn brauchen. Stellen Sie sich eine Situation vor, in der der Administrator des Hosting-Servers beschlossen hat, Apache zwecks Aktualisierung neu zu starten, und Sie nicht überprüfen, ob Ihr WS-Server ständig funktioniert oder nicht, während Benutzer, sagen wir, in Ihrem Chat sitzen, und plötzlich Alles geht unter, Benutzer sind empört. Auch hier können Sie ein paar Krücken verwenden, bevor sich der ws-Client über das ws-Protokoll mit dem ws-Server verbindet, den ws-Client über XMLHttpRequest() auf ein anderes PHP-Serverskript zugreifen lassen und verlangen, dass der ws-Server auf Ausführung überprüft wird. Die Methode ist ein wenig krumm, hat aber ihren Platz in nicht-industriellen Lösungen wie einem kleinen Chatroom oder einem kleinen Spielzeug. Dies ist, was ich in meinen kleinen Projekten verwende.

Für alle Fälle habe ich ein Experiment durchgeführt, den ws-Server auf dem Hosting gestartet, nachdem ich zuvor in das PHP-Skript einen Mechanismus zum Schließen aller Verbindungen und zum Unterbrechen des Prozesses beim Empfang einer „OFF“-Nachricht vom Client eingeführt hatte. Ich habe es mehrere Tage lang nicht berührt, regelmäßig verschiedene Nachrichten gesendet und die Überlebensfähigkeit überprüft, nach etwa zwei Tagen den Befehl „OFF“ gesendet, ws hat seine Arbeit erfolgreich abgeschlossen, die Lebensdauer des ws-Serverprozesses betrug 183.403 Sekunden (etwas mehr als 2 Tage) und ich denke, dass es noch länger ohne Probleme funktionieren könnte.

PHP-Methode zur unendlichen Ausführung, die von der Konsole ausgeführt wird

Im Prinzip gibt es praktisch keinen Unterschied zum Ausführen eines PHP-Skripts aus einem Browser, außer dass alle Daten über das PHP-Skript auf der Konsole ausgegeben werden und ein paar andere kleine Nuancen. Das PHP-Skript selbst muss auch set_time_limit(0) enthalten; und ignore_user_abort(true);. Das Ausführen eines PHP-Skripts von der *nix-Konsole aus erfolgt mit dem Befehl $ php -q Skriptdatei.php(Ich habe Putty verwendet, um eine Verbindung zur Konsole herzustellen). Der Schalter -q (--no-header) gibt an, dass der Prozess im Silent-Modus ausgeführt werden soll, und unterdrückt die Ausgabe von HTTP-Headern, die normalerweise an den Browser gesendet werden. $manphp ermöglicht es Ihnen, andere Schlüssel von Interesse zu sehen. Hervorragende Dokumentation auf der offiziellen PHP-Website, die nicht nur beim Start von PHP-Skripten von der Konsole aus geholfen hat, sondern auch das PHP-Skript selbst erheblich verbessert hat. Bitte beachten Sie, dass Sie die Ausgabe des Skripts in jede Datei auf dem Server umleiten können, indem Sie das „Größer-als“-Symbol („>“) verwenden, wie ich es normalerweise tue.

$ php -q Skriptdatei.php > Skriptdateiausgabe.txt

PHP kann verwendet werden, um PHP-Skripte in absoluter Unabhängigkeit von Apache auszuführen, aber ich bin mir nicht sicher, ob der Socket-Mechanismus ohne Apache funktioniert, ich habe nicht versucht, ihn ohne Apache auszuführen - es schien mir nichts. Das Ausführen über die Konsole wird als korrekter angesehen als über einen Webbrowser, kann jedoch wie das Ausführen über einen Browser eine Reihe von Problemen nicht lösen. Vielleicht erspart uns ein solcher Start das Beenden des Skripts beim Neustart von Apache, und das ist unwahrscheinlich, aber was ist, wenn der gesamte Webserver oder virtuelle Maschine wird neu geladen. Sie müssen natürlich manuell auf den Server klettern und das Skript ausführen, wenn Sie ein großes Spielprojekt haben und sich dafür entschieden haben Systemadministratoren die den Status von Prozessen auf dem Server überwachen, und es gibt Skripte zum Initialisieren und Laden des ws-Servers zusammen mit Apache und allem anderen, in diesem Fall ist dies die einzig richtige Option, aber wir sprechen über eine haushaltsübliche bequeme Möglichkeit, ein ws zu implementieren Server in PHP für kleine Projekte. Außerdem gibt es manchmal ein Problem beim Ausführen eines PHP-Skripts über die Konsole, das die Ausführung des PHP-Skripts gleichzeitig stoppt, wenn Sie die Konsole verlassen. Dies liegt daran, dass die Ausführung des PHP-Skripts an Sie gebunden war Sitzung als Kunde. Theoretisch sollte dies behoben werden, indem die Zeile ignore_user_abort(true); im PHP-Skript verwendet wird, aber dies hilft aufgrund von nicht immer verschiedene Einstellungen PHP. In einem solchen Fall besteht der Trick darin, dem PHP-Skript einen /dev/null-Stream zu geben, von dem es annimmt, dass es sich um einen Client handelt, und nicht beendet wird, wenn Sie die Konsole verlassen.

$ php -q Skriptdatei.php Skriptdateiausgabe.txt &

Das kaufmännische Und am Ende ist erforderlich, damit Sie Strg+C drücken und zur Konsole zurückkehren können, während der Prozess im Speicher bleibt. Oder Sie können das Dienstprogramm nohup verwenden.

Darüber hinaus ist es hilfreich zu wissen, dass Sie das Skript auf der Windows-Plattform von der Konsole aus ausführen können

> w:\usr\local\php5\php.exe -q w:\home\localhost\www\echows.php

Wenn alles richtig gemacht ist, ist es besser, das Supervisor-Dienstprogramm zu verwenden: Ein Prozesssteuerungssystem, es überwacht den Betrieb des Prozesses, startet ihn bei Bedarf und registriert Abstürze. Eine großartige Sache, wenn Sie ein ernsthaftes Projekt durchführen und einen dedizierten Server oder zumindest VDS zur Verfügung haben.

ws-Server PHP-Prozesssteuerung vom Browser

Als Ergebnis der Untersuchung von Methoden zum Starten von PHP-Skripten hatte ich eine sehr einfache Idee – auf der Seite des ws-Clients eine XMLHttpRequest ()-Anforderung an ein PHP-Skript zu implementieren, das den Status des ws-Servers überprüft, bevor eine Verbindung zum ws-Server hergestellt wird Prozess und startet, wenn es nicht läuft. Es gab auch die Idee, so etwas wie die Administratorseite des ws-Servers zu implementieren, auf der ein Protokoll der letzten Ereignisse verfügbar sein wird: wann es gestartet wurde, warum es abgestürzt ist, wer den nächsten Start initiiert hat usw., von dem aus es möglich sein wird um dem ws-Server den Befehl zu geben, neu zu starten, auszuschalten, alle Verbindungen zu schließen usw.

Was sollte die Schnittstelle für den ws-Client sein:

  • Überprüfen Sie den Status des ws-Servers und starten Sie ihn, wenn der Server nicht verfügbar ist

Was sollte die Schnittstelle für den ws-Administrator sein:

  • Informationen über den Status des ws-Servers, vorzugsweise mit der Anzahl der Verbindungen und dem belegten Speicher
  • Anzeigen von Protokollen
  • Stoppen des ws-Servers

Für die Implementierung benötigen wir also einen ws-Server, der auf eine der zuvor beschriebenen Arten im Speicher aufgehängt werden muss, d.h. Sie müssen einen Qualitätsdämon aus ihm machen. Es gibt einen ausgezeichneten Artikel über Prozesse und Daemons auf Habré. Leider ist es jedoch noch schwieriger, Hosting mit Unterstützung für den Befehl pcntl_fork zum Erstellen von untergeordneten Prozessen in PHP zu finden als mit Socket-Unterstützung, sodass Sie die klassische Daemonisierungsmethode aufgeben müssen. Außerdem können solche Programme nicht unter Windows debuggt werden. Forks existieren nur auf *nix-Betriebssystemen. Trotzdem haben wir aus dem Artikel etwas Nützliches gelernt, nämlich die Erstellung einer PID-Datei, die die Prozess-ID speichert, die es nicht zulässt, dass zwei Prozesse gleichzeitig ausgeführt werden - mehr dazu weiter unten.

Infolgedessen habe ich den PHP-Code des ws echo server-Skripts leicht modifiziert, indem ich den Code zum Umschalten der Ein- / Ausgabestreams STDIN, STDOUT, STDERR darin untergebracht und dadurch den Start des ws-Servers von der Konsole aus vereinfacht habe:

$ php -q /home/pfad/echows.php &

Habe einen gut funktionierenden Daemon ohne pcntl_fork. Es wird über die Konsole gestartet, löst sich von der Konsole und alles funktioniert einwandfrei, um auf alle Benutzeranfragen unter ws://yourdomain.com:8889 zu antworten, und wird korrekt geschlossen, wenn eine „OFF“-Nachricht gesendet wird. Aber hier ist das Problem, es ist nicht möglich zu überprüfen, ob der Daemon läuft oder nicht und dadurch einen doppelten Start des Daemons zu vermeiden. Ja, beim Start wird die Datei pid_file.pid erstellt, die die Prozess-ID (eindeutige Prozessnummer im OS * nix-System) unseres Daemons speichert, und wenn der Daemon korrekt beendet wird, z. B. wenn die „OFF“-Meldung kommt erhalten, wird diese Datei gelöscht. Beim Start können Sie natürlich überprüfen, ob diese Datei vorhanden ist, und wenn die Datei vorhanden ist, dann melden, dass der Daemon bereits läuft, und so einen doppelten Start vermeiden, aber was ist, wenn der Daemon seine Arbeit falsch abgeschlossen hat und es nicht getan hat? Löschen Sie die Datei pid_file.pid, in diesem Fall wird der Daemon nie wieder ausgeführt. Auch hier ist es uns gelungen, auf Habré eine hervorragende Funktion zu finden, um das Vorhandensein eines Daemons zu überprüfen.


if(is_file($pidfile)) (
// auf Prozess prüfen, posix_kill ist möglicherweise veraltet, muss möglicherweise ersetzt werden, wenn auf PHP 5.3+ migriert wird
if(posix_kill($pid,0)) (
//Daemon läuft bereits
gib true zurück;
) anders (

if(!unlink($pidfile)) (
consolemsg("FEHLER");
Ausgang (-1);
}
consolemsg("OK");
}
}
falsch zurückgeben;
}

Und wieder besteht das Problem darin, dass sich die Funktion posix_kill($pid,0) aus dem gleichen Grund wie pcntl_fork als funktionsunfähig herausstellte. Das konnte ich mir nicht gefallen lassen und habe wieder eine "listige" Lösung entwickelt. Weil Ich habe mich trotzdem entschieden, die Funktionalität zu implementieren, die den Status des ws-Servers anzeigt, dann brauche ich irgendwie eine Funktion, die den Status des Prozesses im Betriebssystem anzeigt. Um diese Funktion zu implementieren, verwenden wir den Befehl exec(), mit dem Sie beliebige Konsolenbefehle ausführen können. Und wenn wir das tun

Exec("ps -aux -p ".$pid, $ausgabe);

Wenn der Daemon läuft und über $pid verfügt, werden als Ergebnis im $output-Array Informationen über den Daemon (Prozess) angezeigt.

USER PID %CPU %MEM VSZ RSS TT STAT STARTZEIT BEFEHL aow 62335 0.3 0.1 120080 16020 ?? SJ 16:31 0:00.02 php -q echows.php

Damit haben wir wirklich funktionierende Funktionen ohne posix_kill, die prüfen, ob der Daemon läuft bzw. Daten darüber ausgibt.

Aktualisierung 14.08.2017: Das obige Beispiel verwendet die BSD-Syntax für den Befehl ps. Für die meisten * Nix Systeme Es wird großartig sein, und dieser Befehl listet alle Prozesse auf, anstatt den mit der PID-ID. Beginnend mit ws server admin panel v.0.4. und höher verwendet die klassische Syntax, die auf den meisten *nix-Systemen korrekt funktioniert.

Funktion isDaemonActive($pidfile) (
if(is_file($pidfile)) (
$pid = file_get_contents($pidfile);
// Prozessstatus abrufen
$status = getDaemonStatus($pid);
if($status["run"]) (
//Daemon läuft bereits
consolemsg("Daemon läuft bereits info=".$status["info"]);
gib true zurück;
) anders (
//pid-Datei existiert, aber es gibt keinen Prozess
consolemsg("es gibt keinen Prozess mit PID = ".$pid.", letzter Abbruch war abnormal...");
consolemsg("Versuchen Sie, die PID-Datei zu trennen...");
if(!unlink($pidfile)) (
consolemsg("FEHLER");
// PID-Datei kann nicht zerstört werden. Fehler
Ausgang (-1);
}
consolemsg("OK");
}
}
falsch zurückgeben;
}

getDaemonStatus($pid) (
$result = array("run"=>false);
$ausgabe = null;
exec("ps -aux -p ".$pid, $ausgabe);

If(count($output)>1)(//Wenn es mehr als eine Zeile als Ergebnis der Ausführung gibt, dann gibt es einen Prozess! weil die erste Zeile der Header ist und die zweite bereits der Prozess
$result["run"] = true;
$result["info"] = $output;//String mit Informationen über den Vorgang
}
$ergebnis zurückgeben;
}

Nun, da die Statusprüffunktion fertig ist, können wir den Daemon nicht von der Konsole aus starten, sondern durch Ausführen des PHP-Befehls exec("php -q echows.php &"); und schalten Sie den Daemon mit der OFF-Nachricht aus.
Das letzte, was im ws Echo-Server und im ws-Client geändert werden muss, ist das Hinzufügen einer AJAX-Anfrage zum Server vor dem Verbinden, die ihn auslösen würde, wenn er ausgefallen ist. Jetzt brauchen wir nicht über den Zustand des Dämons nachzudenken, denn. Wir wissen, dass selbst wenn der Server neu gestartet wurde, der Client ihn beim ersten Anruf abholt.

Browser-Bedienfeld WS-Server

Ich werde ein einfaches Kontroll- und Überwachungssystem für Dämonen entwickeln. Es ist sehr einfach und besteht aus mehreren Dateien echowsadmin.html (Admin-Panel), echowsadmin.js (Admin-Panel-Logik), echowsadmin.php (ws echo server management logic). Es stellte sich als überraschend einfach heraus, dieses System zu entwickeln, ich verbrachte nicht mehr als 1 Stunde meiner Zeit damit.

Um zu verhindern, dass jeder Benutzer den Daemon mit dem OFF-Befehl ausschaltet, habe ich diese Funktionalität aus dem PHP-Code des ws Echo-Servers entfernt. Dementsprechend durch Implementieren der Shutdown-Funktion vom Daemon-Steuersystem. Die Umsetzung ist nicht die eleganteste, ich verwende statt Signals die Datei off_file.pid, aber es ist garantiert, dass keine zusätzlichen Bibliotheken benötigt werden und der Shutdown korrekt erfolgt. Weil auf ws-server while-Schleife hängt in den Momenten des Abhörens von Socket-Nachrichten, dann müssen Sie nach dem Erstellen von off_file.pid eine Verbindung zum ws-Server herstellen, damit er das Ende des Zyklus erreicht und nach off_file.pid sucht, dafür mache ich einen kleinen Trick, imitiere eine Socket-Verbindung von echowsadmin.php und führten zu einer gewissen Verzögerung, bis alles funktionierte und das Skript einen erfolgreichen Abschluss der Arbeit meldete. Download (veraltetes Archiv, neuer in ), vergessen Sie nicht, den Speicherort der echowsadmin.php-Datei auf Ihrem Hosting in echowsadmin.js in Zeile 10, die Adresse von echowsstart.php in socket.js und die Adresse des ws-Servers anzugeben in echowsadmin.php (oder besser gesagt nicht die Adresse und den Port, da die Datei auf dem Server liegen muss, wird die Adresse immer 127.0.0.1 sein), wo unser Single-Cell-Mini-Client versuchen wird, eine Verbindung herzustellen, wenn das ws echo Server ist ausgeschaltet. Ich habe die Schaltfläche zum Neustart des ws Echo-Servers nicht erstellt, da klar ist, dass Sie dazu auf Stopp und dann auf Start drücken müssen, und diese Aktion auf einer Schaltfläche praktisch nicht erforderlich ist. Diese gesamte Steuerung funktioniert nur unter *nix Betriebssystemen, d.h. beim Hosten. Und so sieht sie aus.

Offensichtlich gibt es einiges zu verbessern:

  • Verbessern Sie die Darstellung und machen Sie detailliertere Angaben zum Status des ws-Servers
  • Ausgabe hinzufügen, um mehr zu protokollieren genaue Informationüber den belegten Speicher und die Anzahl der aktuellen Verbindungen
  • Machen Sie einen Scheck für Betriebssystem und eine Version für Denver und Windows entwickeln
  • Autorisierung vornehmen

Aber in meinem Fall bestand die Aufgabe darin, mir selbst ein einfaches Werkzeug zu machen, um den Zustand des Daemons über das Web zu überwachen. Übrigens, mit einer kleinen Modifikation kann dieses Ding verwendet werden, um jeden Daemon zu überwachen, nicht nur ws.

Was die Implementierung für Windows betrifft, können alle Stellen, an denen pid durch Überprüfung umgangen wird, und somit die Startfähigkeit gewährleistet werden.

If (strtoupper(substr(PHP_OS,0,3)) === "WIN") ( )

Ob der Daemon läuft oder nicht, genügt es, einfach durch das Vorhandensein der PID-Datei zu prüfen.

Als ich am Wochenende war, habe ich vergessen, den ws Echo-Server auszuschalten, dadurch betrug seine Lebensdauer 233774 Sekunden, d.h. Irgendwann um die 3 Tage blieb der belegte Speicher bei etwa 0,1%, was darauf hinweist, dass die Lösung das Recht auf Leben hat.

Feedback, Kommentare sind immer willkommen. Ich werde das Thema weiter ausbauen und wie versprochen einen einfachen Chat umsetzen.

Meine Artikel über PHP-Daemons und Web-Sockets

  • PHP-Web-Socket-Server, PHP-Daemon-Start

Mit dieser Programmiersprache können Sie Websites und Webanwendungen erstellen lokalen Computerüber Apache-Server. Die meisten modernen Internetseiten sind in PHP geschrieben. Die Seiten dieser Sites sind dynamisch, im Gegensatz zu den alten Sites mit HTML-Markup.

Alle Informationen werden in der Datenbank gespeichert MySQL-Daten, aus denen die notwendigen dieser Moment. Erfahrene Programmierer können Websites von Grund auf neu erstellen und z gewöhnliche Benutzer Es ist besser, die Dienste vorgefertigter Engines (WordPress, Joomla oder Drupal) zu nutzen, bei denen es ausreicht, Ihre eigenen Inschriften hinzuzufügen - und Ihre Website ist fertig. Um Ihre Websites auf Ihrem lokalen Computer zu erstellen, müssen Sie sie kostenlos herunterladen neue Version PHP. Danach kann die fertige Seite ins Internet hochgeladen werden.

Möglichkeiten:

  • Erstellung und Bearbeitung von Websites und Programmen;
  • dynamisches Site-Content-Management;
  • Testen verschiedener Engines für Websites;
  • Verwendung von HTTP-Cookies.

Arbeitsprinzip:

Lassen Sie uns nun verstehen, wie PHP funktioniert. Zunächst müssen Sie beispielsweise einen virtuellen Apache-Server herunterladen und installieren. Dazu können Sie fertige Entwicklerkits Denwer, XAMPP, OpenServer oder ein anderes Programm verwenden. Nach der Installation lokaler Server Sie müssen den Inhalt des PHP-Archivs dorthin kopieren. Danach können Sie Websites von Grund auf neu auf Ihrem virtuellen Hosting schreiben oder die erforderlichen Site-Engines installieren, um Ihre Internetprojekte zu erstellen.

Nachdem Sie für das Hosting und eine Domain bezahlt haben, können Sie Ihre Website ins Internet hochladen und damit beginnen, Ihre kreativen Fähigkeiten zu verwirklichen. Mit der PHP-Sprache können Sie den Inhalt Ihrer Websites schnell und bequem erstellen und bearbeiten. Um beispielsweise das Design des unteren Rands der Website zu ändern, müssen Sie nur eine Datei bearbeiten, und die Änderungen werden auf jeder Seite Ihres Projekts wiedergegeben. In HTML müssten Sie jede Seite einzeln bearbeiten.

Vorteile:

  • Erstellung dynamischer Websites in PHP;
  • Nutzung von Datenbanken;
  • die Möglichkeit, PHP kostenlos auf einen Computer herunterzuladen
  • Unterstützung für das Erstellen mehrerer Datenbanken und Sites auf dem lokalen Computer;
  • weit verbreitete und beliebte Programmiersprache.

Minuspunkte:

  • Um auf einem Computer zu arbeiten, müssen Sie möglicherweise einen virtuellen Server installieren.

Heute ist PHP die am weitesten verbreitete Programmiersprache für Websites und Webanwendungen. Um eigene Projekte zu erstellen, müssen Sie also lediglich Ihr Windows-System an diese Sprache anpassen. Außerdem müssen Sie für die Arbeit einen Server installieren virtuelles Hosting Ihre lokalen Websites. Mit dieser Programmiersprache können Sie Ihre Internetprojekte erstellen und ausführen, daher empfehlen wir Ihnen, sie kostenlos herunterzuladen letzte Version PHP.

1C-Bitrix - hochprofessionelles Verwaltungssystem Ihre Webprojekte, mit denen Sie Online-Shop-Bestellungen flexibel verwalten können reduziert das Volumen sich wiederholender Prozesse und die Qualität des Kundenservice zu verbessern.

Zusätzlich zu den Hauptvorteilen des Bitrix-Systems können alle Benutzer die hohen ansprüche an dieses produkt sind bekannt zu den technischen Parametern des Hostings. Wir haben es geschafft, unsere Server zu optimieren und abzustimmen. Jetzt HyperHost ist ein ausgezeichneter Hochleistungshost.
Im Folgenden betrachten wir den Prozess der Installation dieses Systems auf unserem Hosting:
Schritt 1
Bevor Sie mit der Installation von CMS Bitrix beginnen, müssen Sie einige Änderungen an der individuellen php.ini für Ihr Konto vornehmen. Wie das geht, sehen Sie in den Screenshots:



Schritt 2
Nachdem Sie die erforderlichen Parameter in der individuellen php.ini für Bitrix CMS eingegeben haben, müssen Sie das Installationsskript herunterladen und hochladen:
Bitrix-CMS (bitrixsetup.php).
Sie können es unter der Adresse von der offiziellen Website 1c-bitrix.ru herunterladen:
http://www.1c-bitrix.ru/download/cms.php

Schritt 3
Als nächstes müssen wir es auf den Server im Home-Verzeichnis Ihrer Website hochladen.
Dies kann sowohl über die Cpanel-Systemsteuerung als auch über FTP erfolgen
Um über das Bedienfeld herunterzuladen, müssen Sie Folgendes tun:






Schritt 4
Um die Site zu installieren, müssen wir eine Datenbank (DB) und einen Datenbankbenutzer erstellen und den Benutzer zur erstellten Datenbank hinzufügen








Schritt 5
Beginnen wir mit der Installation von CMS Bitrix

Wichtig! Sie können den Betrieb der Website auf unserem Hosting lokal überprüfen, ohne das DNS (Domain-Delegation) zu ändern, Sie müssen sich nur registrieren hosts-Datei folgender Eintrag:

53.114.112.45 domain.ru

Wo,
domain.ru - Ihre Domäne.
53.114.112.45 - IP-Adresse Ihres Hosting-Servers. Um nach der Bestellung zu sehen, welche IP Ihre Seite in unserem Unternehmen hat, müssen Sie Folgendes tun:
Gehen Sie zum Site Control Panel im Abschnitt "Webdomains" und sehen Sie, welche IP-Adresse für Ihre Site angegeben ist;

Die hosts-Datei befindet sich in den folgenden Pfaden:

- Windows XP/2003/Vista/7: WINDOWS\system32\drivers\etc\hosts
- Windows NT/2000: WINNT\system32\drivers\etc\hosts
- Windows 95/98/ME: WINDOWS\hosts
- Mac OS X 10.2+: /private/etc/hosts
-Linux: /etc/hosts

Nachdem Sie diese Änderungen vorgenommen haben, wird die Version der Website, die Sie auf unser Hosting übertragen haben, in Ihrem Computerbrowser unter der Adresse domain.ru geöffnet.
Vergessen Sie nicht, diesen Eintrag aus der Hosts-Datei zu entfernen, nachdem Sie die Leistung Ihrer Website überprüft haben.
Navigieren Sie in Ihrem Browser zu http://ihre_domain/bitrixsetup.php, wählen Sie das Distributionskit aus, das Sie installieren möchten.
Wir zeigen Ihnen ein Beispiel für die Installation eines CMS auf dem Distributionskit „Site Management“ und einer Demoversion


Der nächste Schritt besteht darin, die Distribution auf den Server herunterzuladen und zu entpacken.



Schritt 6

CMS-Installation
Nach dem Entpacken der Distribution werden Sie auf die CMS-Installationsseite weitergeleitet


Lesen und bestätigen Sie die Lizenzvereinbarung

Schritt 7

Wir geben unsere Daten ein und setzen ein Häkchen neben den Punkt „In UTF-8-Codierung installieren“, danach fahren wir mit dem nächsten Schritt fort


Schritt 8

In diesem Schritt wird die Verifizierungsseite angezeigt, hier wird auf Übereinstimmung mit den Servereinstellungen geprüft korrekter Einbau und Arbeit von CMS Bitrix.


Schritt 9

Verbindung zur Datenbank herstellen.
In den Feldern müssen Sie die Verbindungsdaten zu der von uns erstellten Datenbank angeben Schritt 4


Schritt 10

Dieser Schritt geht automatische Installation Produkt

Schritt 11

Erstellen Sie einen Administrator für diese Site
Sie müssen die erforderlichen Felder ausfüllen: Login, Passwort und Passwortbestätigung.

Schritt 12

Wählen Sie eine Installationsvorlage aus.
Zum Zeitpunkt der Installation ist es nur 1 - „fest“, da dies die Standardinstallation ist.

Themenauswahl


Geben Sie Informationen zu Ihrem Unternehmen ein, für das Sie die Site installieren, und starten Sie die Installation des ausgewählten Designs.


Glückwunsch! Sie haben CMS Bitrix installiert.
Es sollte beachtet werden, dass die Testergebnisse sehr hohe 1C-Leistungsergebnisse auf unseren Servern zeigten.
Auf dem VPS-Start-Tarif aus unserer Linie war die Leistung 88,58 bei der norm 30

zeigte bessere Ergebnisse 127,84 mit der Norm 30
Diese Zahlen gehören zu den höchsten unter den Hosting-Unternehmen in der GUS.
Die Firma HyperHost wünscht Ihnen eine angenehme Arbeit!

8775 Mal Heute 9 mal angesehen

Keine Seite ist vollständig ohne Navigation, oder wie das „Seitenmenü“ auch genannt wird. So kann das Site-Menü einstufig und mehrstufig in Form eines Baums sein. Wenn es keine besonderen Schwierigkeiten bei der Implementierung mit einem einstufigen Menü gibt, müssen Sie beim Erstellen eines mehrstufigen Menüs sorgfältig überlegen.

Das Wichtigste bei dieser Aufgabe ist es, eine Datenbank für unser mehrstufiges Menü zu entwerfen. Lassen Sie uns eine Kategorientabelle mit drei Feldern erstellen Ausweis, Titel, Elternteil Wo:

  • AUSWEIS- Kennung
  • Titel- Menüname
  • Elternteil- Übergeordnete Standardkategorie 0

Das Feld ist für die Verzweigung des Menüs zuständig Elternteil Wenn Elternteil = 0, dann ist diese Kategorie die übergeordnete Kategorie. Um Kinder zur übergeordneten Kategorie hinzuzufügen, müssen Sie im übergeordneten Feld angeben AUSWEIS der gewünschte Elternteil. Zum Beispiel:

Tabellen mit Kategorien

Wie aus der Tabelle ersichtlich ist, die übergeordnete Kategorie Autos es gibt zwei Nachkommen Mazda Und Honda bereichsbezogen Elternteil. Und die Kategorie Motorräder zwei Nachkommen sind Kawasaki Und Harley. Gleichzeitig hat die Kategorie Boote keine Nachkommen. Ich hoffe, Sie verstehen, wie man Kategorien verknüpft.

Als nächstes gehen wir von den Worten zur Praxis über. Lassen Sie uns die Tabelle "Kategorien" erstellen.

CREATE TABLE IF NOT EXISTS `categories` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `parent` int(10) unsigned NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ; -- -- `categories`-Tabellendaten ausgeben -- INSERT INTO `categories` (`id`, `title`, `parent`) WERTE (1, "Autos", 0), (2, "Motorräder", 0) , (3, Mazda, 1), (4, Honda, 1), (5, Kawasaki, 2), (6, Harley, 2), (7, Mazda 3, 3), (8, „Mazda 6“, 3), (9, „Limousine“, 7), (10, „Fließheck“, 7), (11, „Boote“, 0), (12, „Liftback“, 8), (13, „Crossover“, 8), (14, „Weiß“, 13), (15, „Rot“, 13), (16, „Schwarz“, 13), (17, „Grün“, 13), (18, Mazda CX, 3 ), (19, Mazda MX, 3);

Der Arbeitsalgorithmus besteht aus Folgendem:

Erstellen einer Datenbankverbindung

query("SET NAMES "utf8""); /* * Dies ist der "offizielle" objektorientierte Weg, dies zu tun * jedoch funktionierte $connect_error nicht bis PHP 5.2.9 und 5.3.0. */ if ($mysqli->connect_error) ( die("Verbindung fehlgeschlagen (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Wenn Sie sich über die Kompatibilität mit Versionen sicher sein wollen vor 5.2.9, * besserer Code wie dieser */ if (mysqli_connect_error()) ( die("Verbindung fehlgeschlagen (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); )

Schreiben einer Funktion zum Abrufen von Daten aus der Kategorientabelle

//Holen Sie unser Menü-Array aus der Datenbank als Array-Funktion getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Erstellen Sie ein Array wo der Array-Schlüssel ist die Menü-ID $cat = array(); while($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; )

Wir erhalten ein Array wie dieses, wobei der Array-Schlüssel die Kategorie-ID ist.

Array Tree-Funktion von Tommy Lacroix

//Die Funktion zum Erstellen eines Baums aus einem Array von Tommy Lacroix function getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Falls keine Anhänge vorhanden sind if (!$node[" parent"])( $tree[$id] = &$node; )else( //Wenn Kinder vorhanden sind, dann Schleife durch das Array $dataset[$node["parent"]][" childs"][$id] = &$ node; ) ) return $tree; )

Abrufen eines Arrays in Form eines Baums

Ganzes Skript

query("SET NAMES "utf8""); /* * Dies ist der "offizielle" objektorientierte Weg, dies zu tun * jedoch funktionierte $connect_error nicht bis PHP 5.2.9 und 5.3.0. */ if ($mysqli->connect_error) ( die("Verbindung fehlgeschlagen (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); ) /* * Wenn Sie sich über die Kompatibilität mit Versionen sicher sein wollen vor 5.2.9 * ist es besser, diesen Code zu verwenden */ if (mysqli_connect_error()) ( die("Verbindungsfehler (" . mysqli_connect_errno() . ") " . mysqli_connect_error()); ) //Unser Menü-Array abrufen aus der Datenbank als Array-Funktion getCat($mysqli)( $sql = "SELECT * FROM `categories`"; $res = $mysqli->query($sql); //Erzeuge ein Array, wobei der Array-Schlüssel das Menü ist ID $cat = array(); while ($row = $res->fetch_assoc())( $cat[$row["id"]] = $row; ) return $cat; ) //Funktion zum Erstellen eines Baums aus einem Array von Tommy Lacroix function getTree($dataset) ( $tree = array(); foreach ($dataset as $id => &$node) ( //Wenn es keine Anhänge gibt if (!$node["parent" ])( $tree[$id] = &$node; )else( //Wenn Kinder vorhanden sind, dann iteriere durch das Array $dataset[$node["parent"]]["childs"][$id] = &$node; ) ) return $tree; ) //Machen Sie sich bereit Array mit Daten $cat = getCat($mysqli); //Ein Baummenü erstellen $tree = getTree($cat); //Template zur Anzeige des Menüs in Form einer Baumfunktion tplMenu($category)( $menu = "
  • ".$category["title"].""; if(isset($category["childs"]))( $menu .= "
      ".showCat($category["Kinder"]) ."
    "; ) $menü .= "
  • "; return $menu; ) /** * Unser Template rekursiv lesen **/ function showCat($data)( $string = ""; foreach($data as $item)( $string .= tplMenu($item); ) $string zurückgeben; ) //HTML-Markup abrufen $cat_menu = showCat($tree); //Echo anzeigen "
      ". $cat_menu ."
    "; ?>

    Das Ergebnis der Arbeit

    Mehrstufiges Menü in PHP + MySQL für Admin

    Wenn Sie dieses Menü im Admin-Bereich Ihrer Website verwenden möchten, müssen Sie einige Funktionen umschreiben tplMenü(), showCat().

    ".$kategorie["titel"].""; )else( $menu = " "; ) if(isset($category["childs"]))( $i = 1; for($j = 0; $j< $i; $j++){ $str .= "→"; } $i++; $menu .= showCat($category["childs"], $str); } return $menu; } /** * Рекурсивно считываем наш шаблон **/ function showCat($data, $str){ $string = ""; $str = $str; foreach($data as $item){ $string .= tplMenu($item, $str); } return $string; } //Получаем HTML разметку $cat_menu = showCat($tree, ""); //Выводим на экран echo ""; ?>

    Das Ergebnis der Arbeit

    Wählen Sie Autos → Mazda →→ Mazda 3 →→→ Limousine →→→ Hatchback →→ Mazda 6 →→→ Liftback →→→ Crossover →→→→ Weiß →→→→ Rot →→→→ Schwarz →→→→ Grün →→ Mazda CX → Mazda MX → Honda Motorräder → Kawasaki → Harley-Boote

    Wird geladen...
    Spitze