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?