"Christian Joergensen" <mail@phpguru.dk> skrev i en meddelelse
news:pan.2002.04.29.18.49.53.505105.26878@phpguru.dk...
> Prøv at lave noget selv. Start med at kigge på PHP's ftp funktioner. Hvis
> du støder ind i noget du ikke umiddelbart kan finde ud af, skal du være
> velkommen til at spørge :)
okay. Jeg har lavet lidt selv til det omtalte program og kan ikke rigtig
komme videre. Mit problem består egentlig i, at tolke novells filstruktur.
webftp virker faktisk rigtig fint - programmøren har bare valgt at lave en
slags parser, så udskriften af filer/biblioteker bliver opstilt på en
overskuelig måde, man kan klikke på i stedet for at skrive ftp-kommandoer
manuelt. Han har så valgt kun at lave det til unix og windows.
Sidst i mailen, har jeg sat starten ind af original-koden til webftp.
I stedet for UNIX har jeg skrevet NETWARE, da det er det, ftpd sender
tilbage til php.
function parse_ftp_rawlist($list, $type="NETWARE") {
if ($type == "NETWARE")
i $regexp har jeg bikset mig frem til:
$regexp =
"([-|d]{1})[ ]+([-\[\]RWCEAFMS]{10})[ ]+([A-Z|0-9|-]+)[ ]+([0-9]+)[ ]+([A-Z]
{3}[ ]+[0-9]{2}[ ]+[0-9:]{4,5})[ ]+(.*)";
Dette har jeg gjort ud fra, ved at skrive ls i et ftp-program med
tilslutning til en novellserver, som giver dette (en bruger kan også være et
tal):
- [RWCEAFMS] hsk 795 Sep 25 2001 bottom.htm
- [RWCEAFMS] hsk 20023 Sep 01 1999 brev.fh8
- [RWCEAFMS] hsk 33255 Mar 06 2001
certificate.gif
d [RWCEAFMS] hsk 512 Mar 06 2001 dfh
Men jeg er ikke sikker på, om $regexp er korrekt og om det måske er lidt OT
her - jeg ved ikke, om det er sådan novells filstruktur bliver tolket?
ved resten skriver jeg:
if (!eregi("^[.]", $regs[6])) //verbergen hidden files
if (!eregi("^[.]{2}", $regs[6])) // niet verbergen hidden files
{
$i++;
if (eregi("^[d]", $regs[1]))
{
$is_dir = TRUE;
}
elseif (eregi("^[-]", $regs[1]))
{
$is_link = TRUE;
list($regs[6], $target) = split(" -> ", $regs[6]);
}
$files[$i] = array (
"is_dir" => $is_dir,
"name" => $regs[6],
"dire" => $regs[1],
"perms" => $regs[2],
"user" => $regs[3],
"size" => $regs[4],
"date" => $regs[5],
"is_link" => $is_link,
"target" => $target );
Når jeg har lavet disse ændringer, sker der ingenting via programmet i
browseren. Som om, jeg ikke havde lavet nogle ændringer. Jeg har klikket
opdater i min browser (og ændret skriftfarven og sådan for lige at være
sikker på, at ændringerne er kommet med).
Jeg er sådan lidt på bar bund, da jeg ikke har så meget kendskab med php.
Jeg håber ikke, det er en lidt for stor mundfuld - Men jeg har bare fulgt
dit råd nu Christian, ved at vende tilbage og spørge...
- Hilsen Henrik...
<?php
$downloadDir = "/tmp/";
function parse_ftp_rawlist($list, $type="UNIX") {
if ($type == "UNIX")
{
$regexp =
"([-ldrwx]{10})[ ]+([0-9]+)[ ]+([A-Z|0-9|-]+)[ ]+([A-Z|0-9|-]+)[ ]+([0-9]+)[
]+([A-Z]{3}[ ]+[0-9]{1,2}[ ]+[0-9:]{4,5})[ ]+(.*)";
$i=0;
foreach ($list as $line)
{
$is_dir = $is_link = FALSE;
$target = "";
if (eregi($regexp, $line, $regs))
{
if (!eregi("^[.]", $regs[7])) //verbergen hidden files
if (!eregi("^[.]{2}", $regs[7])) // niet verbergen hidden files
{
$i++;
if (eregi("^[d]", $regs[1]))
{
$is_dir = TRUE;
}
elseif (eregi("^[l]", $regs[1]))
{
$is_link = TRUE;
list($regs[7], $target) = split(" -> ", $regs[7]);
}
$files[$i] = array (
"is_dir" => $is_dir,
"name" => $regs[7],
"perms" => $regs[1],
"num" => $regs[2],
"user" => $regs[3],
"group" => $regs[4],
"size" => $regs[5],
"date" => $regs[6],
"is_link" => $is_link,
"target" => $target );
}
}
}
}
else
{
: her kommer så kode til, hvordan windows skal se strukturen og tilsidst en
masse kode, hvad den skal vise alt efter, hvad man trykker osv...
Jeg har valgt ikke at proppe alt koden ind, da det måske ikke lige er velset
her i gruppen at proppe så meget ind.
Men koden kan altså hentes fra linket i mit første indlæg.