Tips om program för enkel filserver med webbgränssnitt

Permalänk

Tips om program för enkel filserver med webbgränssnitt

Hej,

Jag önskar skapa en virtuell filserver där användare kan slå in url i valfri webbläsare till ett webbgränssnitt där de enkelt kan ladda upp/ner samt redigera filer. Inte film/mp3 utan vanliga textfiler .odt .pdf .txt .doc osv under debian. Dvs användare skall slippa använda en ftp klient.

Slänga upp filerna i /var/www/whatever med ett kustomiserbart webbgränssnitt hade varit optimalt

Tips?

Permalänk
Medlem

Det är ganska enkelt fixat, det här är kod som jag skrev en gång för att jag ville dels lära mig lite hur $_FILE var strukturerad och så att jag inte skulle behöva böka med just FTP inlogg bara för att nån kompis skulle ladda upp en eller två småfiler.

index.php

<?php include 'function.inc.php'; if(isset($_FILES["file"])) { upload_file(); } printf(' <html> <body> <form action="index.php" method="post" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Submit" /> </form> '); if($handle = opendir("upload/")) { echo "Files: <br>"; } while(false !== ($file = readdir($handle))) { if($file != "." && $file != "..") { printf('[<a href="http://IP-ADDRESS-ELLER-HOSTNAME/upload/%s">Get</a>]: %s <br />', $file, $file); } } closedir($handle); printf(' </body> </html> '); ?>

function.inc.php

<?php function upload_file() { if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . (round($_FILES["file"]["size"] / 1024,2)) . " Kb<br />"; echo "<hr>"; } } ?>

Det du måste göra är att spara ner koden i till två filer (index.php och function.inc.php) och i samma directory skapa mappen upload/ och chmod'a den till 777. Ändra sedan a-taggen som skapar länken till filen så att den passar dig. Sedan är det bara att börja ladda upp filer.

EDIT: Den här koden har ingen möjlighet att redigera dokument, men det är ganska snabbt fixat med en fopen() och ett textfield och en submitknapp.

Permalänk

fungerar utmärkt!

men avsaknad att kunna redigera en text fil samt att alla som kan adressen kommer åt filerna. Hade behövt ha någon form av användarlogin också :/

Permalänk
Medlem

För enkelhetens skull kan du använda htaccess för användarinlogg, visst kan jag koda in inloggning men det blir ganska mycket jobb för ganska lite nytta. kanske framöver om jag fortsätter med att snygga till den här funktionen.

Anywho... jag fixade till editering och lite sånt. här är koden.

index.php

<?php include 'function.inc.php'; if(isset($_FILES["file"])) { upload_file(); } if(isset($_GET["cmd"])) { $cmd = $_GET["cmd"]; } else { $cmd = NULL; } if(isset($_GET['file']) || isset($_POST['file'])) { if(isset($_GET['file'])) { $file = $_GET['file']; } if(isset($_POST['file'])) { $file = $_POST['file']; } } else { $file = NULL; } if(isset($_POST['content'])) { $cmd = 'process'; } /* DEBUG */ /* var_dump($_POST); echo "<hr>"; var_dump($_GET); */ printf(' <html> <head> <script src="script.js" language="JavaScript"></script> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Submit" /> </form> <hr width="400" align="left"> <a href="index.php?cmd=list" target="_self">file list</a> <hr width="400" align="left"> '); switch ($cmd) { case "list": print_filelist(); break; case "edit": edit_file($file); break; case "process": process_file($file); break; default: print_filelist(); break; } printf(' </body> </html> '); ?>

functions.inc.php

<?php function process_file($fn) { $fn = "upload/".$fn; $content = stripslashes($_POST['content']); $fp = fopen($fn,"w") or die ("Error opening file in write mode!"); fputs($fp,$content); fclose($fp) or die ("Error closing file!"); echo "<meta http-equiv=\"refresh\" content=\"0; url=index.php\" />\n"; } function edit_file($fn) { $f = $fn; $fn = "upload/".$fn; printf(' <form action="index.php" method="post"> <textarea rows="25" cols="40" name="content"> ', $fn); print htmlspecialchars(implode("",file($fn))); printf(' </textarea><br> <input type="submit" value="Change!"> <input type="hidden" name="file" value="%s"></input> </form> ', $f); } function print_filelist() { if($handle = opendir("upload/")) { echo "Files: <br>"; } printf('<input type="button" onClick="show();" value="show"/></input> <input type="button" onClick="hide();" value="hide"/></input> <div id="fileList" style="display: none;"> '); while(false !== ($file = readdir($handle))) { if($file != "." && $file != "..") { printf('[<a href="http://%s/upload/%s" target="_self">D</a>|<a href="http://%s/index.php?cmd=edit&file=%s" target="_self">E</a>]: %s <br />', $_SERVER["SERVER_NAME"], $file, $_SERVER["SERVER_NAME"], $file, $file); } } printf('</div>'); closedir($handle); } function upload_file() { if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"] . "<br />"; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . (round($_FILES["file"]["size"] / 1024,2)) . " Kb<br />"; echo "<hr>"; } } ?>

Lite ful kod kanske men jag har inte gått någon programering alls, annat än lite C++ i skolan för 10år sedan.