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%)
-----


Co jest w tym nie tak.

Z ftp łącze się w ten sposób:
Kod
public function connect() {
        $this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

        if($this->socket) {
            $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 Fail</span><br />';
        }

    }


Komendy do serwera oraz odpowiedź serwera uzyskuje w ten sposób:
Kod
public function send($command) {
    $command = $command."\r\n";
    socket_write($this->socket, $command, strlen($command));
    return $command;
}


Kod
public function recv() {
    usleep(100);
    $out = socket_read($this->socket, 10000).'<br />';
    return $out;
}


Po odpowiednim wywołaniu metod
Kod
    setcookie('host', $_POST['host']);
    setcookie('pass', $_POST['pass']);
    setcookie('login', $_POST['login']);
    echo $this->model->connect($_POST['host']);
    echo $this->model->send("USER ".$_POST['login']);
    echo $this->model->recv();
    echo $this->model->send("PASS ".$_POST['pass']);
    echo $this->model->recv();
    echo $this->model->send("PWD");
    echo $this->model->recv();
    echo $this->model->send("LIST");
    echo $this->model->recv();


Cytat
Open 195.88.30.227:21
220 Microsoft FTP Service
USER ***
331 Password required for kobe.
PASS ***
230 User kobe logged in.
PWD
257 "/kobe" is current directory.
LIST
150 Opening ASCII mode data connection for /bin/ls.


Gdy dodam jeszcze jedno wywołanie metody zwracającej (recv()) to:
Cytat
425 Can't open data connection

Gdzie tu jest problem? Czy php blokuje jakieś porty?
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: 6.10.2025 - 07:40