PHP: directory uploaden via ftp

Pagina: 1
Acties:
  • 550 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil met php de inhoud van een lokale map uploaden naar een ftp server, maarrr als ik de lokale map opgeef, gaat ie daar naar zoeken op de server, wat dus niet de bedoeling is. Met andere woorden, ik krijg de volgende foutmelding:


Warning: dir(C:\db\mapje): failed to open dir: No such file or directory in /var/www/html/db/pagina.php on line 103
Fatal error: Call to a member function on a non-object in /var/www/html/db/pagina.php on line 104

Hoe zorg ik ervoor dat er op c:\ naar die map wordt gezocht?
(Op een andere pagina gebruik ik een vergelijkbaar script voor het uploaden van (aparte) bestanden, en die werkt wél...)


Voor de duidelijkheid (of onduidelijkheid) is hier het scriptje:

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
$src_dir = "C:\db\mapje";
$dst_dir = "/var/www/html/db/beeld/mapje";
$ftp_server = "82.192.77.56";
$verbinding = ftp_connect($ftp_server);
$ftp_user_naam = "*****";
$ftp_user_pass = "*******";
$login_result = ftp_login($verbinding, $ftp_user_naam, $ftp_user_pass);

function ftp_putAll($verbinding, $src_dir, $dst_dir) {
    $d = dir($src_dir);
    while($file = $d->read()) { 
        if ($file != "." && $file != "..") {
            if (is_dir($src_dir."/".$file)) {
                if (!@ftp_chdir($verbinding, $dst_dir."/".$file)) {
                    ftp_mkdir($verbinding, $dst_dir."/".$file);
                }
                ftp_putAll($verbinding, $src_dir."/".$file, $dst_dir."/".$file);
            } else {
                   ftp_put($verbinding, $dst_dir."/".$file, $src_dir."/".$file, FTP_BINARY) ;
                   }
        }
    }
    $d->close();
ftp_close($verbinding);
}

ftp_putAll($verbinding, $src_dir, $dst_dir);

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

PHP:
1
$src_dir = "C:\db\mapje";

moet je
PHP:
1
$src_dir = 'C:\db\mapje';

van maken, of die backslashes escapen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Erkens schreef op dinsdag 12 juli 2005 @ 18:22:
PHP:
1
$src_dir = "C:\db\mapje";

moet je
PHP:
1
$src_dir = 'C:\db\mapje';

van maken, of die backslashes escapen.
Dat haalt niks uit...

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Gebruik eens forward slashes (/) en plaats er ook eens een op het einde.

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

PHP is server-side, die kan dus _alleen_ bij de mappen op de server. Voor het ophalen van bestanden van de client-computer zal dus iets als java gebruikt moeten worden. :)
Of vergis ik me, en moet het wel van de server gehaald?

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

OkkE schreef op woensdag 13 juli 2005 @ 09:17:
PHP is server-side, die kan dus _alleen_ bij de mappen op de server. Voor het ophalen van bestanden van de client-computer zal dus iets als java gebruikt moeten worden. :)
Of vergis ik me, en moet het wel van de server gehaald?
als het een windows server is kan je best wel een C schijf hebben ;)



Wat je iig moet doen is checken of het wel bestaat en of je er wel bij kan komen, maar zonder meer info over het gebruikte OS/Server/Filesystem kan bijna niemand je helpen lijkt me ;)


offtopic:
Ik vind het sowieso een vaag scriptje, een functie die verwacht dat een ftp verbinding open is, daar wat mee doet en dat die functie ook de verbinding sluit :o
Open dan op zijn minst die verbinding binnen de functie, of sluit hem erbuiten.
En dan wil ik het niet eens hebben over je keuze wbt indenting :X

Acties:
  • 0 Henk 'm!

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

igmar

ISO20022

aangezien die class gewoon opendir() aanroept moet je denk ik alle backslashes escapen, of met forwardslashes gaan werken.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Op regel 14 zie ik een @. Haal die eens weg. @'s onderdrukken foutmeldingen, en tijdens het debuggen wil je dat niet. :P

Verder, over je probleem: zit ik goed als ik aanneem dat de server waarop je PHP draait de "lokale pc" is, en die FTP server de "server" in je verhaal? Je bent hier niet bepaald duidelijk in. Als dat het geval is, dan moet je inderdaad eens die slashes gaan escapen, of forward slashes gaan gebruiken.

Als dat niet het geval is, en je wil een map van de gebruiker die je site bezoekt uploaden, dan kun je het gerust vergeten op deze manier. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

igmar schreef op woensdag 13 juli 2005 @ 11:59:
[...]


aangezien die class gewoon opendir() aanroept moet je denk ik alle backslashes escapen, of met forwardslashes gaan werken.
wat denk je dat er in de eerste reactie van dit topic stond?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Erkens schreef op woensdag 13 juli 2005 @ 12:11:
wat denk je dat er in de eerste reactie van dit topic stond?
In je eerste reactie veranderde je alleen de quotes. ;) Ook tussen enkele quotes is een \ nog een escape char, dus ook daar zou die ge-escaped moeten worden volgens mij. Verder zeg je niets over forward slashes. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

-NMe- schreef op woensdag 13 juli 2005 @ 12:20:
[...]

In je eerste reactie veranderde je alleen de quotes. ;) Ook tussen enkele quotes is een \ nog een escape char, dus ook daar zou die ge-escaped moeten worden volgens mij. Verder zeg je niets over forward slashes. :P
tussen enkele quotes is de \ alleen een escape teken voor de single quote ;)

over die forward slashes, zodra je windows gebruikt moet je dacht ik ook windows tekens gebruiken om de paden te scheiden, hoe dan ook moet dat niet uitmaken.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

-NMe- schreef op woensdag 13 juli 2005 @ 12:09:
Op regel 14 zie ik een @. Haal die eens weg. @'s onderdrukken foutmeldingen, en tijdens het debuggen wil je dat niet. :P

Verder, over je probleem: zit ik goed als ik aanneem dat de server waarop je PHP draait de "lokale pc" is, en die FTP server de "server" in je verhaal? Je bent hier niet bepaald duidelijk in. Als dat het geval is, dan moet je inderdaad eens die slashes gaan escapen, of forward slashes gaan gebruiken.

Als dat niet het geval is, en je wil een map van de gebruiker die je site bezoekt uploaden, dan kun je het gerust vergeten op deze manier. :)
Nee volgens mij draait het script op de remote pc. Kijk maar eens naar de foutmelding:
Warning: dir(C:\db\mapje): failed to open dir: No such file or directory in /var/www/html/db/pagina.php on line 103

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

dus die FTP server ondersteund dat path met die drive letter niet, ergens wel begrijpelijk.

waks: werkt het wel met die path als je handmatig een FTP sessie opzet?

Acties:
  • 0 Henk 'm!

Verwijderd

LuCarD schreef op woensdag 13 juli 2005 @ 13:02:

Nee volgens mij draait het script op de remote pc. Kijk maar eens naar de foutmelding:
Warning: dir(C:\db\mapje): failed to open dir: No such file or directory in /var/www/html/db/pagina.php on line 103
Inderdaad, het kan nooit kloppen. Als je een foutmelding krijgt in het script /var/www/html/db/pagina.php, dan blijkt uit het pad dat het iets als een Linux server is. Die heeft inderdaad geen C:\db\mapje.

Kortom, de topicstarter heeft het verschil tussen client en server niet in de gaten. De PHP code wordt op de server uitgevoerd, er wordt een pagina gegenereerd, en deze pagina wordt naar de client gestuurd. De client zal dus geen FTP verbinding proberen te maken, de server wel, met zichzelf of met een andere server.

Ik heb het idee dat de topicstarter wil dat er bestanden van de client naar de server worden gestuurd. Dat is de conclusie die ik trek uit de genoemde paden. Hij zit volgens mij totaal op het verkeerde spoor.

Acties:
  • 0 Henk 'm!

Verwijderd

Hij zegt het zelf al:
Ik wil met php de inhoud van een lokale map uploaden naar een ftp server, maarrr als ik de lokale map opgeef, gaat ie daar naar zoeken op de server, wat dus niet de bedoeling is
"gaat ie daar naar zoeken op de server" -> dus script wordt gedraaid op de server (linux, etc)
"maarrr als ik de lokale map opgeef" -> C:\ dus windows omgeving.

Hij vraagt dus de inhoud van een client-side map op de server op. Gaat dus niet lukken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
oeps, ik vergeet deze topic in de gaten te houden...
Verwijderd schreef op woensdag 13 juli 2005 @ 13:50:
[...]


Kortom, de topicstarter heeft het verschil tussen client en server niet in de gaten. De PHP code wordt op de server uitgevoerd, er wordt een pagina gegenereerd, en deze pagina wordt naar de client gestuurd. De client zal dus geen FTP verbinding proberen te maken, de server wel, met zichzelf of met een andere server.

Ik heb het idee dat de topicstarter wil dat er bestanden van de client naar de server worden gestuurd. Dat is de conclusie die ik trek uit de genoemde paden. Hij zit volgens mij totaal op het verkeerde spoor.
zij

ik weet ook wel het verschil is tussen server en client,
maar waarom lukt het me dn wél om 1 enkele file te uploaden?
het probleem zit het hem in het feit dat ik deze keer een hele directory in één keer wil uploaden...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 13 juli 2005 @ 15:03:
Hij vraagt dus de inhoud van een client-side map op de server op.
ja dat zei ik toch :O
maar hoe kan het anders...?

Acties:
  • 0 Henk 'm!

  • marijn
  • Registratie: Juni 2001
  • Laatst online: 09:24
Dit kan niet met PHP, je kan wel een java applet gebruiken.

Acties:
  • 0 Henk 'm!

  • Noordamski
  • Registratie: Oktober 2002
  • Laatst online: 17-01 14:23

Noordamski

yibbedi yibbeda

Voor de duidelijkheid:
je wilt met een php pagina op de server, een ftp connectie opzetten
naar je eigen lokale machine, en dan moet het script alles van een lokale
directory inlezen en wegschrijven?
Dan draai je dus ook een ftp server op je lokale machine, anders kan het
niet. En dan lijkt me dat jou code wel werkt met de juiste "server" instellingen.
Want het ip nummer van de ftp_server is dan van jou lokale machine thuis....

If you can't convince them with facts, dazzle them with bullshit


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zaterdag 16 juli 2005 @ 19:26:
ik weet ook wel het verschil is tussen server en client,
maar waarom lukt het me dn wél om 1 enkele file te uploaden?
het probleem zit het hem in het feit dat ik deze keer een hele directory in één keer wil uploaden...
Eén enkele file uploaden kan ook niet werken, tenminste, niet als je op deze manier te werk gaat. Je probeert een Windows-style directory aan te spreken op een Linux-server, dat kan gewoon niet.

@Noordamski: je hoeft niet op het einde van elke regel een enter te zetten hoor, layout wordt wel geregeld door onze forumsoftware. Dat leest wat makkelijker. :)

[ Voor 14% gewijzigd door NMe op 16-07-2005 21:56 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 10:01
Eén file uploaden kan wel in PHP, echter, dan verstuurd de client (de internet browser in dit geval) alle data naar de server waarnaar de server het bestand ergens neerzet.

Je kan nimmer een bestand (en dus ook geen map) uploaden door in PHP zelf aan te geven wat de locatie is op de client PC, simpelweg onmogelijk dus.

[ Voor 4% gewijzigd door IceM op 16-07-2005 21:46 ]

...

Pagina: 1