2012-03-31 5 views
1

Ich muss ein PHP-Skript schreiben, das von einem setInterval ("ajaxrequest ('ftp.php', 'Kontext')", 1000) aufgerufen wird; Funktion. Das PHP-Skript ist ziemlich einfach. Es ist ein Array von FTP-Adressen. Es führt eine Schleife durch das Array und überprüft jede IP-Adresse, die online ist oder nicht.PHP-Skript, was überprüft FTP-Server sind online?

Hier ist ein Beispielcode des PHP-Skript:

$conn_id = ftp_connect("192.168.1.108",21,1) or die ("Cannot connect to the server"); 
ftp_close($conn_id); 

Also im Grunde, was hier passiert: Wir haben ein Javascript, das eine PHP-Skript jede Sekunde Aufruf zu überprüfen, ob der FTP-Server online ist oder nicht. Versuchen Sie im PHP-Skript, die Verbindung herzustellen, wenn es nicht möglich ist, "Verbindung zum Server nicht herzustellen".

Mein Problem ist, dass ich diesen Weg machen muss, habe keine Chance, es von Cron Job zu verwenden, weil wir es über eine Webseite überprüfen müssen, ob die Server online sind oder nicht in Echtzeit. Aber auf diese Weise gibt es irgendwo ein Speicherleck, das mein Gedächtnis sehr schnell verschlingt.

Gibt es eine Möglichkeit, dass ich den Speicher freigeben oder dieses Problem auf andere Weise lösen kann?

+0

Verwenden Sie stattdessen fsockopen(). Auch hier ist eine verwandte Antwort auf Ihre Frage http://stackoverflow.com/questions/2226374/test-if-port-open-and-forwarded-using-php –

+0

Vielen Dank für Ihre schnelle Antwort. es ist leider nicht das Problem hier zu lösen ist, wie ich es gemacht habe: $ conn_id = fsockopen ("192.168.1.108", 21, $ errno, $ errstr, 1) oder sterben ("Kann nicht mit dem Server verbinden"); fclose ($ conn_id); und immer noch das Speicherproblem, obwohl es ein wenig später beginnt dann mit der ftp_connect() -Funktion – Wermerb

+0

versuchen, hier zu lesen http://php.net/manual/en/function.fsockopen.php –

Antwort

1

betrachten Sie diese Antwort, um ein Vorschlag und eine Richtung zu sein, ich musste nie solche Sachen tun, aber wenn ich es trug, um es gegenüberzustellen.

Ich würde einen Cron schreiben, der den FTP-Port über eine IP scannen wird. Dieser Cron wird einmal pro Minute ausgeführt. Die FTPs, die nicht antworten, werden in db gehalten.

Ich würde AJAX Anfragen an den PHP nur diese Daten aus der Tabelle abrufen.

Was dies zu tun ist, damit asynchron die beiden wichtigsten Aufgaben

  • Liste alle ftp execute nicht
  • Update Benutzer mit der Liste der ftp der reagiert nicht
  • reagiert

Auch Ihre Methode Ich muss herausfinden, dass die FTP-Server nicht für jede Instanz funktionieren, und dies wird den Server noch mehr belasten, wenn mehrere Anfragen gestellt werden. Auf diese Weise wird die Ressource hungrig Ausführung einmal machen, die für alle gültig ist: D

hoffe, das hilft ...

EDIT nicht sicher, ob dies Ihr cron Dilemma Adressen, aber aktualisiere

+0

Vielen Dank, das ist die Idee sieht wirklich gut aus Bis jetzt werde ich es versuchen. Ich denke jetzt verstehe ich, warum meine App so speicherhungrig ist, schätze sie wirklich für deinen Rat. – Wermerb