Avatar billede qub- Novice
27. januar 2009 - 17:26 Der er 38 kommentarer og
2 løsninger

Sortere filer, og download af billeder

Hejsa.. Jeg er godt igang med et galleri system, som jeg indtil videre har fået fremragende hjælp med herindefra..

Men er stødt ind i 2 problemer..

1, så kan jeg ik lige lurer hvorn man gør så man kan downloade et billede.. Istedet for den bare åbner, og viser billedet...

2, så skal jeg ha sorteret mapper og filerne i alfabetisk rækkefølge...


lidt kode:

$dir = 'files/pictures';
$dir = @rtrim($dir, "\\/");
    $directories = @glob("$dir/*", GLOB_ONLYDIR) or $directories = array();
    $files = @array_diff(glob("$dir/*"), $directories) or $files = array();


foreach ($directories as $d)
{
echo '<td>Mapper</td><td>'.$d.'</td>';
}

foreach($files as $f)
{
echo '<td>Filer</td><td>'.$d.'</td>';
}



min kode inkludere selvfølgelig meget mere kode.. Men det er sådan systemet er bygget op...

Håber der er nogen der kan hjælpe :P
Avatar billede tmi Nybegynder
27. januar 2009 - 17:38 #1
glob burde sortere mapper og filer, men du kan tilføje:

$dir = 'files/pictures';
$dir = @rtrim($dir, "\\/");
$directories = @glob("$dir/*", GLOB_ONLYDIR) or $directories = array();
$files = @array_diff(glob("$dir/*"), $directories) or $files = array();
sort($directories);
sort($files);

Hvis du vil downloade et billede kan du gøre det med
download.php?file=blabla

<?php
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="'.basename($_GET['file']).'"');

// The PDF source is in original.pdf
readfile($_GET['file']);
?>

Du skal blot huske at sørge for at man ikke kan ændre URL'en og så downloade andet end billederne, altså så man ikke fx kan indtaste stien til en PHP fil, da man så kan downloade koden.
Avatar billede tmi Nybegynder
27. januar 2009 - 17:39 #2
Hovsa, se bort fra de to kommentarer, de passer selvfølgelig ikke ;-)
Avatar billede qub- Novice
27. januar 2009 - 17:56 #3
Jeg har fået downloaden til at virke.. (og ja, det hele kører i en popup, hvor link ik kan redigeres :P)

Men den sortere altså stadig ikke filerne.. :/
Avatar billede qub- Novice
27. januar 2009 - 18:34 #4
Et lille skud i tågen.. men nu har jeg siddet og kigget blindt på det her i MEGET lang tid, så ville lige hører om du evt ku se hvor fanden fejlen ligger..

Det drejer sig om redigering i mappe navne...

formen ser således ud:

<form name="mkdir" action="scripts/gallery/functions.php?cmd=edit_dir&folder='.$_GET['folder'].'&name='.$_GET['oname'].'" method="post">
            Redigere Mappe: <input type="text" name="new_name" class="inputlogin" value="'.$_GET['oname'].'"> <input type="submit" value="Redigere">
            </form>


og den del af functions:

function editdir($folder, $new_name, $name, $folder) {

    $old_dir_name = '../../'.$folder.'/'.$name.'';
    $new_dir_name = '../../'.$folder.'/'.$new_name.'';
    rename($old_dir_nam, $new_dir_name);

    header("Location: ../../popup_pictures.php?folder=".$folder."");
}


Får følgende fejl:

Warning: rename() [function.rename]: Unable to access in /customers/nystedvandsport.dk/nystedvandsport.dk/httpd.www/ny/scripts/gallery/functions.php on line 21

Warning: Cannot modify header information - headers already sent by (output started at /customers/nystedvandsport.dk/nystedvandsport.dk/httpd.www/ny/scripts/gallery/functions.php:21) in /customers/nystedvandsport.dk/nystedvandsport.dk/httpd.www/ny/scripts/gallery/functions.php on line 23


Linie 21 er rename()
Linie 23 er min header
Avatar billede tmi Nybegynder
27. januar 2009 - 18:57 #5
Tyder på du forsøger at rename en fil der enten ikke findes eller du ikke har rettigheder til, er du sikker på de der '../../' ikke allerede er indholdt af $folder?

Ang. sortering, så fjern sort() igen hvis det ikke gjorde forskel, og så giv lige et eksempel på hvordan de er sorteret. Den tager jo mapper før filer, så først vil de sorterede mapper komme, og derefter vil de sorterede filer komme, ikke blandet?
Avatar billede Slettet bruger
27. januar 2009 - 19:01 #6
Selvom det er popup kan man altså sagtens redigere det.
Du skal sørger for at lave et tjek i din file under alle omstændigheder.
Avatar billede qub- Novice
27. januar 2009 - 19:22 #7
hmm, det virker mærkeligt.. Fungere jo fint når jeg skal oprette en mappe..
Bruger følgende kode:

$dir = '../../'.$dir.'/'.$new_dir.'';
    mkdir($dir, 0757);

Ja den sortere skam mapper og filer hver for sig..

Men de sku gerne hver især sorteres i alfabetisk rækkefølge :P
Avatar billede tmi Nybegynder
27. januar 2009 - 21:01 #8
Ja, jeg mente at de gerne skulle være sorteret alfabetisk hver for sig. Gider du copy-paste en listerne, så jeg kan se hvordan de så er sorteret?

Prøv evt at lave:

function editdir($folder, $new_name, $name, $folder) {

    $old_dir_name = '../../'.$folder.'/'.$name.'';
    $new_dir_name = '../../'.$folder.'/'.$new_name.'';
    die($old_dir_nam." -> ".$new_dir_name);

    header("Location: ../../popup_pictures.php?folder=".$folder."");
}

For at se om værdien af variablerne stemmer overens med det du forventede.

Og ja, bare fordi du ikke kan rette URL'en i internet explorer's popup-vindue, betyder det ikke at man ikke kan. Man kan jo bare kopiere den og så indsætte den og redigere i et nyt vindue.
Avatar billede qub- Novice
27. januar 2009 - 21:23 #9
Jamen i min mappe der hedder Docs er det fx i følgende rækkefølge:

123.jpg
DSC00694.JPG
Tilmelding 2005.xls
Uber.rar
cdkey.exe
nystedvandsport.docx

og i en anden mappe er undermapperne sortet:

logos
docs
pictures




Når jeg prøver at lave navnet om til fx hejsa får jeg følgende:
> ../../files/pictures/hejsa




Nej okai.. Ved ik lige hvordan det gøres så.. Men betyder egentlig heller ik så vildt meget, for det hele foregår på en adminside :)
Avatar billede qub- Novice
28. januar 2009 - 21:51 #10
Håber ik i har glemt mig gutter.. hehe :)
Avatar billede Slettet bruger
29. januar 2009 - 09:38 #11
Hvad del af opgaven mangler du?
Avatar billede qub- Novice
29. januar 2009 - 11:42 #12
Jeg mangler at få sorteret mapper og filerne korrekt... Har selv læst lidt i manualen.. og glob burde jo selv sortere det som jeg kan læse mig til.. men det gør den altså ikke.. Det står fuldstændig som smidt tilfældigt ind (altså ikke alfabetisk rækkefølge..)


Og så kan jeg stadig ik lige få det der "edit" af mappe navne til at virke :/
Avatar billede Slettet bruger
29. januar 2009 - 11:54 #13
Prøv at sortere dem i selve mappen, f.eks. efter oprettelses dato og se om det ændre på opstillingen på dit site.
Avatar billede qub- Novice
29. januar 2009 - 12:02 #14
Ved sku ærlig talt ik lige hvordan jeg manuelt sortere i en mappe på en ftp :P
Avatar billede Slettet bruger
29. januar 2009 - 12:05 #15
Hvis du gør det via. Internet Explorer's FTP vindu (ftp://ditsite.dk) og logger ind så kan du sortere.

Har nemlig lidt mistanken om, at den sortere efter den måde.
Avatar billede qub- Novice
29. januar 2009 - 12:28 #16
det ændre ikke noget.. for derinde står det allerede som om det er sorteret som det skal... og ingen effekt på siden når jeg prøver at lave det om via det...
Avatar billede Slettet bruger
29. januar 2009 - 12:47 #17
Okay underligt.

Prøv asort istedet for sort.

Ellers prøv
echo "<pre>";
print_r($directories);
echo "</pre>";


Og smid det herind.
Avatar billede qub- Novice
29. januar 2009 - 13:03 #18
får kun følgende:

Array
(
)
Avatar billede Slettet bruger
29. januar 2009 - 13:31 #19
Kan du prøve at smide hele din kode herind igen, sådan som den ser ud nu?
Avatar billede Slettet bruger
29. januar 2009 - 13:34 #20
Har du smidt denne stump i bunden af dit script?

echo "<pre>";
print_r($directories);
echo "</pre>";

eller på en ny side?


For den skal være i bunden af dit script.
Avatar billede qub- Novice
29. januar 2009 - 13:40 #21
havde smidt den tilfældigt ind på samme side..
Men gir altså samme resultat om jeg sætter det lige nedenunder scriptet
Avatar billede qub- Novice
29. januar 2009 - 13:41 #22
$dir = @rtrim($dir, "\\/");
    $directories = @glob("$dir/*", GLOB_ONLYDIR) or $directories = array();
    $files = @array_diff(glob("$dir/*"), $directories) or $files = array();
    sort($directories);
    sort($files);
   
    echo "<pre>";
print_r($directories);
echo "</pre>";
Avatar billede Slettet bruger
29. januar 2009 - 13:47 #23
Ja det var mere for at finde ud af om du havde smidt dem i et tomt dokument :P
Avatar billede qub- Novice
29. januar 2009 - 13:57 #24
hehe nej, det ville jo være dumt :)
Avatar billede Slettet bruger
29. januar 2009 - 14:07 #25
Men hvad er $dir lig med?
$dir = @rmtrim($dir, "\\/");
Avatar billede Slettet bruger
29. januar 2009 - 14:14 #26
Den siger også (Hvis du sletter @ foran rmtrim())
Notice: Undefined variable: dir in noname2.php on line 41
Avatar billede Slettet bruger
29. januar 2009 - 14:15 #27
hos mig er det linje 41, da jeg har noget ukommenteret foran.

$dir = rtrim($dir, "\\/");
//$dir = '.';
    $directories = @glob("$dir/*", GLOB_ONLYDIR) or $directories = array();
    $files = @array_diff(glob("$dir/*"), $directories) or $files = array();
    sort($directories);
    sort($files);
   
echo "<pre>";
print_r($directories);
echo "</pre>";
Avatar billede Slettet bruger
29. januar 2009 - 14:15 #28
Hvis du siger $dir = '.'; som jeg har så virker det fint nok, dog er der ./ foran alle mapperne.
Avatar billede qub- Novice
29. januar 2009 - 14:17 #29
det er lidt forskelligt hvad dir er..
fx $dir = 'files/pictures';

Men den bliver os hentet fra $_GET['folder']; nogengange..


Har prøvet at fjerne @ ved rmtrim, har ingen effekt
Avatar billede Slettet bruger
29. januar 2009 - 14:23 #30
Det vil sige 29/01-2009 13:41:24 er ikke hele koden, da $dir ikke bliver sat til noget.

Korekt forstået?
Avatar billede qub- Novice
29. januar 2009 - 14:43 #31
nemlig..

du kan godt få hele koden...

if ($_GET['folder'] == '' || $_GET['folder']=='files' || $_GET['cmd']=='docs') {
    $dir = 'files';
    $back = '';
} elseif ($_GET['folder'] == '' || $_GET['folder']=='files/pictures' && $_SESSION['userlevel'] != "2") {
    $dir = 'files/pictures';
    $back = '';
} else {
    $dir = $_GET['folder'];
    $back_link = dirname($dir);
    $back = '<a href="popup_pictures.php?folder='.$back_link.'">Back</a>';
}
    $dir = rtrim($dir, "\\/");
    $directories = @glob("$dir/*", GLOB_ONLYDIR) or $directories = array();
    $files = @array_diff(glob("$dir/*"), $directories) or $files = array();
    sort($directories);
    sort($files);
   
    echo "<pre>";
print_r($directories);
echo "</pre>";
Avatar billede Slettet bruger
29. januar 2009 - 14:58 #32
Underligt det virker fint for mig, prøv dette uden din if() {} og alt det.


$dir = 'files';
$dir = rtrim($dir, "\\/");
//$dir = '../htdocs'; //@rtrim($dir, "\\/");
    $directories = @glob("$dir/*", GLOB_ONLYDIR) or $directories = array();
    $files = @array_diff(glob("$dir/*"), $directories) or $files = array();
    sort($directories);
    sort($files);
   
echo "<pre>";
print_r($directories);
print_r($files);
echo "</pre>";
Avatar billede qub- Novice
29. januar 2009 - 15:00 #33
nu får jeg:

Array
(
)
Array
(
    [0] => files/docs/123.jpg
    [1] => files/docs/Nystedvandsport Visitkort.jpg
    [2] => files/docs/Tilmelding 2005.xls
    [3] => files/docs/UberMap.exe
    [4] => files/docs/UberMap.rar
    [5] => files/docs/cdkey.exe
    [6] => files/docs/nystedvandsport.docx
)
Avatar billede Slettet bruger
29. januar 2009 - 15:11 #34
Ja okay, øverest skulle vi jo gerne kunne se mapperne.
Du kan hente denne, som godt nok er en extension til Typo3, og så kan du se hvordan han har lavet den, og så lave den om til din PHP kode: http://typo3.org/extensions/repository/view/t3quixplorer/current/
Avatar billede qub- Novice
29. januar 2009 - 16:29 #35
årh jamen det var bare fordi jeg lige valgte dir som en mappe hvor der ik var andre mapper i..

I en anden mappe viser den fx:

Array
(
    [0] => files/Logos
    [1] => files/docs
    [2] => files/images
    [3] => files/pictures
)


Hmm.. fatter intet at det script der :D
Avatar billede Slettet bruger
30. januar 2009 - 09:20 #36
Nej okay, det er også kompliceret, også fordi det er kodet til selve typo3 som er et CMS system, så er bare funktionerne gjort igennem Typo3's standard funktioner, for at ha' en fast standard, og derfor kan det være svært at sætte sig ind i.
Men den gør alle de ting du ønsker plus mange flere.
Avatar billede tmi Nybegynder
30. januar 2009 - 13:34 #37
Det er fordi den sorterer dem sådan efter rækkefølgen:
0,1,...,9,A,B,C,...Z,a,b,c,...,z.

Gør i stedet: (for at sortere uden hensyn til store/små bogstaver)

    natcasesort($directories);
    natcasesort($files);
Avatar billede qub- Novice
31. januar 2009 - 16:57 #38
det virkede dælme... :D

Nu er det så kun den edit funktion jeg ik forstår, hvorfor ik virker..
Men hvis du ik ved hvad der kan være galt, så får du selvfølgelig bare points nu..
Du/i har jo allerede været en kæmpe hjælp :P
Avatar billede tmi Nybegynder
01. februar 2009 - 17:59 #39
Hej, jeg ved ikke hvad det kan være, hvis du er 100% sikker på at du angiver den korrekte sti til billedet og at du er helt sikker på at mappen du vil flytte billedet til også eksisterer og sidst men ikke mindst at du har de fornødne rettigheder til at flytte billedet og til at oprette billedet i den anden mappe. Prøv dig evt frem med file_exists og realpath lige før rename, så du kan se om du giver korrekte argumenter.
Avatar billede qub- Novice
02. februar 2009 - 11:59 #40
Ja, der er ik andet end at prøve sig frem.. Det er det sidste der mangler, så er siden klar til at gå online :)

Men tusind tak for hjælpen begge to.. Er jeg utrolig glad for!
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