[PHP] REGEX Url

Dieses Thema im Forum "Webentwicklung" wurde erstellt von badloader, 6. September 2012 .

Schlagworte:
  1. 6. September 2012
    Zuletzt bearbeitet: 6. September 2012
    REGEX Url

    Hi,

    folgendes ist mein Problem.

    Ich habe eine Liste (Upload einer txt Datei):
    Code:
    ##blabla
    
    FileZilla xxx1.de username3 passwort3 127.0.9.8 - PCPC-PC^Niemand
    FileZilla xxx2.de username1 passwort1 127.0.9.8 - XYZ-PC^Jemand
    FileZilla 127.0.0.1 username2 passwort2 127.0.9.8 - XYZ-PC^Jemand2
    
    ftp://username:passwort@update.test1.de:21
    ftp://p7747915:gbtf1sts@test2.de
    ftp://technik:technik@random-url.com
    ftp://196894-ftp:11111@ftp.test.com.de
    ftp://tcs:lolol@@@lolol@update.test.de
    ftps://test:test@113.133.133.2:1337
    ftp://test2:test@113.133.133.2:1335
    ftps://test1:test@113.133.113.2:21
    Ich möchte nun mit preg_match folgendes herausfiltern:
    ftp, ftps, filezilla Logins.

    Ich möchte sie letztendlich so verwerten:
    $ftp->host, $ftp->username, $ftp->passwort, $ftp->port, $ftp->ssl_mode

    Habe es mit folgendem REGEX schon versucht, den ich im Netz gefunden habe:
    Code:
    ^(ftps?):\/\/((?:[a-z0-9@:.-]|%[0-9A-F]{2}){3,})(?::(\d+))?((?:\/(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})*)*)(?:\?((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?
    Habt ihr eine Idee, wie ich mir am schlausten die gewünschten Daten ziehen kann?
    Ich muss die FTP Links quasi alle aus der Importierten Datei in die DB schreiben.

    Gruß
    bad

    PS: Der Code bisher
    PHP:
                                    $lines  file ( $file [ 'file' ][ 'tmp_name' ]);
                    
                    
    // read file line by line
                    
    foreach( $lines  as  $link ) {
                        
                        
    // do filter work
                        
    $pattern  '@^(?:(ftps|ftp)://)?([^/]+)@i' ;
                        if(
    preg_match ( $pattern trim ( $link ),  $matches )) {
                            die(
    Debug :: dump ( $matches ));
                        }
                    
                    
    // DB work
                    
    $ftp  ORM :: factory ( 'ftp' );
                    
    $ftp -> host  Arr :: get ( $filter 'host' );
                    
    $ftp -> port  Arr :: get ( $filter 'port' );
                    
    $ftp -> username  Arr :: get ( $filter 'username' );
                    
    $ftp -> password  Arr :: get ( $filter 'password' );
                    
    $ftp -> ssl  Arr :: get ( $filter 'ssl' );
                    
    $ftp -> code_id  Arr :: get ( $post 'code_id' );

                    
    // save
                    
    $ftp -> save ();
     
  2. 6. September 2012
    Zuletzt bearbeitet: 6. September 2012
    AW: REGEX Url

    PHP: parse_url - Manual

    FileZilla:
    Code:
    /^[^\s]+\s+(?P<host>[^\s]+)\s+(?P<user>[^\s]+)\s+(?P<pass>[^\s]+)/
    Beispiel:
    PHP:
    <? php

    $re 
    '/^[^\s]+\s+(?P<host>[^\s]+)\s+(?P<user>[^\s]+)\s+(?P<pass>[^\s]+)/' ;
    $fz  'FileZilla    xxx1.de username3   passwort3       127.0.9.8 - PCPC-PC^Niemand' ;

    preg_match ( $re $fz $rs );
    print_r ( $rs );
    Code:
    Array
    (
     [0] => FileZilla xxx1.de username3 passwort3
     [host] => xxx1.de
     [1] => xxx1.de
     [user] => username3
     [2] => username3
     [pass] => passwort3
     [3] => passwort3
    )
     
    1 Person gefällt das.
  3. 6. September 2012
    Zuletzt bearbeitet: 6. September 2012
    AW: REGEX Url

    du bist der beste. ich komm mit regex immer noch null klar. ^^

    EDIT:
    Wenn ich das so mache:
    PHP:
                     // get file content
                    
    $lines  file ( $file [ 'file' ][ 'tmp_name' ]);
                    
                    
    // read file line by line
                    
    foreach( $lines  as  $link ) {
                        
                        
    // filter filezilla 
                        
    $pattern_filezilla  '/^[^\s]+\s+(?P<host>[^\s]+)\s+(?P<user>[^\s]+)\s+(?P<pass>[^\s]+)/' ;
                        
                        
    // filter ftp url
                        
    $url_array  parse_url ( trim ( $link ));
                        
                        if(!isset(
    $url_array [ 'scheme' ]) ||  strlen ( $link ) <  5 ) {
                            continue;
                        }
                        
                        if(
    $url_array [ 'scheme' ] ==  'ftp'  ||  $url_array [ 'scheme' ] ==  'ftps'  ||
                            
    preg_match ( $pattern_filezilla trim ( $link ),  $url_array )) {
                            
                            
    // DB work
                            
    $ftp  ORM :: factory ( 'ftp' );
                            
    $ftp -> host  Arr :: get ( $url_array 'host' );
                            
    $ftp -> port  Arr :: get ( $url_array 'port' );
                            
    $ftp -> username  Arr :: get ( $url_array 'user' );
                            
    $ftp -> password  Arr :: get ( $url_array 'pass' );
                            
    $ftp -> code_id  Arr :: get ( $post 'code_id' );
                            
    $ftp -> activemode  '0' ;
                            
                            if(
    $url_array [ 'scheme' ] ==  'ftps' ) {
                                
    $ftp -> ssl  '1' ;
                            }
                        }
                        
                            
                        try {
                            
    $ftp -> save ();
                            
    $view -> success [] =  Arr :: get ( $url_array 'host' ) .  ' added to DB' ;
                        } catch(
    ORM_Validation_Exception $e ) {
                            
    $view -> errors  $e -> errors ();
                        }
                    }
                    
                    
    // delete file
                    
    unlink ( $file [ 'file' ][ 'tmp_name' ]);
    Dann bekomme ich nur 2 Einträge aus obigen Beispielen in die DB:
    ftps://test:test@113.133.133.2:1337
    ftps://test1:test@113.133.113.2:21
     
  4. 6. September 2012
    AW: REGEX Url

    PHP:
    <? php

    // filter filezilla 
    const  RE_FILEZILLA  '/^[^\s]+\s+(?P<host>[^\s]+)\s+(?P<user>[^\s]+)\s+(?P<pass>[^\s]+)/' ;

    // get file content
    $lines  file ( $file [ 'file' ][ 'tmp_name' ]);

    // read file line by line
    foreach ( $links  as  $link ) {
      if (
    strlen ( $link  trim ( $link )) <  5 )
        continue;
      
      
    $url_array  = [  'scheme'  =>  'ftp' 'port'  =>  25  ];
      
      if (
    preg_match ( '/^ftps?:/i' $link ))
        
    // ftp url
        
    $url_array  parse_url ( $link );
      else
        
    // filezilla entry
        
    preg_match ( RE_FILEZILLA $link $url_array );
      
      
    // parse_url or regex failed
      
    if (! $url_array  || !isset( $url_array [ 'host' ])) 
        continue;
      
      
    // DB work
      
    $ftp  ORM :: factory ( 'ftp' );
      
    $ftp -> host        Arr :: get ( $url_array 'host' );
      
    $ftp -> port        Arr :: get ( $url_array 'port' );
      
    $ftp -> username    Arr :: get ( $url_array 'user' );
      
    $ftp -> password    Arr :: get ( $url_array 'pass' );
      
    $ftp -> code_id     Arr :: get ( $post 'code_id' );
      
    $ftp -> activemode  '0' ;
      
      if (
    strcasecmp ( $url_array [ 'scheme' ],  'ftps' ) ===  0 )
        
    $ftp -> ssl  '1' ;

      try {
        
    $ftp -> save ();
        
    $view -> success [] =  Arr :: get ( $url_array 'host' ) .  ' added to DB' ;
      } catch(
    ORM_Validation_Exception $e ) {
        
    $view -> errors  $e -> errors ();
      }
    }

    // delete file
    unlink ( $file [ 'file' ][ 'tmp_name' ]);
    so vielleicht?
    kann leider nicht hellsehen.
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.