Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Klient FTP oparty na Socketach
k0b3
post
Post #1





Grupa: Zarejestrowani
Postów: 138
Pomógł: 0
Dołączył: 1.08.2006
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Witam

Chciałbym zaczerpnąć trochę opinii.
Mam stworzyć aplikację do komunikacji i wymiany plików między klientem, a serwerem przez port FTP z interfacem w przeglądarce WWW
Wiem, że php ma w sobie odpowiednie mechanizmy i funkcję w związku z wymianą CLient->FTP, jednak muszę oprzeć się na Socketach.

Metody Połączenia, utrzymywania połączenia (listen), rozłączania i wiele innych obsługują sockety, jednak jak to ma się do listowania katalogów? Czy za pomocą socketów mogę usuwać lub uploadować pliki. Czy taka wymiana jest bezpieczna?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
k0b3
post
Post #2





Grupa: Zarejestrowani
Postów: 138
Pomógł: 0
Dołączył: 1.08.2006
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Bardzo dziwna sprawa.
Błędów składniowo językowych nie sypie. Również nie wyrzuca błędów z socketami:

Do każdego wywołania operacji dodałem wartość jaką zwraca socket_last_error()

Cytat
Open 195.88.30.227:21
220 Microsoft FTP Service

USER *** ErrorMessage: Success
331 Password required for kobe. ErrorMessage: Success

PASS *** ErrorMessage: Success
230 User kobe logged in. ErrorMessage: Success

SYST ErrorMessage: Success
215 Windows_NT ErrorMessage: Success

TYPE A ErrorMessage: Success
200 Type set to A. ErrorMessage: Success

PASV ErrorMessage: Success
227 Entering Passive Mode (195,88,30,227,47,3) ErrorMessage: Success

LIST ErrorMessage: Success
425 Can't open data connection. ErrorMessage: Success

No i gdzie tu jest błąd?


Dodaje całą klase która zarządza socketami, może znajdziecie problem

Kod
require_once('./Model.php');

class Ftp {

    public $host=null;
    public $port=null;


    private $socket;
    private $conn=FALSE;
    private $address;
    private $login=FALSE;

    public function __construct($host, $port=21) {
        $this->host = $host;
        $this->port = $port;
        $this->address = gethostbyname($host);
        $this->buffor();
    }

    public function connect() {
        $this->socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

        if($this->socket !== false) {
            $result = socket_connect($this->socket, $this->address, $this->port);

            if($result === true) {
                $this->conn = TRUE;
                return '<span id="command">Open '.$this->address.':'.$this->port.'</span><br />'.
                          '<span id="command_recv">'.socket_read($this->socket, 2048).'</span><br />';
            }
        } else {
            $this->conn = FALSE;
            return '<span id="command">Open '.$this->address.':'.$this->port.'</span><br />'.
                     '<span id="command_recv">Error: '.socket_strerror(socket_last_error($this->socket)).'</span><br />';
        }

    }


    public function isConnected() {
        return $this->conn;
    }

    public function send($command) {
        $command = $command."\r\n";
        socket_write($this->socket, $command, strlen($command));
        //Model::valideCommnad(&$command);
        $errorcode = socket_last_error();
        $errormsg = socket_strerror($errorcode);
        return $command.'ErrorMessage: '.$errormsg.'<br />';
    }

    public function recv($time) {
        usleep(100);
        $out = socket_read($this->socket, 2048);
        $errorcode = socket_last_error();
        $errormsg = socket_strerror($errorcode);

        return $out.'ErrorMessage: '.$errormsg.'<br />';
    }


    public function isLogin() {
        return $this->login;
    }


    public function getHost() {
        return $host;
    }

    public function getPort() {
        return $host;
    }

    public function __destruct() {
        socket_close($this->socket);
    }

}


Ten post edytował k0b3 6.06.2010, 10:45:15
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 02:22