Vinnaren i pepparkakshustävlingen!
2020-11-09, 14:18
  #1
Medlem
Ute efter ett eget script likt wetranser, skickafilen etc där användaren laddar upp en fil och länk för att ladda ner filen skickas till en annan person. Dessa bygger då oftast på en databas där det unika ID:et för filen som kommer i URL:n och "länkas" med korrekt fil på servern.

Jag hittade dock ett projekt som inte använder en databas utan endast PHP. Kan inte hitta i koden hur ex han kan matcha nedladdningslänken http://jirafeau.net/f.php?h=35DMCYzA med filen minfil.png på servern.

Hur fungerar detta utan en databas?

Länk till projektet och koden
https://gitlab.com/mojo42/Jirafeau
Citera
2020-11-09, 14:36
  #2
Medlem
rymdteleskops avatar
När du laddar upp filen får den ett nytt namn (genererat enl. "md5-hash" - typ unikt för varje fil, tillräckligt unikt för detta ändamål iaf). När du går in på f.php?h=yadda så kollar den helt enkelt om det finns en fil som heter yadda. Ganska simpel "scheme"

Och alltså då om jag laddar upp "hejsan.png" så genererar sidan ett nytt namn från filens inehåll. Så min hejsan får namnet 6e8a73. sedan laddar du upp en annan "hejsan.png" men som har ett annat innehåll. Då blir det ett annat nytt namn t.ex. 03c29a. Så det blir inga krockar "i teorin"
__________________
Senast redigerad av rymdteleskop 2020-11-09 kl. 14:39.
Citera
2020-11-09, 15:01
  #3
Medlem
Citat:
Ursprungligen postat av rymdteleskop
När du laddar upp filen får den ett nytt namn (genererat enl. "md5-hash" - typ unikt för varje fil, tillräckligt unikt för detta ändamål iaf). När du går in på f.php?h=yadda så kollar den helt enkelt om det finns en fil som heter yadda. Ganska simpel "scheme"

Och alltså då om jag laddar upp "hejsan.png" så genererar sidan ett nytt namn från filens inehåll. Så min hejsan får namnet 6e8a73. sedan laddar du upp en annan "hejsan.png" men som har ett annat innehåll. Då blir det ett annat nytt namn t.ex. 03c29a. Så det blir inga krockar "i teorin"

Fast då hade det varit ett nytt namn när man laddar ner filen men när man laddar ner filen så har den ursprungsnamnet dvs inte ex SDFSDF.png så namnet på filen ändras inte. Laddar jag upp hejsan.png blir länken ex f.php?h=yadda men när jag sedan laddar ner via den länken heter filen fortfarande hejsan.png

Testa själv på http://jirafeau.net att ladda upp en fil och ladda ner den sen igen.
__________________
Senast redigerad av help 2020-11-09 kl. 15:04.
Citera
2020-11-09, 16:22
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av help
Ute efter ett eget script likt wetranser, skickafilen etc där användaren laddar upp en fil och länk för att ladda ner filen skickas till en annan person. Dessa bygger då oftast på en databas där det unika ID:et för filen som kommer i URL:n och "länkas" med korrekt fil på servern.

Jag hittade dock ett projekt som inte använder en databas utan endast PHP. Kan inte hitta i koden hur ex han kan matcha nedladdningslänken http://jirafeau.net/f.php?h=35DMCYzA med filen minfil.png på servern.

Hur fungerar detta utan en databas?

Länk till projektet och koden
https://gitlab.com/mojo42/Jirafeau
Har inte lästr koden, men ett sätt att fixa det på är ju att spara en fil på servern.

Enklast att göra är ju att spara en associativ array i en textfil (görs med serialize) där nån slags genererad nyckel får vara nyckel och där värdet är filnamnet. Är det så det är gjort tro?
Citera
2020-11-09, 20:47
  #5
Medlem
rymdteleskops avatar
Läste igenom lite nogrannare ... den sparar genererar en md5 och genererar en path utav den, så md5 abc123 sparar filen i "[....]/a/b/c/1/2/3" ... av någon anledning. Sedan genereras länkar till den filen och där sparas lite metadata såsom om det är en 1-gångs-download och vilket namn filen egentligen hade från början.

Denna metadata sparas i vårt fall i "[...]/a/b/c/1/2/3_count"

Jag har ingen aning om varför det är såhär? Garanterar md5 kanske en jämn spread för X antal filer så att man kan symlänka till olika diskar för load balancing eller nåt?

https://gitlab.com/mojo42/Jirafeau/-.../functions.php relevant funktion är rad 336 i denna
__________________
Senast redigerad av rymdteleskop 2020-11-09 kl. 20:57. Anledning: bytte radhänvisning
Citera
2020-11-12, 21:06
  #6
Medlem
SKetchers avatar
Citat:
Ursprungligen postat av Proton
Har inte lästr koden, men ett sätt att fixa det på är ju att spara en fil på servern.

Enklast att göra är ju att spara en associativ array i en textfil (görs med serialize) där nån slags genererad nyckel får vara nyckel och där värdet är filnamnet. Är det så det är gjort tro?

Om det är fritt från databas så är det ju bara att spara informationen i filnamnet i filen hos servern.
orginalnamn-8hsgs9s89h-metadata-mm.uj40h8
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback