Til Top

Dette er en introduktion til phps FTP funktioner, jeg vil indledningsvist gennemgå hvordan du forbinder til en FTP server, henter en liste over filer i en mappe, uploader en fil og selvfølgelig hvordan du henter en fil.

Først og fremmeste skal vi forbinde til en FTP server, og herefter skal vi logge ind. Dette gøres ved at bruge funktionerne ftp_connect() og ftp_login() som det ses herunder:

Kopier til udklipsholder | Vis uden linie #
01 <?php
02 $ftp=  @ftp_connect('side')  or  die('Kunne  ikke  skabe  forbindelse');  //skab  forbindelse
03 if(!@ftp_login($ftp,  'brugernavn','password'))  {  //hvis  vi  ikke  kan  logge  ind
04              die('Kunne  ikke  logge  ind  -  forkert  brugernavn  eller  password');
05 }
06 ?>
Ovenstående kode skaber først en forbindelse til FTP serveren, eller stopper udførelsen af scriptet hvis forbindelsen ikke kunne åbnes. Herefter forsøger vi at logge ind med ftp_login(), det ikke lykkedes stopper vi igen udførelsen af scriptet. Hvis koden ikke outputter noget er der skabt forbindelse til ftp serveren, og herefter kan vi udfører vores kommandoer.

Hent fil liste fra mappe

Når du ønsker at hente en liste over indholdet i en mappe, er der to funktioner der kan bruges, enten ftp_nlist() eller ftp_rawlist(). Førstnævnte returnerer et array med filnavnene, mens sidstnævnte returnerer et array med fuld ftp info omkring filen. Jeg foretrækker næsten altid nlist. For at hente listen over filer i rodmappen bruger vi ftp_nlist på følgende måde:

Kopier til udklipsholder | Vis uden linie #
01 <?php
02 $indhold=  ftp_nlist($ftp,  ".");  //hent  liste  over  indhold  i  den  nuværende  mappe
03 foreach  ($indhold  as  $fil)  {  //gennemløb  arrayet
04        echo  $fil;  //udskriv  indholdet
05 }
06 ?>

Upload af fil fra HTTP server til FTP server

Upload er lige så let som at hente en fil oversigt, her bruger vi bare funktionen ftp_put() funktionen skal vidde hvilken fil den skal uploade og hvor til og om det skal være i Binary eller Ascii:

Kopier til udklipsholder | Vis uden linie #
01 <?php
02  ftp_put($ftp,  '/lokal/sti/server/fil.ext',  '/ftp/sti/fil.ext',  FTP_BINARY);
03 ?>

Om du skal bruge FTP_BINARY eller FTP_ASCII kommer an på hvilken type fil du uploader. Som hovedregel, hvis du uploader andet end tekst skal du bruge FTP_BINARY, men hvis du fx uploader en HTML fil med JavaScript i, kan det også være nødvendigt at bruge FTP_BINARY.

BEMÆRK: Du kan ikke angive en fil på din lokale computer der skal uploades.

Hentning af fil fra FTP server til HTTP server

Hentning af filer sker ved at bruge ftp_get() - som har næsten samme opbygning som ftp_put():

Kopier til udklipsholder | Vis uden linie #
01 <?php
02 $fil=  ftp_get($ftp,  '/lokal/sti/server/fil.ext',  '/ftp/sti/fil.ext',  FTP_BINARY);
03 ?>

Når du er færdig med at bruge ftp forbindelsen bør du kalde ftp_close($ftp) for at lukke denne.

Afsluttende bemærkninger

Dette var en kort gennemgang af de mest basale FTP funktioner, og jeg håber det gav mening.

Hvis du sidder og tænker "hvad kan jeg bruge dette til", så er der egentlig massere. Det kunne være man kørte en FTP server og ønskede at gøre nogle af disse filer tilgængelige via http også. Eller hvis du laver administrationssystemer som skal kunne uploade til flere forskellige servere.. osv osv. Jeg vil i den nærmeste fremtid skrive del 2 af denne tutorial som vil gennemgå lidt flere muligheder

kommentarer

Skrevet d. 21. Juni 2008 13:33 af Michael
Bruger billede Ganske fin gennemgang, som altid :)

Synes det er lækkert med alle de indbyggede funktioner, som der er i Php.

Havde været rart, hvis vi brugte det sprog på arbejde, var nemlig forleden ved at rette i noget ASP, men begyndte at skrive Php :|
Skrevet d. 21. Juni 2008 14:22 af Martin
Bruger billede Takker,

ja, PHPs funktionaliteter er svære at hamle op med. Langt de fleste funktioner er jo nok nogen der er lavet netop fordi der har siddet en og tænkt... hvorfor skal det være så besværligt at gøre det..

Men du er da ved at være blevet lidt miljøskadet når du begynder at skrive PHP kode helt umotiveret :D
Skrevet d. 21. Juni 2008 14:32 af Michael
Bruger billede Ahh ved nu ikke om jeg er skadet. Hellere det end ASP - det sprog kan jeg bare ikke holde ud.

Går næsten i baglås, når jeg ser det. Hvor jeg derimod godt selv kan lidt i Php
Skrevet d. 24. September 2009 15:40 af Magnus
Bruger billede Hejsa.

Angående afsnittet "HENT FIL LISTE FRA MAPPE" - så får jeg en fejl, da jeg ikke har defineret $fil. Hvor skal jeg definere den? Og hvordan?
Skrevet d. 27. September 2009 10:46 af Martin Nielsen
Bruger billede Hej Magnus,
$fil bør automatisk blive sat i foreach løkken hvor den gennemløber indholdet af $indhold
Hvis $indhold er tom, dvs mappen du har angivet enten er tom eller ikke eksisterer, så vil $fil være undefined hvis du prøver at udskrive den uden for foreach
Skrevet d. 2. Oktober 2009 22:35 af Magnus
Bruger billede Ahh okay. Jeg prøver lige igen.
Skrevet d. 3. Oktober 2009 13:52 af Magnus
Bruger billede Det virkede :P

Men nu står jeg med et nyt problem.

Jeg har denne kode:
Kopier til udklipsholder | Vis uden linie #
01 <?php
02 $test  =  "side.dk";
03 $ftp=    @ftp_connect($test)    or    die('Kunne    ikke    skabe    forbindelse');    //skab    forbindelse
04 if(!@ftp_login($ftp,    'brugernavnet','koden'))    {    //hvis    vi    ikke    kan    logge    ind
05                          die('Kunne    ikke    logge    ind    -    forkert    brugernavn    eller    password');
06 }
07 $indhold=    ftp_nlist($ftp,    ".");    //hent    liste    over    indhold    i    den    nuværende    mappe
08 foreach    ($indhold    as    $fil)    {    //gennemløb    arrayet
09 ?>
10 <a href="<?php echo $test; echo "\"; echo $fil; ?>"><?php echo $fil ?></a>
11 <?php
12              echo  "<br>";
13 }
14 ?>


Når den så udskriver det hele, så kan jeg klikke på linket. Men den sender mig forkert afsted. Jeg kørte den vha. af localhost på min pc. Når jeg prøvede at komme i kontakt med min anden side, så ville den have at jeg skulle ind på http://localhost/www.minside.dk/minfil.jgp - hvordan kan jeg ordne det?

skriv kommentar

Felter markeret med gult og * er påkrævet







Sikkerheds kode


Pingbacks

Hvis du linker til en af mine blog artikler fra et blogsystem der udsender pings vil du få et gratis do-follow link fra mig, du kna også twitte om en post og få et link til din twitter profil (Jeg forbeholder mig dog retten til at slette eller nofollow spam :P)