PassivModus funktioniert nicht


tklustig

Erfahrenes Mitglied
Hallo Leute, folgender Code scheint syntaktisch in Ordnung, allerdings klappt das Switchen in den Passivmodus nicht. Ein var_dump auf ftp_pasv zeigt false an, egal, wie ich es versuche. Wo liegt der Fehler.

Vorab die gekapselten Methoden
PHP:
    private function FTPPassivModus($connection) {
        $this->FTP_Kontakieren();//Login
        var_dump($this->FTP_Kontakieren());//var_dump() siehe unten
        var_dump(ftp_pasv($connection, true));//var_dump() siehe unten
        var_dump($connection);////var_dump() siehe unten
        die();
        return ftp_pasv($connection, true);
    }

    private function FTPLoginForPassive() {
        $basis = $this->GetZugangsDaten();
        $host = $basis[1];
        $login = $this->connect($host);
        return $login->conn;
    }
Hier die öffentlichen Methoden

PHP:
    public function FTP_Kontakieren($render = NULL) {
        $basis = $this->GetZugangsDaten($render);
        $host = $basis[1];
        $username = $basis[2];
        $password = $basis[3];
        return $this->connect($host)->login($username, $password);
    }
PHP:
.
.
         try {
                $putFile = $connetion->put($SourceDirectory . $localFile, $LocalDirectory . $localFile, $mode);
            } catch (\Exception $e) {
                if ($this->FTPPassivModus($this->FTPLoginForPassive())) { //ist immer false
                    $putFile = $connection->put($SourceDirectory . $localFile, $LocalDirectory . $localFile, $mode);
                    $session->addFlash('info', 'Der Upload erfolgte im Passivmodus. Das deutet auf Probleme mit Ihrer Netzwerkkonfiguration hin. Informieren Sie Ihren Admin<br><br> Einzelheiten hier:' . $e);
                }
            }
Hier noch die Var_Dumps() aus der gekapselten Methode FTPPassivModus
Code:
E:\xampp\htdocs\yii2_perswitch\common\wsl_components\FTPZugang.php:183:
object(common\wsl_components\FTPZugang)[232]
  protected 'conn' => resource(187, FTP Buffer)
  private 'ftp' (yii2mod\ftp\FtpClient) =>
    object(yii2mod\ftp\FtpWrapper)[233]
      protected 'conn' => resource(187, FTP Buffer)

E:\xampp\htdocs\yii2_perswitch\common\wsl_components\FTPZugang.php:184:boolean false

E:\xampp\htdocs\yii2_perswitch\common\wsl_components\FTPZugang.php:185:resource(185, FTP Buffer)
 
Zuletzt bearbeitet:

tklustig

Erfahrenes Mitglied
Gelöst. Habe das jetzt soweit vereinfacht, dass ich mit einer einzigen gekapselten Methode auskomme, in der ich die ganze Logik implementiere. das läuft wie folgt:
PHP:
    private function FTPPassivModus() {
        $parameters = array();
        $HostID = ftp_connect($this->Configuration()[1]);
        $Login = ftp_login($HostID, $this->Configuration()[2], $this->Configuration()[3]);
        $passiveActivated = ftp_pasv($HostID, true);
        $parameters[0] = $passiveActivated;
        $parameters[1] = $HostID;
        $parameters[2] = $Login;
        return $parameters;
    }
PHP:
 public function DateienHochloaden($render = NULL, $connection, $localFile, $LocalDirectory) {
.
.
.
  try {
                $putFile = $connection->put($SourceDirectory . $localFile, $LocalDirectory . $localFile, $mode);
        } catch (\Exception $e) {
                /* verwendet als Verbindungsobjekt das zweite Element des Arrays SwitchFTP anstatt dem Übergabeparameter connection.
                  Auserdem wird der put-Befehl von PHP anstatt dem der Klasse, von der geerbt wird, verwendet
                 */
                $SwitchFTP = $this->FTPPassivModus();
                if ($SwitchFTP[0]) {
                    $putFile = ftp_put($SwitchFTP[1], $SourceDirectory . $localFile, $LocalDirectory . $localFile, $mode);
                    $session->addFlash('info', 'Der Upload erfolgte im Passivmodus. Das deutet auf Probleme mit Ihrer Netzwerkkonfiguration hin. Informieren Sie Ihren Admin<br><br> Einzelheiten hier:' . $e);
                } else {
                    $putFile = false;
                }
         }
.
.
.
 
Zuletzt bearbeitet: