Avatar billede llgpublic Nybegynder
15. september 2003 - 09:54 Der er 21 kommentarer og
1 løsning

Manglende funktion i PHP script..

Jeg er ved at lave et lille simpel File Manager script,
som allerede nu kan liste alle de filer i den mappe
hvori scriptet er placeret i..

Den funktion der mangler er egentligt bare, at
scriptet skal kunne lave links til de filer som
mappen scriptet er placeret indeholder.

F.eks, hvis scriptet ligger i en mappen hvori
der ligger en fil med navnet players.txt,
skulle den lave et link til den, og dermed
ikke kun vise hvad filen hedder.. For at kunne
se/hente denne fil skal man selv skrive filnavnet
i sin browser, men det som skulle kunne lade
sig af gøre er at scriptet selv linker til de filer
som er i den enkelte mappe.

Demo Script:
www.cardinals.dk/cgi-bin/managerlite/qtofml.php

En Lite version af dette script kan findes her:
www.cardinals.dk/cgi-bin/managerlite.rar

    - llgpublic
Avatar billede billen Nybegynder
15. september 2003 - 09:58 #1
DU skal vel bare bruge readfile()
Avatar billede billen Nybegynder
15. september 2003 - 09:59 #2
Avatar billede llgpublic Nybegynder
15. september 2003 - 09:59 #3
Hmm... Kan du udbyde dit svar lidt nærmere ?
Avatar billede billen Nybegynder
15. september 2003 - 10:00 #4
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:00 #5
Oki.. Kan du vise dette ved at redigere og uploade mit script med dit foreslag inkluderet i kilden ...
Avatar billede billen Nybegynder
15. september 2003 - 10:01 #6
når man klikker på filen, så kalder du en phpfunktion, der kalder:

<?php
readfile( $dinfil );
?>

Der er dog ikke taget højde for sikkerhed her. Det må du selv rode med ;-)
Avatar billede billen Nybegynder
15. september 2003 - 10:02 #7
noget sludder jeg skrev der:

linket er: visfil.php?dinfil=testmappe/testfil.txt

visfil.php indholder:

<?php
readfile( $dinfil );
?>
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:02 #8
Det ved jeg dog godt, men kunne godt tænke mig at scriptet linker til de filer den finder i mappen istedet for at lave en liste uden linkt kun med navnet på filerne ...
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:05 #9
.. Uploader man en fil med scriptet finder den selv ud af at der er kommet en ny fil (eller flere) i den mappe som det er placeret i og dermed lister den filerne i mappen, men unlader at linke til dem, det jeg godt kunne tænke mig er bare at den også laver links til filerne som er i mappen ... Forstår du ??
Avatar billede billen Nybegynder
15. september 2003 - 10:08 #10
ja, men jeg skal bare være sikker på hvad du mener med "link" og hvad der så skal ske. Hvad er et link til filen i mappen? og når jeg så klikker på det link hvad skal der så ske?
Avatar billede billen Nybegynder
15. september 2003 - 10:13 #11
<?php
$file = "<a href=\"$newpath/$file\">$file</a>";
?>
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:15 #12
Hmm... Vil lige prøve det !
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:20 #13
Argh, hvor i scriptet, have du tænkt dig at inkludere dette ?

Kan ikke lige følhe dig, er træt og fatter ikke meget p.t. *GG*

Kan du ikke poste kilden med din ændring ??
Avatar billede billen Nybegynder
15. september 2003 - 10:21 #14
to sek
Avatar billede billen Nybegynder
15. september 2003 - 10:26 #15
har uploadet den til dig ;-)
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:29 #16
Oki.. kigger lige på det ...
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:33 #17
Oki... mange tak det ser ud til at fungere fint nu, nu linker den til alle filerne som ønsket.. besvar mig lige, så jeg kan kreditere dig for din indsats !
Avatar billede billen Nybegynder
15. september 2003 - 10:34 #18
No problemo :-)
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:35 #19
Da ændringen af den endelige løsning ikke længere bliver tingendeligt, jer jeg valgt at poste kildekoden ...
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:35 #20
<?php

// set these configuration variables
$user = "";  // change this to the username you would like to use. leave it empty if you dont want to use authentication
$pass = "password";
$MaxFileSize = "1000000"; // max file size in bytes
$HDDSpace = "100000000"; // max total size of all files in directory
$HiddenFiles = array(".htaccess"); // add any file names to this array which should remain invisible
$EditOn = 1; // make this = 0 if you dont want the to use the edit function at all
$EditExtensions = array("htm","html","txt"); // add the extensions of file types that you would like to be able to edit

/********************************************************************/

$ThisFileName = basename(__FILE__); // get the file name
$path = str_replace($ThisFileName,"",__FILE__);  // get the directory path

if($login)
{
    if(!($u == $user && $password == $pass))
    {
        $msg = "<font face='Verdana, Arial, Hevetica' size='2' color='#ff0000'>The login details were incorrect</font><br><br>";
        $loginfailed = 1;
    }
}


if(($user == $u || $user == "") && $edit) // if an edit link was clicked
{
    $fp = fopen($path.$edit, "r");
    $oldcontent = fread($fp, filesize($path.$edit));
    fclose($fp);
   
$filemanager = <<<content
    <center>
    <table border="0" cellspacing="0" cellpadding="20" bgcolor="#eeeeee">
    <tr>
    <td>
    <font face="Verdana, Arial, Hevetica" size="4" color="#333333"><b>FILE MANAGER</b></font><br>
    <form name="form1" method="post" action="$PHP_SELF">
          <center>
            <textarea name="newcontent" cols="35" rows="15">$oldcontent</textarea>
            <br>
      <br>
            <input type="submit" name="save" value="Save">
            <input type="submit" name="cancel" value="Cancel">
            <input type="hidden" name="u" value="$u">
            <input type="hidden" name="savefile" value="$edit">
          </center>
    </form>
    </td>
    </tr>
    </table>
    </center>
content;
   
}
elseif(($user == $u || $user == "") && !$loginfailed)
{
       
    if($save) // if the save button was pressed on the edit screen
    {
        $newcontent = stripslashes($newcontent);
        $fp = fopen($path.$savefile, "w");
        fwrite($fp, $newcontent);
        fclose($fp);
    }

    $HDDTotal = dirsize($path); // get the total size of all files in the directory including any sub directorys

    if ($upload) // if the upload button was pressed
    {
        if($HTTP_POST_FILES['uploadedfile']['name']) // if a file was actually uploaded
        {
            $HTTP_POST_FILES['uploadedfile']['name'] = str_replace("%","",$HTTP_POST_FILES['uploadedfile']['name']);  // remove any % signs from the file name
            // if the file size is within allowed limits
            if($HTTP_POST_FILES['uploadedfile']['size'] > 0 && $HTTP_POST_FILES['uploadedfile']['size'] < $MaxFileSize)
            {
                // if adding the file will not exceed the maximum allowed total
                if(($HDDTotal + $HTTP_POST_FILES['uploadedfile']['size']) < $HDDSpace)
                {
                    // put the file in the directory
                    move_uploaded_file($HTTP_POST_FILES['uploadedfile']['tmp_name'], $path.$HTTP_POST_FILES['uploadedfile']['name']);   
                }
                else
                {
                    $msg = "<font face='Verdana, Arial, Hevetica' size='2' color='#ff0000'>There is not enough free space and the file could<br>not be uploaded.</font><br>";
                }
            }
            else
            {
                $MaxKB = $MaxFileSize/1000; // show the max file size in Kb
                $msg =  "<font face='Verdana, Arial, Hevetica' size='2' color='#ff0000'>The file was greater than the maximum allowed<br>file size of $MaxKB Kb and could not be uploaded.</font><br>";
            }
        }
        else
        {
            $msg =  "<font face='Verdana, Arial, Hevetica' size='2' color='#ff0000'>Please press the browse button and select a file<br>to upload before you press the upload button.</font><br>";
        }
    }
    elseif($delete) // if the delete button was pressed
    {
        // delete the file
        unlink($path.$delete);
    }

    $HDDTotal = dirsize($path); // get the total size of all files in the directory including any sub directorys
    $freespace = ($HDDSpace - $HDDTotal)/1000; // work out how much free space is left
    $HDDTotal = (int) ($HDDTotal/1000); // convert to Kb instead of bytes and type cast it as an int
    $freespace = (int) $freespace; // type cast as an int
    $HDDSpace = (int) ($HDDSpace/1000); // convert to Kb instead of bytes and type cast it as an int
    $MaxFileSizeKb = (int) ($MaxFileSize/1000); // convert to Kb instead of bytes and type cast it as an int

    // build the html that makes up the file manager
    // the $filemanager variable holds the first part of the html
    // including the form tags and the top 2 heading rows of the table which
    // dont display files
    $filemanager = <<<content
    <center>
    <table border='0' cellspacing='0' cellpadding='20' bgcolor='#eeeeee'>
    <tr>
    <td>
    <font face="Verdana, Arial, Hevetica" size="4" color="#333333"><b>FILE MANAGER</b></font><br>
    $msg
    <font face="Verdana, Arial, Hevetica" size="2"><b>Total Space:</b> $HDDSpace Kb    <b>Max File Size:</b> $MaxFileSizeKb Kb</font><br>
    <font face="Verdana, Arial, Hevetica" size="2"><b>Free Space:</b> $freespace Kb    <b>Used Space:</b> $HDDTotal Kb</font><br>
    <form name="form1" method="post" action="$PHP_SELF" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="$MaxFileSize">
      <input type="file" name="uploadedfile">
      <input type="submit" name="upload" value="Upload">
      <input type="hidden" name="u" value="$u">
    </form>
    <table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
    <tr>
    <td height="20" bgcolor="#333333"></td>
    <td bgcolor="#333333" height="20"><font face="Verdana, Arial, Helvetica" size="2" color="#FFFFFF"><b>&nbsp;FILENAME&nbsp;</b></font></td>
    <td height="20" bgcolor="#333333"><font color="#FFFFFF" size="2" face="Verdana, Arial, Helvetica"><b>&nbsp;SIZE (bytes)&nbsp;</b></font></td>
    <td height="20" bgcolor="#333333"></td>
    <td height="20" bgcolor="#333333"></td>
    </tr>
    <tr>
    <td height="2" bgcolor="#999999"></td>
    <td height="2" bgcolor="#999999"></td>
    <td height="2" bgcolor="#999999"></td>
    <td height="2" bgcolor="#999999"></td>
    <td height="2" bgcolor="#999999"></td>
    </tr>
content;

    // build the table rows which contain the file information
    $newpath = substr($path, 0, -1);  // remove the forward or backwards slash from the path
    $dir = @opendir($newpath); // open the directory
    while($file = readdir($dir)) // loop once for each name in the directory
    {
        // if the name is not a directory and the name is not the name of this program file
        if(is_file($path.$file) && $file != "$ThisFileName")
        {
            $match = 0;
            foreach($HiddenFiles as $name) // for each value in the hidden files array
            {
                if($file == $name) // check the name is not the same as the hidden file name
                {   
                    $match = 1;    // set a flag if this name is supposed to be hidden
                }
            }   
            if(!$match) // if there were no matches the file should not be hidden
            {   
                    $filedata = stat($file); // get some info about the file
                   
                    // find out if the file is one that can be edited
                    $editlink =     "";
                    if($EditOn)  // if the edit function is turned on
                    {
                        $dotpos = strrpos($file, ".");
                        foreach($EditExtensions as $editext)
                        {
                            $ext = substr($file, ($dotpos+1));
                            if(strcmp($ext, $editext) == 0)
                            {
                                $editlink =     "&nbsp;<a href='$PHP_SELF?edit=$file&u=$u'><font face='Verdana, Arial, Helvetica' size='2' color='#666666'>EDIT</font></a>&nbsp;";
                            }
                        }
                    }

                    // DETTE HER HAR JEG ÆNDRET!!!!!
                    $file = "<a href=\"$file\">$file</a>";           
                    // STOP PÅ ÆNDRING

                    // append 2 table rows to the $content variable, the first row has the file
                    // informtation, the 2nd row makes a black line 1 pixel high
                    $content .= <<<content
                    <tr>
                    <td bgcolor="#FFFFFF"></td>
                    <td>&nbsp;<font face="Verdana, Arial, Helvetica" size="2">$file</font>&nbsp;</td>
                    <td bgcolor="#FFFFFF">&nbsp;<font face="Verdana, Arial, Helvetica" size="2">$filedata[7]</font>&nbsp;</td>
                    <td>&nbsp;<a href='$PHP_SELF?delete=$file&u=$u'><font face="Verdana, Arial, Helvetica" size="2" color="#666666">DELETE</font></a>&nbsp;</td>
                    <td bgcolor="#FFFFFF">$editlink</td>
                    </tr>
                    <tr>
                    <td height="1" bgcolor="#000000"></td>
                    <td height="1" bgcolor="#000000"></td>
                    <td height="1" bgcolor="#000000"></td>
                    <td height="1" bgcolor="#000000"></td>
                    <td height="1" bgcolor="#000000"></td>
                    </tr>   
content;
            }
        }
    }
    closedir($dir); // now that all the rows have been built close the directory
    $content .= "</td></tr></table></table></center>"; // add some closing tags to the $content variable
    $filemanager  .= $content; // append the html to the $filemanager variable

}
else
{
    $filemanager = <<<content
    <center>
    <table border='0' cellspacing='0' cellpadding='20' bgcolor='#eeeeee'>
    <tr>
    <td>
    <font face="Verdana, Arial, Hevetica" size="4" color="#333333"><b>FILE MANAGER</b></font><br>
    <form name="form1" method="post" action="$PHP_SELF">
    $msg
    <center>
    <font face="Verdana, Arial, Hevetica" size="2">User Name:</font><input type="text" name="u"><br>
      <font face="Verdana, Arial, Hevetica" size="2">Password:</font><input type="password" name="password"><br>
      <input type="submit" name="login" value="Login">
      </center>
    </form>
    </td>
    </tr>
    </table>
    </center>
content;
}

function dirsize($dir)
// calculate the size of files in $dir
{
    $dh = opendir($dir);
    $size = 0;
    while (($file = readdir($dh)) !== false)
    {
        if ($file != "." and $file != "..")
        {
            $path = $dir.$file;
            if (is_file($path))
            {
                $size += filesize($path);
            }
        }
    }
    closedir($dh);
    return $size;
}

?>


<html>
<head>
</head>
<body bgcolor="#FFFFFF">
<?php echo $filemanager ?>
</body>
</html>
Avatar billede tjens Nybegynder
15. september 2003 - 10:37 #21
Dit nuværende script skriver følgende til browseren, hvis man fjerner alt vedr font og farve:

<td>file.txt</td>
<td>43</td>
<td><a href='/cgi-bin/managerlite/qtofml.php?delete=file.txt&u='>DELETE</td>
<td><a href='/cgi-bin/managerlite/qtofml.php?edit=file.txt&u='  >EDIT  </a></td>

Dit script skal lige skrive dette til browseren istedet:

<td><a href='/cgi-bin/managerlite/file.txt'>file.txt</a></td>
<td>43</td>
<td><a href='/cgi-bin/managerlite/qtofml.php?delete=file.txt&u='>DELETE</a></td>
<td><a href='/cgi-bin/managerlite/qtofml.php?edit=file.txt&u='  >EDIT  </a></td>

Du har jo allerede noget lignende for EDIT og DELETE. (dog mangler </a> på den ene).
Mit forslag tager ikke hensyn til om browseren forstår filtypen, men med billeder og tekster m.m. vil det virke.

PS: du skulle studere CSS, så du helt kan undgå at bruge <font> og farvekoder i din HTML. Så ville det være meget nemmere, at læse det dit script sender til browseren.
Avatar billede llgpublic Nybegynder
15. september 2003 - 10:58 #22
Hmm.. jaja, kender alt hvad der er at vide til CSS, men bruger det kun hvis jeg programmere store forums, portaler og meget mere..

Har du tænkt på at du med php ikke kan vise kilden på et script som autogenerere HTML, for med dette eksempel som du har givet, ville scriptet slet ikke kunne fungere, ide det at file.txt henviser til en bestemt fil, og ikke diverse filer, som scriptet selv opsamler fra mappen hvori det er placeret ...
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