Avatar billede kgp43 Nybegynder
27. maj 2005 - 17:08 Der er 27 kommentarer og
1 løsning

Check om side same folder eksistere med ftp

Hejsa,

Jeg anvender følgende kode til at checke om en side/folder er gyldig:

if (!file_get_contents($dir_1)) {
  bla bla bla...
}

Hvordan kan jeg gøre det samme med FTP?
Ved hvordan jeg connecter osv.
Avatar billede coderdk Praktikant
27. maj 2005 - 17:37 #1
Brug ftp_nlist() http://dk2.php.net/ftp_nlist og in_array() http://dk2.php.net/in_array :)
Avatar billede kgp43 Nybegynder
27. maj 2005 - 17:54 #2
Sådan noget lignende:

// get contents of the current directory
$contents = ftp_nlist($conn_id, "/public_html/folder/index.php");

// check if folder exist, if not then it's created
if (!$contents) {
  create folder...
}
Avatar billede kgp43 Nybegynder
27. maj 2005 - 17:59 #3
jeg har ikke brug for at vide hvilke filer folderen indeholder, bare om index.php er der.
Avatar billede coderdk Praktikant
27. maj 2005 - 18:01 #4
Jeg tvivler nu på at du kan bruge nlist sådan, den henter en liste over filer i en folder - Tror ikke du bare kan checke for én...
Avatar billede kgp43 Nybegynder
27. maj 2005 - 18:13 #5
kan jeg bruge nlist til at checke om en folder eksistere?
kom lige i tanke om, at jeg ikke skal bruge index.php mere, da filerne bliver placeret udenfor public_html - så jeg skal kun checke om en mappe eksistere.

kan nlist kun bruges til at få en liste over filer i en mappe? hvad så hvis mappen ikke eksistere? det må jeg da kunne bruge på en eller anden måde?

if ($contents == false) {
Avatar billede coderdk Praktikant
27. maj 2005 - 18:25 #6
Jo, jo, mapper er også i listen! :)
Avatar billede kgp43 Nybegynder
27. maj 2005 - 18:42 #7
Tror du dette her vil virke (har ikke mulighed for at test lige nu):

// Connect to folder
$dir = "/public_html/folder1";
$folder = ftp_nlist($conn_id, $dir);

// Check if folder exist, if not then it's created
if ($folder == false) {
  ftp_mkdir($conn_id, $dir_name);
}
Avatar billede coderdk Praktikant
27. maj 2005 - 19:13 #8
Noget i stil med:

$fp = ftp_connect( 'ftp.dinserver.dk' );
ftp_login( $fp, 'brugernavn', 'kodeord' );
$dir_name = 'en_folder';
$dir = "/public_html/folder1/";
$list = ftp_nlist( $fp, $dir );
if ( !in_array( $dir_name, $list ) )
{
  ftp_mkdir( $fp, $dir_name );
}
ftp_close( $fp );
Avatar billede kgp43 Nybegynder
27. maj 2005 - 20:46 #9
Den prøver at lave mappen, uanset om mappen er lavet eller ej.

//FTP server info
$server_ip = "xxx.xxx.xxx.xxx";
$server_ftp_username = "username";
$server_ftp_password = "password";

//Get the directory names
$yy = date("Y");
$mm = date("m");
$dd = date("d");

//Check if the right directory is created (YYYY/MM/DD)
$yy_dir = "files2/".$yy;
$mm_dir = "files2/".$yy."/".$mm;
$dd_dir = "files2/".$yy."/".$mm."/".$dd;

//Open the FTP connection
$conn_id = ftp_connect($server_ip);
$login_result = ftp_login($conn_id, $server_ftp_username, $server_ftp_password);

//Check if the YEAR directory exist by getting all the content of the folder (if empty = no content)
$yy_dir_list = ftp_nlist( $conn_id, $yy_dir );
if (!in_array($yy, $yy_dir_list)) {
  ...................
Avatar billede kgp43 Nybegynder
27. maj 2005 - 21:04 #10
files2/ er ny (lavede den som test)
- den opretter mappen som den skal (da den ikke eksistere), men den prøvet at oprette den igen, hvis jeg kører filen bagefter.
Avatar billede coderdk Praktikant
27. maj 2005 - 21:09 #11
Prøv at lave lidt debugging. F.eks. efter:

$yy_dir_list = ftp_nlist( $conn_id, $yy_dir );

skriv:

echo "<pre>";var_dump($yy_dir_list);echo "</pre>";

Så kan du se hvad den indeholder...
Avatar billede kgp43 Nybegynder
27. maj 2005 - 21:21 #12
array(1) {
  [0]=>
  string(14) "files2/2005/05"
}
Avatar billede kgp43 Nybegynder
27. maj 2005 - 21:24 #13
det er fordi den tager alt indhold med, inklusiv undermapper
skulle kun indeholde "2005"
Avatar billede kgp43 Nybegynder
27. maj 2005 - 21:27 #14
hehe, dette er vist ikke så "let" som først antaget :P
er det muligt at ændre det, så den kun tager den først mappe/folder og ikke undermapper?
Avatar billede kgp43 Nybegynder
27. maj 2005 - 21:28 #15
ellers må man jo til at dele værdien op, men det kunne være rart men en anden løsning.
Avatar billede coderdk Praktikant
27. maj 2005 - 22:32 #16
Hmm det giver bare ingen mening, når jeg tester så får jeg kun det der ligger der hvor jeg angiver... Hvis jeg f.eks. kalder:

$yy_dir_list = ftp_nlist( $conn_id, $yy_dir );

Så får jeg "05" tilbage i array'et - Meget underligt!
Avatar billede kgp43 Nybegynder
27. maj 2005 - 22:46 #17
hvad hvis du smider en mappe ind i "05" ?
Avatar billede coderdk Praktikant
27. maj 2005 - 22:56 #18
Det er *kun* de filer/mapper der ligger i selve $yy_dir, ikke under, der bliver vist hos mig - Dette er også den korrekte opførsel.
Det virker ret underligt at din opfører sig sådan!
Avatar billede kgp43 Nybegynder
28. maj 2005 - 04:03 #19
Den kan jeg godt nok ikke få til at virke, bliver ved med at poste navne på undermapper.

Test:
http://www.savefile.com/filehost/test.php

code:
<?
//FTP server info
$server_ip = "xx.xx.xx.xx";
$server_ftp_username = "xxxxxxxx";
$server_ftp_password = "xxxxxxxx";

//Get the directory names
$yy = date("Y");
$mm = date("m");
$dd = date("d");

//Get the right locations (YYYY/MM/DD)
$yy_dir = "files2/".$yy;
$mm_dir = "files2/".$yy."/".$mm;
$dd_dir = "files2/".$yy."/".$mm."/".$dd;

//Open the FTP connection
$conn_id = ftp_connect($server_ip);
$login_result = ftp_login($conn_id, $server_ftp_username, $server_ftp_password);

//Check if the YEAR directory exist by getting all the content of the folder (if empty = no content)
$yy_dir_list = ftp_nlist($conn_id, $yy_dir);
echo "<pre>";var_dump($yy_dir_list);echo "</pre>";
?>
Avatar billede coderdk Praktikant
28. maj 2005 - 13:50 #20
Erh, det er bare lidt for underligt! Den kan jeg ikke lige regne ud!
Avatar billede kgp43 Nybegynder
28. maj 2005 - 14:35 #21
Har prøvet at erstatter $yy_dir med "files2" og nu tager den kun den første folder med, men det er stadig én for meget.

//Check if the YEAR directory exist by getting all the content of the folder (if empty = no content)
$yy_dir_list = ftp_nlist($conn_id, 'files2');
echo "<pre>";var_dump($yy_dir_list);echo "</pre>";

Output:
array(1) {
  [0]=>
  string(11) "files2/2005"
}
Avatar billede kgp43 Nybegynder
28. maj 2005 - 14:37 #22
der burde kun stå "2005"
Avatar billede coderdk Praktikant
28. maj 2005 - 14:43 #23
Yeps, men ok, det kan vi måske leve med:

$dir_list = ftp_nlist( $conn_id, 'files2' );
if (!in_array('files2/' . $yy, $dir_list)) {

?
Avatar billede kgp43 Nybegynder
28. maj 2005 - 15:08 #24
Jeg prøvede dette igen, men får nu en anden error - kan dette være noget setup på serveren?

//Get the directory names
$yy = date("Y");
$mm = date("m");
$dd = date("d");

//Get the right locations (YYYY/MM/DD)
$yy_dir = "files2/".$yy;
$mm_dir = "files2/".$yy."/".$mm;
$dd_dir = "files2/".$yy."/".$mm."/".$dd;

//Open the FTP connection
$conn_id = ftp_connect($server_ip);
$login_result = ftp_login($conn_id, $server_ftp_username, $server_ftp_password);

//Check if the YEAR directory exist by getting all the content of the folder (if empty = no content)
$yy_dir_list = ftp_nlist( $conn_id, yy_dir );
echo "<pre>";var_dump($yy_dir_list);echo "</pre>";
if (!in_array($yy_dir, $yy_dir_list)) {


Error:
bool(false)
Avatar billede kgp43 Nybegynder
28. maj 2005 - 15:25 #25
ser ud til at virke
vender tilbage senere
Avatar billede kgp43 Nybegynder
28. maj 2005 - 15:37 #26
point til dig, takker for hjælpen :)
Avatar billede coderdk Praktikant
28. maj 2005 - 15:45 #27
Så lidt - Det undrer mig dog stadig at det opfører sig forskelligt fra server til server!
Avatar billede kgp43 Nybegynder
28. maj 2005 - 16:53 #28
yep,
har læst at det kan volde problemer på nogle enkelte servere.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester