- mauserman
- Medlem ●
- Göteborg
hej!!
Låt säga att man har ett par tusen filer som man vill göra tillgängliga på webben, alltså så att folk kan ladda ner dom.
Måste man då manuellt skapa alla länkar (hoppas inte), eller finns det nåt annat smart sätt för att låta användarna "browsa" alla filerna?
Självklart kan du det. Man behöver dock någon serverteknik som ASP eller PHP.
Sedan skriver man ett script som läser ut filerna ur mappen och visar det du vill ska synas. Man kan alltså välja att visa t ex filnamn, storlek, senast ändrad osv. Med stylesheet kan du också få rätt ikon till olika filändelser.
Nu är inte jag bra på script så jag kan inte hjälpa dig där, men jag vet att det går utmärkt att göra. Sök efter hjälp på nätet.
Detta hittade jag på fatmilk
(nån som känner igen fönsterdesignen på sidan)
<% '############################################### ' A function (acctually two) for listing the ' Titles of all documents in a folder. ' It gets the text inside of the <TITLE> tag. ' <Rasmus Andersson [[email protected]]> '############################################### Function GetTitle(file) 'Dimma in Dim fso Dim act Dim htmlContent 'Read source set fso = createobject("scripting.filesystemobject") set act = fso.opentextfile(server.mappath(file)) htmlContent = act.readall act.Close 'Get Title position Dim headPos1 Dim headPos2 headPos1 = (Instr(LCase(htmlContent), "<title>")+7) headPos2 = Instr(LCase(htmlContent), "</title>") 'Return title of document If headPos1 <> 0 AND headPos2 <> 0 Then GetTitle = Mid(htmlContent, headPos1, (headPos2-headPos1)) Else GetTitle = "Untitled" End If End Function Function PrintHTMLtitleList(sourceFolder) 'Dimma in Dim directory Dim allfiles Dim file 'Set up object Set directory = server.createobject("scripting.filesystemobject") Set allfiles = directory.getfolder(server.mappath(sourceFolder)) 'List the titles For each file in allFiles.files Response.Write GetTitle(sourceFolder & file.Name) & "<br>" Next End Function Response.Write "Titles of content in " & Server.MapPath(Request("f")) & "<hr>" Response.Write PrintHTMLtitleList(Request("f")) %>
Detta är ASP som inte funkar på OSX Apache. Vad har du för server ?
Lika bra jag lägger in en PHP-version också.
Jag har inte testat dessa själv.
<? function list_dir($dir) { $handle=opendir($dir); echo "<ul>"; while ($file = readdir($handle)) { if ($file != '.' && $file != '..') print ("<li><a href=\"".$GLOBALS["path"].$file."\" target=\"_blank\">".$file."</a>"); if (is_dir($file) && $file != '.' && $file != '..') { $toto = $GLOBALS["path"]; $GLOBALS["path"] .= $file."/"; chdir ($file); list_dir("."); $GLOBALS["path"] = $toto; chdir (".."); } } echo "</ul>"; closedir($handle); } $directory = list_dir("."); /* $GLOBALS["path"] = "http://".$HTTP_HOST."/".$directory."/" ; list_dir("."); */ ?>
Skrevs ursprungligen av Johan Arvidsson
Lika bra jag lägger in en PHP-version också.
Jag har inte testat dessa själv.
Jag kör faktiskt php på servern, men kan inget om det direkt, men det är väl bara att testa och lägga in php-koden i ett html-dokument antar jag?
Tack för tipset!!
Det scriptet Johan har där är en funktion som behöver nån slags parameter för att funka.
Om jag har tolkat det rätt så lägger du först in det där scriptet i en php-fil, och sedan kallar du det med <?php list_dir("/sökväg/till/alla/filer/"); ?>.
Lycka till!
Som sagt, jag är kass på script och båda dessa är bara inklippta från fatmilk-sidan.
Det finns säkert andra bra varianter att använda. Testa och sök runt på andra script-arkiv så lär du hitta något bra.
Om du lägger koden i ett dokument måste filen ha ändelsen php för att servern ska köra koden.... tror jag.
Man kan korta ned det också:
<?php $dirhandle = opendir("."); while ( ($entity = readdir($dirhandle))!==false) { if(($entity!='.') && ($entity!='..')) echo "<A href=\"$entity\">$entity</A>\n<BR>\n"; ?>
lägg in det här skriptet i en fil i samma mapp som filerna som ska länkas och döp den till index.php. På så sätt kan ingen gå in "direkt" i mappen och se filerna. Lite HTML behöver du naturligtvis runt om så att det blir snyggt.
Visserligen kan man skriva ett PHP-script på ett par sidor, men kan kan istället sätta ett kryss i en ruta i webserverns inställningar för "Allow Directory Browsing" eller motsvarande terminologi i din webbserverprogramvara. (I Server Settings för Mac OS X Server för Apache heter det "Enable folder listing". Detta brukar kunna göras per mapp eller per domän, beror lite på vilka funktioner webbservern har. Om servern bara stödjer detta per domän, så får du ordna en domän till, tex www2.exempel.com eller files.exempel.com. Om du rattar din egen DNS så är det gjort på några minuter.
Andra alternativ är att via tex FileMaker Pro importera mappen med bilder och sedan "skjuta ut" en eller flera HTML-dokment med länkar till filerna (tar runt 45 minuter att hacka ihop detta i FM).
Sedan finns Lasso förstås...
/Ola
Ungefär samma funktionalitet i Lasso ser ut som nedan. Stoppa in det i en fil du döper till index.lasso och droppa den i mappen med filerna i.
<p><strong>Lista på filer i denna mapp</strong></p> [Variable_Set: 'ListOfFilesArray'=(File_ListDirectory: (Response_Path))] [Variable_Set:'NumberOfObjects'=(Variable: 'ListOfFilesArray')->Size] [If: (Variable:'NumberOfObjects') > 0] [Loop: (Variable:'NumberOfObjects')] <P><A HREF="[Output: (Variable: 'ListOfFilesArray')->(Get: (Loop_Count))]"> [Output: (Variable: 'ListOfFilesArray')->(Get: (Loop_Count))]</A></P> [/Loop] [Else] <P>Inga filer att lista här</P> [/If]
Lycka till!
/Ola
he he, lugn i stormen grabbar. Ni talar med kille som alldeles nyligen via en massa forum lyckats få igång en apache server på sin imac och även php delen i densamma.
Det låter som jag får skaffa en bok om php programmering, för ni ligger på en lite för hög nivå för en hobbyadministratör.
Hur som helst, tack så mycket för alla trevliga och säkert mycket bra förslag.
kanske vågar man istället fråga om ni känner till nån bra php-bok för nybörjare, gärna på svenska?
Gör bara ett litet terminalskript.
1. Skriv pico ~/test.sh
2. Klistra in:
for i in *.*; do echo '<a href="'$i'">'$i'</a>'; done;
och spara med ctrl-x
3. Skriv chmod +x test.sh
4. Kopiera skriptet till mappen med dina filer.
5. Starta sedan skriptet med ./test.sh >output.htm
Ciryon
Skrevs ursprungligen av Ciryon
Gör bara ett litet terminalskript.
1. Skriv pico ~/test.sh
2. Klistra in:
for i in *.*; do echo '<a href="'$i'">'$i'</a>'; done;
och spara med ctrl-x
3. Skriv chmod +x test.sh
4. Kopiera skriptet till mappen med dina filer.
5. Starta sedan skriptet med ./test.sh >output.htm
Ciryon
Jag är förbluffad, hur kan man veta såna här saker?
Tack för tipset!!
För att kunna beskriva exakt hur du gör i den webbserverprogramvara som du har så behöver vi nog veta exakt vilken webbserverprogramvara du har. Operativystem är också bra att veta. Jag kan inte se att du har skrivit det i något av dina inlägg.
/Ola
Skrevs ursprungligen av Taz_1999
För att kunna beskriva exakt hur du gör i den webbserverprogramvara som du har så behöver vi nog veta exakt vilken webbserverprogramvara du har. Operativystem är också bra att veta. Jag kan inte se att du har skrivit det i något av dina inlägg.
/Ola
Jag kör mac os x (10.2.6)
jag har startat servern med hjälp av de saker som redan finns i systemet (apache och php). Jag har också installerat mysql, pga att jag även kör ett forum som heter phpbb där det krävdes.
Jag vet inte nåt om vilka versioner som "mysql, apache eller mysql" befinner sig i.
hoppas informationen var till nån nytta.
För att tillåta listning av kataloginnehåll i Apache gör man lämpligast en .htaccess-fil i den katalog som ska listas. Man _kan_ gå in och ändra globalt så att man får lista filer i precis alla kataloger, men det är inget vidare ur säkerhetssynpunkt. För att Apache ska vilja kännas vid .htaccess-filer måste vi först bara ändra lite i Apaches huvudkonfigurationsfil (/etc/httpd/httpd.conf, ta gärna backup på den innan du ändrar något). Öppna filen med valfri textredigerare, och leta upp raderna som ser ut så här:
<Directory /> Options FollowSymLinks AllowOverride None </Directory>
Ändra raden "AllowOverride None" till "AllowOverride All", så att det ser ut så här:
<Directory /> Options FollowSymLinks AllowOverride All </Directory>
Sedan är det bara att spara och avsluta. Starta sedan om Apache genom att skriva "sudo apachectl graceful" (eller "sudo apachectl restart") i terminalen. Har du gjort allt rätt kommer du inte att få några felmeddelanden.
Sedan går du till katalogen som du vill tillåta listning på, och i den katalogen skapar du en fil med namnet ".htacccess", och använder din textredigerare för att lägga in nedanstående i filen:
Options Indexes
Om allt gått som det ska bör du sedan kunna lista innehållet i den aktuella katalogen.
Kan tillägga att den webbserver du har heter Apache och dokumentationen om denna hittar du här:
http://httpd.apache.org/docs-project/
Det som Samuel beskriver är sättet att "sätta krysset i rutan" som jag pratade om. (Med Mac Os X Server medföljer ett program som heter Server Settings där man via ett grafiskt gränssnitt kan göra samma sak för en hel webbsite genom att sätta ett kryss i en ruta. Men det programmet medföljer inte "vanlig" Mac OS, så då får man göra som Samuel beskriver).
/Ola
Skrevs ursprungligen av Taz_1999
Kan tillägga att den webbserver du har heter Apache och dokumentationen om denna hittar du här:
http://httpd.apache.org/docs-project/
Det som Samuel beskriver är sättet att "sätta krysset i rutan" som jag pratade om. (Med Mac Os X Server medföljer ett program som heter Server Settings där man via ett grafiskt gränssnitt kan göra samma sak för en hel webbsite genom att sätta ett kryss i en ruta. Men det programmet medföljer inte "vanlig" Mac OS, så då får man göra som Samuel beskriver).
/Ola
Ok, så med mac os x server hade det varit lite enklare. Tack för informationen.