länka 3000 filer automatiskt, kan man det?

Tråden skapades och har fått 23 svar. Det senaste inlägget skrevs .
1

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?

  • Medlem
  • 2003-05-25 19:51

Det är väl bara att lägga dom i en mapp som inte har nån html-fil så kommer dom ju ligga i en lång lista..

Då kan man ju bara ladda ner filerna genom att välja "spara mål som..."

  • Oregistrerad
  • 2003-05-25 22:06

Varför inte ett applescript som fixar en snygg html fil eller något

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 [rasmus@flajm.com]> 
'############################################### 
 
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("."); 
*/ 
 
?>
Citat:

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!!

Föresten Johan.

Förutsätter ditt php exempel att php dokumentet och filerna ligger i samma mapp, eller behöver man ändra något?

  • Medlem
  • Svedala
  • 2003-05-26 15:26

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

Senast redigerat 2003-05-28 17:53

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

Citat:

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!!

Eller så sätter du ett kryss i en ruta för "Allow Directory Listing" som jag nämnde i ett av mina inlägg.

Lycka till!

/Ola

  • Medlem
  • Svedala
  • 2003-05-28 15:51

Fast om man använder sig av det så är det ju lite svårare att få till en egen layout på listan, om man nu vill ha det.

Citat:

Skrevs ursprungligen av Taz_1999
Eller så sätter du ett kryss i en ruta för "Allow Directory Listing" som jag nämnde i ett av mina inlägg.

Lycka till!

/Ola

var någonstans hittar jag stället där jag ska sätta krysset?

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

Citat:

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

Citat:

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.

1
Bevaka tråden