Gå til innhold

Script som redigerer filer


Anbefalte innlegg

Nå kunne jeg trenge litt hjelp her.

 

Har laget et halveis ferdig script som lar meg redigere filer rett fra nettsiden, slik at jeg slipper å laste opp den nye versjonen hver gang.

 

Problemet mitt er at jeg ikke klarer bringe mappenavnet videre i URL'en.

"?side=admin&action=rediger&id=index.php". Den går helt fint, ettersom den ligger på rotnivå, men så fort jeg skal begynne å bevege meg oppover i mappene, så får jeg ikke redigert dem uten å legge inn mappenavn før selve filnavnet i URL'en.

 

 

Funksjonen som lister filene:

 

functions.php

<?php

class list_dir
{
 var $dir;
function open_dir($dir) {
 	$this->dir = $dir;
 	$handle = opendir($this->dir);
 	if($handle) {
 while(false !== ($file = readdir($handle))) {
if($file != "." && $file != "..") {
 $files[] = $file;
}
}
 sort($files);
 foreach($files as $file) {
 echo "<a href='?side=admin&action=rediger&id=" . $mappe . $file . "'>$file</a><br />";
   }
  }
}
function close_dir()
 {
  closedir($this->dir);
 }
}
?>

 

 

Scriptet som viser filene:

 

files.php

<?php
if ($_SESSION['LoggedIn']) $LoggedIn=true;
else $LoggedIn=false;
?>

<?php
if($LoggedIn) {

$mappe = $_POST['mappe'];
$def_dir = '/usr/local/psa/home/vhosts/rtin.no/subdomains/ma/httpdocs/';	


echo "<br /><br /><form method='POST'>
Mappenavn: <input name='mappe' type='text' value='$mappe'>
<input type='submit' name='submit' value='Åpne mappe'><br />";

if(empty($mappe)) { 
$error = TRUE; 
}
include('functions.php');	
if(!$error) {
$list = new list_dir;
$list->open_dir($def_dir.$mappe);
$list->close_dir;
}
else {
$list = new list_dir;
$list->open_dir($def_dir);
$list->close_dir;
}
}
else {
include('include/403.php');
}
?>

 

 

Scriptet som redigerer filene:

 

 

rediger.php

<?php
if ($_SESSION['LoggedIn']) $LoggedIn=true;
else $LoggedIn=false;
?>
<?php
$def_dir = "/usr/local/psa/home/vhosts/rtin.no/subdomains/ma/httpdocs/";
$lines = file($def_dir.$_GET['id']);
if($LoggedIn) {
echo "<textarea cols='70' rows='60'>";
foreach($lines as $line_num => $line) {
echo htmlspecialchars($line);
}
echo "</textarea>";
}

else {
include('include/403.php');
}
?>

 

 

Det eneste jeg trenger, er en lur måte å bringe mappenavn videre i URL fra files.php.

 

 

Mvh, Martin

Lenke til kommentar
Videoannonse
Annonse

Skjønner jeg deg riktig hvis du vil ha mappenavn inn i url ?

F.eks slik:

?side=admin&action=rediger&id=mappenavn/index.php

?

 

Har du evt prøvd å bruke $dir ($this->dir) istedetfor $mappe i denne linjen:

echo "<a href='?side=admin&action=rediger&id=" . $mappe . $file . "'>$file</a><br />";

$mappe er vel ukjent for klassen list_dir.

 

Evt, så må du vel kanskje legge til / mellom $dir og $file (Dersom det er skrevet inn et mappenavn, $def_dir slutter jo på /)

Lenke til kommentar
Skjønner jeg deg riktig hvis du vil ha mappenavn inn i url ?

F.eks slik:

?side=admin&action=rediger&id=mappenavn/index.php

?

 

Har du evt prøvd å bruke $dir ($this->dir) istedetfor $mappe i denne linjen:

echo "<a href='?side=admin&action=rediger&id=" . $mappe . $file . "'>$file</a><br />";

$mappe er vel ukjent for klassen list_dir.

 

Evt, så må du vel kanskje legge til / mellom $dir og $file (Dersom det er skrevet inn et mappenavn, $def_dir slutter jo på /)

5532482[/snapback]

Ettersom functions.php blir inkludert mitt i scriptet, så er jo $mappe allerede satt. Derfor trodde jeg kanskje det ville funke. Får prøve litt senere i dag.

 

HoaXed: Jeg har ingenting i mot at du bruker dette, men siden det overhode ikke er ferdig, så får du gjøre resten selv.

 

Det som mangler er funksjonen som lager et nytt script, og funksjonen som lagrer scriptet etter at det er redigert. Men det ordner man fort på et par timer.

 

 

EDIT: Pørvde med $this->dir nå, men da fikk jeg hele athen istede i URL, og feilmeldinga ble:

Warning: file(/usr/local/psa/home/vhosts/rtin.no/subdomains/ma/httpdocs//usr/local/psa/home/vhosts/rtin.no/subdomains/ma/httpdocs/header.php): failed to open stream: No such file or directory in /usr/local/psa/home/vhosts/rtin.no/subdomains/ma/httpdocs/include/admin/rediger.adm.php on line 7

Endret av M4rTiN
Lenke til kommentar

Du kan jo se litt på denne, hvis du vil.

 

 

<?
function list_dir($dir) {
       if($handle=opendir($dir)) {
               while(false!==($file = readdir($handle))) {
                       if($file != ".." && $file != ".") {
                               $files[] = $file;
                       }
               }
       }
       closedir();
       if(count($files) > 0) {
               sort($files);
               chdir($dir);
               foreach($files as $file) {
                       if(is_dir($file)) {
                               echo "[dir] - <a href='?action=opendir&mappe=$dir/$file'>$file</a><br>";
                       }
                       else {
                               echo "[file] - <a href='?action=edit&file=$dir/$file'>$file</a><br>";
                       }
               }
       }
}
if(isset($_GET["action"])) {
       $action = $_GET["action"];
}
else {
       $action = "";
}
$basedir = "/var/www"; // Endre dette til den dir du vil ha som "rot"

if($action == "opendir") {
       if(!isset($_GET["mappe"])) {
               $mappe = $basedir;
       }
       else {
               $mappe = $_GET["mappe"];
       }
       if(!ereg($basedir, $mappe)) die("Katalog som ikke er støttet (basedir er ikke med)<br>$mappe");
       if(strpos($mappe, "..")) die("kan ikke komme deg lenger opp i filsystemet !");
       list_dir($mappe);
}
elseif($action == "edit") {
       // Her kan du lage en kodesnutt for å redigere filene
       // Jeg har bare skrevet ut sourcen til den aktuelle filen.
       $file = $_GET["file"];
       highlight_file($file);
}
else {
       list_dir($basedir);
}
?>

 

 

Her er en som lar deg "browse" ut fra en "base dir". Du kan jo se litt på denne, og endre den til ditt behov. :)

 

EDIT: Her har jeg lagt alt i samme script. Du kan fint klippe ut for eksempel funksjonen og ha den i en klasse.

Endret av kakkle
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...