Náhrada FTP klienta webovým rozhraním 4.

4. února 2003

V poslednom diely o tvorbe náhrady FTP klienta si vytvoríme rozhranie pre skupinové kopírovanie súborov na servery, tvorbu nového súboru a zvýraznienie syntaxe kódu v súbore.

Zhrňme si všetky súbory, ktoré seriál obsahoval, tučným písmom sú napísané súbory, ktoré pribudli v tomto diely:

  • copy.php – skupinové kopírovanie súborov na servery
  • create_file.php – skript pre tvorbu nového súboru
  • edit_files.php – práca so súbormi
  • edit_folders.php – práca s adresármi
  • klient.php – hlavná stránka, zobrazuje výpis adresára a rozhranie pre prácu so súbormi a adresármi
  • prava.php – nastavenie prístupových práv pre súbory a adresáre
  • style.css – kaskádové štýly pre grafické spracovanie
  • syntax.php – zvýraznenie syntaxe kódu v súbore
  • upload.php – uploadovanie súborov na server

Najprv si pozrime zmenený kód súboru klient.php:

<?php
header(„Expires: Mon, 26 Jul 1997 05:00:00 GMT“);
header(„Last-Modified:“.gmdate(„D, d M Y H:i:s“).“ GMT“);
header(„Cache-Control: no-cache, must-revalidate“);
header(„Pragma: no-cache“);
?>
<html>
<head>
<title>FTP klient</title>
<meta http-equiv=“Content-Type“ content=“text/html; charset=windows-1250″ />
<link rel=“stylesheet“ href=“style.css“ type=“text/css“ />
</head>
<body bgcolor=“#FFFFFF“ text=“#005FA4″>
<h3>FTP klient</h3>
<hr size=“1″ color=“#005FA4″ />
<table width=“100%“ border=“0″ cellpadding=“0″ cellspacing=“0″>
<tr>
<td width=“50%“ valign=“top“>
<div align=“left“>
<form action=“copy.php“ method=“post“>
<table cellpadding=“3″ cellspacing=“0″ border=“0″><tr><td></td><td width=“36%“><b>Názov</b></td><td width=“14%“><b>Veľkosť</b></td><td width=“50%“ colspan=“2″><div align=“right“><b>Dátum&nbsp;posl.&nbsp;modifikácie</b></div></td></tr>
<tr bgcolor=“#005FA4″><td height=“1″></td><td></td><td></td><td colspan=“2″></td></tr>
<?php
if(empty($adresar)):
  //mysql_connect(„server“,“login“,“heslo“);
  //$vysledok = mysql_db_query(„databaza“, „SELECT adresar FROM uzivatelia WHERE Login = ‚login‘ AND Heslo = „heslo'“);
  //$adresar = mysql_result($vysledok, 0);
  $adresar = „server“;
endif;
$file = 0;
$folder = 0;
$handle = opendir($adresar);
while($entry = readdir($handle))
{
  $cas = filemtime(„$adresar/$entry“);
  if(!ereg(„^[.]+$“, $entry)):
    if(is_file(„$adresar/$entry“)):
      echo „<tr><td><input type=\“checkbox\“ name=\“nazov[]\“ value=\“$entry\“ /></td><td><a href=\“syntax.php?subor=$adresar/$entry&adresar=$adresar\“>$entry</a></td><td><div align=\“center\“>“.filesize(„$adresar/$entry“).“</div></td><td colspan=\“2\“><div align=\“right\“>“.Date(„j. M. Y H:i:s“, $cas).“</div></td></tr>“;
      $file++;
    else:
      echo „<tr><td></td><td><b><a href=\“klient.php?adresar=$adresar/$entry\“ target=\“_blank\“>$entry</a></b></td><td><div align=\“center\“>-</div></td><td><div align=\“right\“><a href=\“edit_folders.php?adr=$adresar&adresar=$adresar/$entry&operacia=delete\“>zmazať</a>&nbsp;&nbsp;|&nbsp;</div></td><td><div align=\“left\“><a href=\“edit_folders.php?adr=$adresar&adresar=$adresar/$entry&operacia=rename\“>premenovať</a></div></td></tr>“;
      $folder++;
    endif;
  endif;
}
?>
</table>
<?php if($file>0 && $folder>0): ?>
<br />
prekopírovať do&nbsp;
<select name=“adr“ class=“select“>
  <option value=“false“ SELECTED>Vyber adresár</option>
  <?php
  $handle = opendir($adresar);
  while($entry = readdir($handle))
  {
    if(!ereg(„^[.]+$“, $entry)):
     if(!is_file(„$adresar/$entry“)) echo „<option value=\“$entry\“>$entry</option>“;
    endif;
  }
  ?>
</select>
&nbsp;
<input type=“hidden“ name=“adresar“ value=“<?php echo $adresar?>“ />
<button type=“submit“ class=“button“>spracovať</button><br />
<?php endif;?>
</form>
<?php
echo „Súborov: $file<br/>“;
echo „Adresárov: $folder<br/>“;
?>
</div>
</td>
<td width=“1%“></td>
<td width=“50%“ valign=“top“>
<form action=“edit_files.php“ method=“post“>
<input type=“hidden“ name=“adresar“ value=“<?php echo $adresar?>“ />
<select name=“nazov“ class=“select“>
  <option value=“false“ SELECTED>Vyber súbor</option>
  <?php
  $handle = opendir($adresar);
  while($entry = readdir($handle))
  {
    if(!ereg(„^[.]+$“, $entry)):
      if(is_file(„$adresar/$entry“)) echo „<option value=\“$entry\“>$entry</option>“;
    endif;
  }
  ?>
</select>&nbsp;
<select name=“operacia“ class=“select“>
  <option value=“false“ SELECTED>Operácia</option>
  <option value=“see“>prezerať</option>
  <option value=“edit“>editovať</option>
  <option value=“del“>vymazať</option>
  <option value=“ren“>premenovať</option>
  <option value=“info“>informácie</option>
</select>&nbsp;
<button type=“submit“ class=“button“>Vykonať</button>
</form>
<br />
<form action=“edit_folders.php“ method=“get“>
<input type=“hidden“ name=“operacia“ value=“create“ />
<input type=“hidden“ name=“adr“ value=“<?php echo $adresar?>“ />
<input type=“hidden“ name=“adresar“ value=“<?php echo $adresar?>“ />
<input type=“text“ name=“folder“ class=“textinput“ />&nbsp;<button type=“submit“ class=“button“>Vytvoriť adresár</button>
</form>
<br />
<form action=“upload.php“ method=“post“ enctype=“multipart/form-data“>
<input type=“hidden“ name=“adresar“ value=“<?php echo $adresar?>“ />
<input type=“file“ name=“subor“ class=“textinput“ />&nbsp;<button type=“submit“ class=“button“>Upload</button>
</form>
<br />
<form action=“prava.php“ method=“post“>
<input type=“hidden“ name=“adresar“ value=“<?php echo $adresar?>“ />
<select name=“nazov“ class=“select“>
  <option value=“false“ SELECTED>Vyber súbor</option>
  <?php
  $handle = opendir($adresar);
  while($entry = readdir($handle))
  {
    if(!ereg(„^[.]+$“, $entry)):
      if(is_file(„$adresar/$entry“)) echo „<option value=\“$entry\“>$entry</option>“;
    endif;
  }
  ?>
</select>&nbsp;
<input type=“text“ name=“prava“ onfocus=’this.value=““;‘ value=“prístupové práva“ class=“textinput“ />
&nbsp;
<button type=“submit“ class=“button“>Nastaviť</button>
</form>
<br />
<form action=“prava.php“ method=“post“>
<input type=“hidden“ name=“adresar“ value=“<?php echo $adresar?>“ />
<select name=“nazov“ class=“select“>
  <option value=“false“ SELECTED>Vyber adresár</option>
  <?php
  $handle = opendir($adresar);
  while($entry = readdir($handle))
  {
    if(!ereg(„^[.]+$“, $entry)):
      if(!is_file(„$adresar/$entry“)) echo „<option value=\“$entry\“>$entry</option>“;
    endif;
  }
  ?>
</select>&nbsp;
<input type=“text“ name=“prava“ onfocus=’this.value=““;‘ value=“prístupové práva“ class=“textinput“ />
&nbsp;
<button type=“submit“ class=“button“>Nastaviť</button>
</form>
<br />
<form action=“create_file.php“ method=“post“>
<input type=“hidden“ name=“adresar“ value=“<?php echo $adresar?>“ />
<input type=“hidden“ name=“operacia“ value=“zostavit“ />
<button type=“submit“ class=“button“>Vytvoriť nový súbor</button>
</form>
</td>
</tr>
</table>
</body>
</html>

Pri výpise aktuálneho adresára sa nám poskytli dve nové zaujímavé možnosti. Prvou z nich je zobrazenie a zvýraznenie syntaxe kódu v súbore. Toto spravíte jednoduchým kliknutím na názov súboru. O všetko sa už postará súbor syntax.php, ktorý iba využíva funkciu show_source(). Táto funkcia v skutočnosti volá funkciu highlight_file(). Zdrojový kód spomínaného súboru je jednoduchý:

<?php
if($_GET[‚subor‘]!=“false“ && $_GET[‚adresar‘]!=“false“):
  show_source($subor); // zobrazíme syntax
else:?>
  Nesprávne zadané údaje!
<?php endif;?>
<br /><br />
<a href=“klient.php?adresar=<?php echo $_GET[‚adresar‘]?>“>Vrátiť sa späť</a>

Druhou možnosťou je hromadné kopírovanie súborov do niektorého z adresárov. Zaškrtnutím checkboxu daného súboru si volíme súbory na prekopírovanie do adresára, ktorý vyberieme z prvku select. Kliknutím na tlačítko „spracovať“ nám skript copy.php prekopíruje súbory do daného adresára. Súbor vyzerá nasledovne:

<?php
if($_POST[‚adresar‘]!=“false“ && !empty($_POST[‚nazov‘]) && $_POST[‚adr‘]!=“false“):
  $subory = $_POST[‚nazov‘];
  for($i=0;$i<count($subory);$i++):
    $kde = $_POST[‚adresar‘].“/“.$subory[$i]; // z kade budeme kopírovať
    $fp = fopen($kde,“r“); // otvoríme súbor
    $text = fread($fp,filesize($kde)); // načítame obsah súboru
    fclose($fp); // zatvoríme súbor
    $kam = $_POST[‚adresar‘].“/“.$_POST[‚adr‘].“/“.$subory[$i]; // kam budeme kopírovať
    $new = fopen($kam,“w“); // vytvoríme súbor
    if(@fwrite ($new, $text)) echo $subory[$i].“ – ok<br />“; // zapíšeme do nového súboru
    else echo $subory[$i].“ – chyba pri kopírovaní<br />“;
    fclose($new); // zatvoríme súbor
  endfor;
  else:
    echo „Nesprávne zadané údaje!“;
  endif;
?>
<br /><br />
<a href=“klient.php?adresar=<?php echo $_POST[‚adresar‘]?>“>Vrátiť sa späť</a>

Pod výpisom aktuálneho adresára sa nám zobrazí celkový počet súborov a adresárov, ktoré sa v ňom nachádzajú. Pri výskyte adresára sa nám ako predtým ponúkne možnosť adresár premenovať alebo vymazať, ale s tým rozdielom, že sa už jedná o odkazy a nie o formuláre.

Skript create_file.php nám vytvorí nový súbor. Kliknutím na tlačítko „Vytvoriť nový súbor“ sa dostanete do rozhrania, kde svoj súbor pomenujete a „vyplníte“ ho kódom. Odoslaním týchto informácií sa súbor vytvorí v otvorenom adresári. Zdrojový kód vyzerá nasledovne:

<?php
if($_POST[‚adresar‘]!=“false“ && $_POST[‚operacia‘]!=“false“):
  if($_POST[‚operacia‘]==“zostavit“):
    ?>
    <form action=“create_file.php“ method=“post“>
    <input type=“hidden“ name=“adresar“ value=“<?php echo $_POST[‚adresar‘]?>“ />
    <input type=“hidden“ name=“operacia“ value=“vytvor“     />
    Názov súboru: <input type=“text“ name=“nazov“ /><br />
    <center>Obsah súboru:</center>
    <textarea name=“text“ style=“width:100%;height:250px“></textarea>
    <br />
    <button type=“submit“ class=“button“>Vytvoriť súbor</button>
    </form>
  <?php
  elseif($_POST[‚operacia‘]==“vytvor“):
    $kde = $_POST[‚adresar‘].“/“.$_POST[‚nazov‘]; //do premennej vložíme cestu aj s názvom súboru
    $fp = @fopen($kde, „w“); // vytvoríme súbor
    if(!$fp):
      echo „Súbor sa nepodarilo vytvoriť.“;
    else:
      if(@fwrite($fp, $text)): // zapíšeme do nového súboru obsah
        echo „Súbor sa podarilo vytvoriť.“;
      else:
        echo „Súbor sa nepodarilo vytvoriť.“;
      endif;
      fclose($fp); // zatvoríme súbor
    endif;
  endif;
else:?>
  Nesprávne zadané údaje!
<?php endif;?>
<br /><br />
<a href=“klient.php?adresar=<?php echo $_POST[‚adresar‘]?>“>Vrátiť sa späť</a>

Týmto končíme seriál o tvorbe náhrady FTP klienta webovým rozhraním. Možete si ho tiež stiahnuť.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Další článek Internet v Evropě
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *