Mojo1987 schrieb:
Stimmt so nicht, du kannst exec sehr wohl so verwenden, das er eben NICHT blockiert. Schau dir einfach mal die Docu dazu an...
Das ist dann aber nicht exec geschuldet, sondern bedient sich dem Trick, dass das Programm in der Shell entsprechend gestartet werden würde. Standardmäßig arbeitet es blockierend, außer man leitet es eben in ein Outfile um, plus lässt es asynchron starten. Ähnlich unter Windows mit
start .... Also blockiert hier exec so lange, bis der Prozess von der übergebenen Kommandozeile gespawnt wurde, mit dem Nebeneffekt, dass die Kommandozeile, das Programm eben asynchron startet.
Daaron schrieb:
So. Hast du schon einmal unter WINDOWS einen Cron für LINUX geschrieben, der dann ungetestet auf ein Produktivsystem kam?
Wer verwendet beim Entwickeln Crons? Das Skript wird per CLI gestartet und damit entwickelt. Da braucht es keine Crons und verwendet man gleich PHP (per CLI gibt es defacto keinen Timeout), läuft das Teil wiederum auf jedem OS, über jeglichen Zeitraum. Man brauch keine großen Anpassungen für PHP oder Windows, insofern die Umgebung gleich ist (externe Tools bspw. in $PATH bzw. %PATH%).
Man kann doch auch wunderbar einen Daemon damit basteln, insofern die Mitteln in PHP selbst ausreichend sind. Nix anderes als mit Python/Perl, mit entsprechenden Einschränkungen.
Daaron schrieb:
Es ist eben NICHT Hupe, welches OS man zum Entwickeln verwendet. Das fängt ja schon mit den unterschiedlichen Rechte-Strukturen an. Unter Linux kann manches include() versacken, das unter Windows noch durch geht. Und auch das Basis-Verzeichnis unterscheidet sich bei PHP hinsichtlich Win und Linux.
Das hat aber jetzt was mit PHP oder einer Programmiersprache/VM zu tun? Das ist alles eine Konfiguration des Webservers bzw. des CLI/CGI/FPM. PHP wird hierbei nur ausgeführt und dem ist es lasch gesagt Schnurz egal, was da läuft. Wenn die Rechte hierbei nicht stimmen, kann PHP nichts dafür. Da liegt eben eine Fehlkonfiguration im Werbserver/FTP/... vor und das Teil muss unter dem richtigen User gestartet werden bzw. die Rechte entsprechend verändert werden.
Daaron schrieb:
Außerdem stehen dir auf dem Produktivserver oftmals ganz andere Bibliotheken & Versionen zur Verfügung als unter Windows. Was bringt es dir, wenn du im Windows mit PHP 5.5 entwickelst, das Zeug dann aber auf einem PHP 5.3-Server unter Ubuntu 12.04 laufen soll?
Da kann auch wieder was das System für? Du willst mir doch hier nicht erzählen, dass du auf deinem Entwicklungssystem die selbe Konfiguration hast oder mehrere Systeme entsprechend der Serverumgebung bootest?! Nein, da werden einfach mehrere PHP-Versionen installiert mit unterschiedlichen (optimalerweise identischen) Konfigurationen und dann ist gut. Ggf. macht man bei Versionskonflikten vorher eine Prüfung und stellt ggf. spezielle Switches an externe Programme/Bibliotheken an/aus. Zur letzten Rettung kompiliert man sich die entsprechende Version und legt sie in einem Verzeichnis ab oder aber man nutzt vorgefertigte Binaries, damit die Umgebung stimmt. Das hat aber alles nichts mit PHP selbst zu tun, sondern man fixt hier ja nur die Umgebung.
Daaron schrieb:
Da gibt es einige Fallstricke, so hat z.B. die PHP 5.3 - Implementierung von imagick in Ubuntu einen Bug beim Erzeugen von GIFs. Da kannst du unter Windows oder einer anderen Distribution 100x lokal testen, es wird auf dem Ubuntu-Server nicht laufen.
Und auch hier: Was kann das System dafür? Dann muss man sich an der Stelle eben eine weitgehend identische, aber bugfreie Version heraussuchen und diese nutzen. Zur Not selbst kompilieren. Ich richtige mir doch hier aber wiederum nicht die identische Konfiguration auf meinem Entwicklungssystem ein. Dafür ist dann der Testserver da, damit man die Lauffähigkeit und korrekten Output überprüfen kann.
Es ist doch hier das Selbe, wie in Java. Ist die VM installiert, läuft es einfach. Die ganze Problematik ist doch bei weitem nicht so gravierend, wenn man nur entsprechende Funktionen und Klassen nutzt, die dann alles entsprechend zurechtbiegen. Was passiert, wenn man dies nicht tut, sieht man doch hervorragend an den Entwicklern, dessen Programme unter XP released wurden, aber unter späteren Versionen evtl. nicht mehr laufen. Da kommen fixe Pfade ("C:\Dokumente und Einstellungen\...", "C:\Windows\...") rein, anstatt vordefinierte Variablen, Konstanten oder Properties zu nutzen, da wird ein Pfad einfach mittels \ zusammengesetzt, anstatt z.B. System.IO.Path.Combine in C# zu nutzen etc. pp. Die Sprache/Umgebung hat hierbei wiederum aber wenig Einfluss, wenn der Entwickler einfach zu doof ist, entsprechend vorhandene Werkzeuge zu nutzen, womit man das alles portabel halten kann. Der derbste Fehler kam ja mit der Änderung bzgl. der Maus in 8.1. Auf ein Mal waren alle Programme, welche auf nicht dafür gedachte APIs zugreifen. Ein WM_MOUSEMOVE ist eben nicht mit einem WM_INPUT als Nachricht gleichzusetzen oder entsprechend gleich auf DirectInput/XInput zu setzen. Aber entsprechend viele sind dabei auf die Gusche geflogen.
Mercsen schrieb:
Mit dem NodeJS Server sehe ich einige Vorteile.
Natürlich mag es Vor- und Nachteile haben, aber das grundsätzliche Problem wird hierbei ja nicht gelöst, sondern einfach umschifft und neue Probleme geschaffen.
1. Node.JS muss installiert werden
2. Node.JS muss konfiguriert werden
3. Node.JS muss gewartet werden
4. evtl. Skripte konvertieren (hab mit Node.JS noch nicht all zu viel gemacht)
4. einfach umschiffen, indem man die bestehenden PHP-Skripte spawnt?
5. ...?
Mercsen schrieb:
Wie soll man denn mit WebSockets eine Verbindung zu PHP aufbauen? Also eine dauerhafte? Wenn es geht entschuldige ich mich, dann ziehe ich diesen zweifel zurück.
Bspw. ein kleiner Chat:
http://www.sanwebe.com/2013/05/chat-using-websocket-php-socket Dafür wurden Web Sockets ja geschaffen, damit Polling abgeschafft werden kann, um eine bidirektionale Verbindung zu schaffen. Falls vom Browser nicht unterstützt, kann man ja immer noch auf Polling oder Long Polling umswitchen. Ggf. sind auch Server Sent Events brauchbar. Dafür ist aber die Problembeschreibung zu wage ("rennt in ein Timeout").
Mercsen schrieb:
Das kann man mit PHP und AJAX in der Form nicht lösen.
Doch, wunderbar sogar. Mittels Ajax verbindest du einfach auf eine URL, wo das entsprechende Skript liegt und setzt den Timeout entsprechend hoch, sodass du solange idlest, bis der Server Daten zurück sendet (nennt sich Long Polling). Öffne mal die Developer Konsole bei Facebook, da wird 1:1 das umgesetzt. Es geht ein entsprechend langer GET-Request auf /pull?... und dieser bleibt so lange erhalten, bis ein Update kommt. Und Facebook ist im Prinzip nichts anderes als PHP, außer dass hier die HHVM läuft.
https://www.facebook.com/note.php?note_id=14218138919 schrieb:
Real-time messaging:
This isn't by any means a new technique: it's a variation of Comet, specifically XHR long polling, and/or BOSH.
Wer es bebildert haben will:
http://stackoverflow.com/questions/...g-websockets-server-sent-events-sse-and-comet
Mercsen schrieb:
Wenn es unbedingt sein muss kann NodeJS (und das kann eigentlich ein beliebiger Server sein) ja die PHP Skripte aufrufen
Dann kann ich aber auch einfach das Timeout für die Skripte hochsetzen. Ich glaub das ist nicht Sinn der Sache.
Mercsen schrieb:
WO man entwickelt ist doch egal, solange man dort TESTET wo es gebraucht wird.
Eben, meine Rede. Ausführung steht oben.
Mercsen schrieb:
Was spricht dagegen PHP auf Windows zu entwickeln wenn die IDE die Datein sofort auf den Server lädt und sich das ganze dann auch Remote Debuggen lässt?
Funktioniert bspw. wunderbar in Kombination mit xdebug. Ein Testserver ist ja eben auch dazu gemacht, damit evtl. Probleme im Live-Betrieb identifiziert und ausgemerzt werden können.
Mercsen schrieb:
geht mir sehr nahe das Thema da ich exakt den Fehler gemacht habe und dachte man könnte schon irgendwie eine zeitkritische API in PHP entwickeln.
Die Frage ist natürlich, was der TE genau vor hat. Sind es ein paar Diagramme, die noch vor dem Timeout generiert werden sollten, dann lässt sich sowas wunderbar von PHP bewerkstelligen. Man muss halt ein wenig experimentierfreudig sein. Lösen lässt sich alles irgendwie. Wenn die Ausführung natürlich so lange dauert, dass sich die Eingabedaten einfach nur so stapeln, dann ist PHP der komplett falsche Weg oder man muss entsprechend Optimierungsarbeit leisten (ggf. mal HHVM versuchen, natürlich nur, wenn es mittels dem normalen Weg nicht anders geht). Nächste Frage wären Abhängigkeiten. Bspw. wenn imagemagick verwendet werden soll und hierbei die Erstellung des Bildes am längsten dauert, dann kann ich hierbei auch n simples Bash-/Batch-Skript verwenden. Der Performance ist es ja hierbei egal, ob nun von PHP, der Konsole oder sonstwo der Call her kommt.
Mercsen schrieb:
NodeJS war nur als Beispiel gedacht weil wirklich schnell erlernt, sicher und nicht hungrig ist.
Ja klar, aber eine Empfehlung ohne konkrete Anforderungen oder Bedingungen zu setzen, ist einfach wie mit nem Stock in nem Tunnel zu stochern. Evtl. hat er nur einen simplen Webhoster, deswegen vielleicht auch keine Möglichkeit zur Installation von gewissen Komponenten. Da bringt ihm der Tipp mit Node.JS herzlichst wenig, denn das kann er noch weniger installieren, außer der Hoster macht für ihn eine Ausnahme (was ich stark bezweifle).
