Ich habe ein kleines Problem. Ich muss im Rahmen eines kleines Projektes einige Klassen schreiben, die leider von mir selbst kommen müssen, da sie sonst nicht so zum Einsatz kommen können wie ich das möchte. Mit OOP und ähnlichem habe ich mich nun lange beschäftigt und schon einige Klassen geschrieben. Nun setze ich mich seit neuestem mit den verschiedenen Transfer Protokollen auseinander, momentan speziell mit dem FTP (File Transfer Protocol). Wo liegt nun eigentlich mein Problem? Ganz einfach, ich schreibe gerade eine FTP-Klasse, die mir für Uploads zu Verfügung stehen soll, da zum Beispiel die ftp()-Funktionen nicht immer verfügbar sind. Das Error-Handling löse ich wie immer mit Exceptions. Nun gibt es allerdings fünf verschiedene Arten von Responses vom FTP-Server.
1yz Kommando erfolgreich ausgeführt, erwartet weiteres Kommando
2yz Kommando erfolgreich ausgeführt
3yz Kommando erfolgreich ausgeführt, Server erwartet weitere Angaben zur weiteren Bearbeitung.
4yz Nichtausführung des Kommandos, handelt sich um temporäres Problem
5yz Nichtausführung des Kommandos
Zu diesen fünf Kategorien gibt es weitere fünf Unterkategorien.
x0z Syntax - Syntax errors, syntactically correct commands that don't fit any functional category, unimplemented or superfluous commands.
x1z Information - These are replies to requests for information, such as status or help.
x2z Connections - Replies referring to the control and data connections.
x3z Authentication and accounting - Replies for the login process and accounting procedures.
x4z Unspecified as yet.
x5z File system - These replies indicate the status of the Server file system vis-a-vis the requested transfer or other file system action.
Mein Problem ist jetzt, dass ich zuerst folgende Fehlerbehandlung hatte:
- Code: Alles auswählen
/**
* Checks if the response of a command is ok
* @name: FtpConnect::checkResponse()
* @access: public
* @param Sting $reply
* @return mixed
*/
public function checkResponse($reply)
{
$reply = trim($reply);
(int) $response = substr($reply, 0, 1);
if (is_numeric($response))
{
if ( != 2)
{
throw new Exception("$response");
}
else
{
return true;
}
}
}
Dummerweise geht dass so nicht ganz, da nicht nur alle Kommandos mit dem Response 200-299 richtig ausgeführt wurden, sondern alle von 100-399. Jedoch muss ich für die von 100-199 und die von 300-399 ja noch eine zusätzliche Behandlung einbauen. Dazu muss ich nun allerdings wissen, was damit gemeint ist, dass noch ein weiteres Kommando erwartet wird oder weitere Angaben. Welche Kommandos sind dabei gemeint? Kann mir da jemand ein paar Beispiele geben?
Nun drängt sich bei mir auch gleich noch eine andere Frage bei mir auf. Und zwar kann man mit Kommandos wie zum Beispiel DELE Dateien löschen, verschieben, erstellen etc., das Gleiche gilt auch für Verzeichnisse. Welche Dateien bzw. Verzeichnisse sind das allerdings? Die auf dem FTP-Client oder die auf dem FTP-Server. Sind es nämlich die auf dem FTP-Server kann ich mir die betreffenden Methoden in der Klasse sparen, da die von meiner FileHandler-Klasse erledigt wird, die auf Basis der file()-Funktionen arbeitet.
Ich wäre euch für eure Hilfe in diesen Fragen sehr dankbar.
MfG, Andy