[PHP] uitlezen in welke ftp dir je nu zit.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
Ik ben bezig met een klein FTP projectje te programmere.
Het voorbeeld kun je zien op http://zatteadjes.xs4all.nl/ftp/

Mijn vraag is alleen of PHP ook een functie heeft waarmee je kan uitlezen in welke directory je zit op de FTP server.

Zodra mijn script weer start , gaat hij altijd vanuit de root ("/") lezen , terwijl ik in een onderliggende map probeer te komen.

Tis allemaal een beetje vaag uitgelegd maar als je me voorbeeld bekijkt , dan kun je zien wat ik bedoel

Het gaat dus om een directory te change.

dit is mijn code
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<html>
<head><title>FTP Script By $L!C€</title></head>
<body>
<?php
//FTP server variablen toekennen
$ftp_server = "10.0.0.3"; 
$ftp_user_name = "kevin"; 
$ftp_user_pass = "kevin"; 

//verbinden maken met de FTP server
$ftp_conn = ftp_connect($ftp_server); 
//Inloggen met gegevens op de FTP Server
$ftp_result = ftp_login($ftp_conn , $ftp_user_name , $ftp_user_pass);
 
//Lijst ophalen met ftpgegevens
$dir = $_GET['bestand'];
$finaldir = $dir;
$buff = ftp_rawlist($ftp_conn, $finaldir);
echo $finaldir;


//verbinding met FTP server verbreken
ftp_close($ftp_conn);
?>

<br>
<br>
<form name="change" action="<? PHP_SELF ?>" method="GET">

<?php
echo '<select size="20" name="bestand" align="left" multiple>'; 
foreach ($buff as $item) 
{ 
$split2 = preg_split("[ ]", $item, 9, PREG_SPLIT_NO_EMPTY);
//variabele counter bij iedere nieuwe rij 1 erbij tellen, zodat de waarde ook word opgeteld
$counter++;
//weergeven welke bestanden er in de FTP server staan.
echo '<option value="/'.$split2[8].'">'.$split2[8].'</option><br>';
}  
echo "</select>";
?>

<div id="Layer1" style="position:absolute; width:200px; height:115px; z-index:1; left: 668px; top: 52px;">
<table border ="0" cellspacing="2" cellpadding="2" align="right">
<tr><td><input type="submit" name="downloadbutton" value="Download"></td></tr>
<tr><td><input type="submit" name="mkdir" value="Make directory"></td></tr>
<tr><td><input type="submit" name="change" value="Change Dir"></td></tr>
<tr><td><input type="file" name="source"></td></tr>
<tr><td><input type="submit" name="uploadbutton" value="upload"></td></tr>
</table>
</div>
</form>
</body></html>


Hopelijk kan iemand mij weer een beetje opweg helpen.

Alvast bedankt

[ Voor 20% gewijzigd door degroot op 16-10-2005 19:29 . Reden: php tag ipv code tag ]

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
PHP: FTP Functies, volgende keer misschien iets harder zoeken voordat je een topic opent?

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Je kunt met ftp_chdir een directory kiezen en met ftp_cdup naar de parent directory gaan. Of begrijp ik je probleem verkeerd?

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Als ik het goed zie, werkt het script totdat je in een subdir zit en wat wilt doen. Wat je dus moet doen, is de huidige directory opslaan. Dat kan in een sessie, maar ook als onderdeel van het formulier (input type=hidden).

Uitlezen kan niet, omdat het script steeds opnieuw opgestart wordt, de verbinding opnieuw gemaakt wordt, en je alle oude informatie kwijt bent.

Met een zowel een sessie als een formulier is het eigenlijk heel eenvoudig. Ik laat hier de mogelijkheid met het formulier zien (ongetest):
PHP:
1
2
3
4
5
6
7
8
9
10
11
if($_GET['bestand'] == '..') {
  // Directory omhoog - verwijder laatste map
  $currentDir = $_GET['currentdir'];
  $currentDir = explode('/',$currentDir);
  array_pop($currentDir);
  $currentDir = implode('/',$currentDir);
} else {
  // Ga naar nieuwe directory
  $currentDir = $_GET['currentdir'].'/'.$_GET['bestand'];
}
echo '<input type="hidden" name="currentdir" value="'.$currentDir.'">';

Je kunt in je list dan ook nog een '..' opnemen om een mapje omhoog te gaan.

Gebruik bij PHP-code postings altijd de [php]-tag.

Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
Borizz schreef op zondag 16 oktober 2005 @ 19:13:
PHP: FTP Functies, volgende keer misschien iets harder zoeken voordat je een topic opent?
Volgens mij moet je daar al eens gekeken hebben wil je al een begin maken met je script.
Ik kan namelijk dit niet verzinnen. ik heb daar dus al gekeken , maar daar kon ik het niet vinden.
Volgende keer miscihen iets zinnigers bedenken voor je op een topic reageert?
Michali schreef op zondag 16 oktober 2005 @ 19:14:
Je kunt met ftp_chdir een directory kiezen en met ftp_cdup naar de parent directory gaan. Of begrijp ik je probleem verkeerd?
Nee die commando's had ik ook al bekeken.
Je snapt mijn probleem niet helemaal goed , maar ik heb het ook een beetje vaag uitgelegd. sorry daarvoor.

Glowmouse legt mijn probleem in het begin van zijn post een beetje duidelijker uit.

[ Voor 41% gewijzigd door degroot op 16-10-2005 19:31 ]

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
degroot schreef op zondag 16 oktober 2005 @ 19:25:
[...]


Volgens mij moet je daar al eens gekeken hebben wil je al een begin maken met je script.
Ik kan namelijk dit niet verzinnen. ik heb daar dus al gekeken , maar daar kon ik het niet vinden.
Volgende keer miscihen iets zinnigers bedenken voor je op een topic reageert?
Sorrie mijn fout, maar je startpost begint eerst met het uitlezen van de directory en daarna zeg je: Het gaat dus om een directory te change. En daar heb ik op gereageerd, maar goed dat lost je probleem niet op.

Met PHP open je elke keer dat het script aangeroepen wordt een nieuwe connectie naar de server. Het is dus logisch dat je in de root uitkomt. Je zult dus de huidige directory via je PHP script moeten bewaren. Dat kan met een sessie of een formulier, waar GlowMouse al een goed voorbeeld van geeft.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
Ja mijn topictitel is inderdaad ook een beetje vaag.
Maar waarschijnlijk ga ik het dus met een formulier doen.
Dat lukt mij wel.

Maar zou dat ook kunnen , als je in een sub-sub-sub-subdirectory zit?

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Ja waarom zou dat niet werken? Je houdt gewoon het absolute pad bij waar je zit:
code:
1
/map1/submap1/sub/sub/etc...

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
Ja idd nu is het me duidelijk.
Ben nu even niet thuis, maar heb toch vakantie dus zodra ik thuis ben ga ik jullie oplosingen ff uitproberen.

bedankt allemaal voor de moeite

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
GlowMouse schreef op zondag 16 oktober 2005 @ 19:15:
PHP:
1
2
3
4
5
6
7
8
9
10
11
if($_GET['bestand'] == '..') {
  // Directory omhoog - verwijder laatste map
  $currentDir = $_GET['currentdir'];
  $currentDir = explode('/',$currentDir);
  array_pop($currentDir);
  $currentDir = implode('/',$currentDir);
} else {
  // Ga naar nieuwe directory
  $currentDir = $_GET['currentdir'].'/'.$_GET['bestand'];
}
echo '<input type="hidden" name="currentdir" value="'.$currentDir.'">';

Je kunt in je list dan ook nog een '..' opnemen om een mapje omhoog te gaan.
Om een map omhoog te gaan kun je toch ook het commando : "FTP_CDUP" gebruiken?
Dat wilde ik op de volgende manier inbrengen , alleen dat werkte niet:
PHP:
1
2
3
4
5
6
7
elseif($dir == '..')
{
//als er gekozen is voor ".." dan 1 map omhoog in FTP directory
$change = ftp_chdir($ftp_conn, $fulldir); /omdat connectie gesloten is geweest terug naar huideige map gaan
$cdup = ftp_cdup($change);//vanuit huidige map 1 map omhoog
$buff = ftp_rawlist($ftp_conn, $cdup);//lijst printen met ftp inhoud
}


met dit als error
code:
1
Warning: ftp_cdup() expects parameter 1 to be resource, boolean given in

[ Voor 16% gewijzigd door degroot op 17-10-2005 17:25 ]

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • Vesta
  • Registratie: November 2004
  • Niet online
Lees die error eens goed ;)

Hij verwacht een resource ($ftp_conn) en geen boolean ($change). Dus:
PHP:
1
$cdup = ftp_cdup($ftp_conn);//vanuit huidige map 1 map omhoog

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Bovendien maak je, elke keer dat iemand de pagina refresht (naar een andere directory gaat) weer een nieuwe verbinding. Waarom zou je dan eerst nog naar de oude directory gaan om vervolgens met ftp_cdup een mapje omhoog te gaan, als het ook in 1x kan?

Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
GlowMouse schreef op maandag 17 oktober 2005 @ 18:04:
Bovendien maak je, elke keer dat iemand de pagina refresht (naar een andere directory gaat) weer een nieuwe verbinding. Waarom zou je dan eerst nog naar de oude directory gaan om vervolgens met ftp_cdup een mapje omhoog te gaan, als het ook in 1x kan?
Jah dat klopt , alleen op jouw manier in je vorige post kwam ik er niet helemaal aan uit. lukte me totaal niet. dus ik dacht misschien de map terugroepen waarin ik zit , en dan een directory omhoog.
Of is er dus een snellere manier?

EDIT:
Met je eerder genoemde functie lukt het nu wel om 1 dir omhoog te gaan.
Dan moet de rest ook zo lukken , om alle dirs omhoog te gaan.
De code is nu als volgt:
PHP:
1
2
3
4
5
6
7
8
9
elseif($dir == '..')
{
//als er gekozen is voor ".." dan 1 map omhoog in FTP directory
$currentDir = explode('/',$fulldir);
array_pop($currentDir);
$currentDir = implode('/',$currentDir);
echo $currentDir;
$buff = ftp_rawlist($ftp_conn, $currentDir);
}


ThnQ

EDIT2:

Het werkt...totdat....
Ik zit in een subdir , en ga een map omhoog.
Dit gaat nog goed.
Maar zodra ik dan nog 1 map omhoog wil , ga ik automatisch terug naar de root.
Als ik dan op die pagina in mijn pagina code kijk klopt dat
code:
1
<tr><td><input type="hidden" name="fulldir" value="/"></td></tr></table>

Want in value verwijst hij terug naar de root, terwijl er nog 2 submappen onder zitten.
Komt die door het onderstaande gedeelte ?
PHP:
1
2
3
$currentDir = explode('/',$fulldir);
array_pop($currentDir);
$currentDir = implode('/',$currentDir);

[ Voor 52% gewijzigd door degroot op 17-10-2005 20:52 ]

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Je gebruikt nu $currentDir en $fulldir door elkaar, en het is niet helemaal duidelijk wat wat nou voorstelt.

Maar om te kijken of het aan het genoemde stukje ligt, kun je natuurlijk debug-code toevoegen:
PHP:
1
2
3
4
5
6
7
8
9
echo "Huidige directory is $fulldir <br>\n"; 
$currentDir = explode('/',$fulldir); 
echo "Na exploden op '/' blijft er over:";
print_r($currentDir);
array_pop($currentDir); 
echo "Na het weglaten van het laatste element blijft er over:";
print_r($currentDir);
$currentDir = implode('/',$currentDir); 
echo "De nieuwe directory wordt: $currentDir <br>\n";

Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
Ok ook het map voor map teruggaan werkt nu.
Omdat PHP open-source is zal ik de "gewilde broncode" wel ff vrijgeven haha
nee just kidding.
Hieronder zoals hij in zijn totaliteit werkt
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php

//Opgehaalde variablen in normale variabelen zetten
$dir = $_GET['bestand'];
$fulldir = $_GET['fulldir'];
$finaldir = $fulldir.$dir;

//FTP server variablen toekennen
$ftp_server = "10.0.0.3"; 
$ftp_user_name = "kevin"; 
$ftp_user_pass = "kevin"; 

//verbinden maken met de FTP server
$ftp_conn = ftp_connect($ftp_server); 

//Inloggen met gegevens op de FTP Server
$ftp_result = ftp_login($ftp_conn , $ftp_user_name , $ftp_user_pass);
 
//Lijst ophalen met ftpgegevens
//Als er in het selectie vakje voor de "." is gekozen , dan terug naar FTP root
if($dir == '.')
{
$finaldir = ftp_pwd($ftp_conn);
$buff = ftp_rawlist($ftp_conn, '/');
}

elseif($dir == '..')
{
//als er gekozen is voor ".." dan 1 map omhoog in FTP directory
$currentDir = explode('/',$fulldir);
echo "Na exploden op '/' blijft er over:";
print_r($currentDir);
array_pop($currentDir);
echo "Na het weglaten van het laatste element blijft er over:";
print_r($currentDir); 
$currentDir = implode('/',$currentDir);
echo "De nieuwe directory wordt: $currentDir <br>\n";
echo "en de currentdir is $fulldir";
$finaldir = $currentDir;
$buff = ftp_rawlist($ftp_conn, $currentDir);
}

else
//als er niet voor "."of ".." is gekozen dan normale directory aanhouden
{
$buff = ftp_rawlist($ftp_conn, $finaldir);
}

//verbinding met FTP server verbreken
ftp_close($ftp_conn);
?>
<br>
<br>
<form name="change" action="<? PHP_SELF ?>" method="GET">

<?php
echo '<select size="20" name="bestand" align="left" multiple>';
//onderstaande regel moet nog juiste variable in
echo '<option value=".">.</option> ';
echo '<option value="..">..</option> ';  
foreach ($buff as $item) 
{ 
$split2 = preg_split("[ ]", $item, 9, PREG_SPLIT_NO_EMPTY);
//variabele counter bij iedere nieuwe rij 1 erbij tellen, zodat de waarde ook word opgeteld
$counter++;
//weergeven welke bestanden er in de FTP server staan.
echo '<option value="/'.$split2[8].'">'.$split2[8].'</option><br>';
}  
echo "</select>";
?>

<div id="Layer1" style="position:absolute; width:200px; height:115px; z-index:1; left: 668px; top: 52px;">
<table border ="0" cellspacing="2" cellpadding="2" align="right">
<tr><td><input type="submit" name="downloadbutton" value="Download"></td></tr>
<tr><td><input type="submit" name="mkdir" value="Make directory"></td></tr>
<tr><td><input type="submit" name="change" value="Change Dir"></td></tr>
<tr><td><input type="file" name="source"></td></tr>
<tr><td><input type="submit" name="uploadbutton" value="upload"></td></tr>
<?php
echo '<tr><td><input type="hidden" name="fulldir" value="'.$finaldir.'"></td></tr>';
?>

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

degroot schreef op zondag 16 oktober 2005 @ 19:03:
Mijn vraag is alleen of PHP ook een functie heeft waarmee je kan uitlezen in welke directory je zit op de FTP server.
Uit de PHP manual :

pwd
Pagina: 1