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

3. ledna 2003

Cieľom nasledujúcich článkov bude vytvorenie FTP klienta cez webové rozhranie. Bude vám umožňovať pracovať so súbormi a adresármi na servery. FTP klient cez webové rozhranie sa často používa aj pri freehostingu, je len na vás, k čomu vám poslúži. V prvom článku si vytvoríme hlavnú stránku, ktorá bude zobrazovať všetky súbory a adresáre, bude obsahovať prostriedky pre prácu so súbormi a stránku pre editovanie súborov.

Z grafického hľadiska bude na ľavej strane výpis aktuálneho adresára. Na pravej strane budete mať možnosť editovať súbory a adresáre (zatiaľ len súbory). K tomu nám poslúžia formuláre. Do ďalších adresárov sa dostanete jednoduchým kliknutím na názov adresára a otvorí sa nové okno – tá istá stránka, ale s výpisom iného adresára. Pri určovaní, ktorý adresár chceme na servery otvárať, som za komentár ponúkol možnosť vybrať názov (cestu) k adresáru z databázi na základe loginu a hesla. Toto využijete, pokiaľ chcete FTP klienta poskytnúť svojim užívateľom alebo zákazníkom. Pokiaľ chcete otvoriť adresár s hlavným súborom klient.php, vložte do premennej $adresar bodku $adresar = ".". Pre bezpečnosť ešte poradím pracovať s FTP klientom cez SSL. Pokiaľ chcete, aby sa FTP klient vždy otváral s https, stačí pridať skript, ktorý nájdete v článku Pavla Růžičky Bezpečnost především – použití SSL.

V prvom článku si vytvoríme skript, ktorý bude pracovať so súbormi. Súbory sa budú dať prezerať, editovať, vymazať, premenovať a budú sa dať prezerať informácie o súbore. Súbor a operáciu si zvolíme z formulárového prvku select. Všetky operácie sa budú odohrávať na jednej stránke. Prostredníctvom jednoduchej podmienky zistíme, ktorú operáciu si užívateľ zvolil. Toto by sa dalo vyriešiť aj iným spôsobom, ja som si však zvolil tento, zdá sa mi celkom praktický.

Pre väčšiu bezpečnosť budem pri formulároch používať posielanie cez post. Premenné potom budú mať podobu $_POST[‚premenna‘]. V dnešnom článku sa nám objavia tri súbory:

  • klient.php – hlavná stránka s výpisom aktuálneho adresára a formulárom pre úpravu súborov
  • edit_files.php – skript pre prácu so súbormi
  • style.css – kaskádové štýli pre lepšiu úpravu

Skript k hlavnej stránke:

<table width=“100%“ border=“0″ cellpadding=“0″ cellspacing=“0″>
<tr>
  <td width=“50%“ valign=“top“>
   <div align=“left“>
   <table cellpadding=“3″ cellspacing=“0″ border=“0″>
   <tr>
     <td width=“36%“>
     <b>Názov</b>
     </td>
     <td width=“14%“>
     <b>Veľkosť</b>
     </td>
     <td width=“50%“>
     <div align=“right“>
     <b>Dátum posl. modifikácie</b>
     </div></td></tr>
     <tr bgcolor=“#005FA4″>
     <td height=“1″></td>
     <td></td>
     <td></td></tr><br />
<?
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);
<br />
  $adresar = „server“;
endif;<br />
$handle = opendir($adresar);
while($entry = readdir($handle)) {
  $cas = filemtime(„$adresar/$entry“);
  if(!ereg(„^[.]+$“, $entry)):
     if(is_file(„$adresar/$entry“)):
       echo „<tr><td><a href=\“$adresar/$entry\“>$entry</a></td><td><div align=\“center\“>“.filesize(„$adresar/$entry“).“</div></td><td><div align=\“right\“>“.Date(„j. M. Y H:i:s“, $cas).“</div></td></tr>“;
     else:
       echo „<tr><td><b><a href=\“klient.php?adresar=$adresar/$entry\“ target=\“_blank\“>$entry</a></b></td><td><div align=\“center\“>-</div></td><td></td></tr>“;
     endif;
   endif;
}
?>
</table>
</div>
</td>
<td width=“50%“ valign=“top“>
 <form action=“edit_files.php“ method=“post“>
   <input type=“hidden“ name=“adresar“ value=“<?=$adresar?>“ />
   <select name=“nazov“ class=“select“>
     <option value=“false“ SELECTED>Vyber súbor</option>
     <?
     $handle = opendir($adresar);
     while($entry = readdir($handle)) {
     $cas = filemtime(„$adresar/$entry“);
     if(!ereg(„^[.]+$“, $entry)):
      if(is_file(„$adresar/$entry“)):
       echo „<option value=\“$entry\“>$entry</option>“;
      endif;
     endif;
     }
     ?>
   </select> <br /><br />
   <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> 
 <button type=“submit“ class=“button“>Vykonať</button>
</form>
</td>
</tr>
</table>

V niektorých prípadoch FTP klient nemôže spracovať príkaz hneď a preto nám dáva k dispozícií ďalší formulár pre vyplnenie. Platí to v prípade editovania a premenovania súboru. Teraz si po častiach podrobnejšie rozpíšeme súbor edit_files.php:

if($_POST[‚operacia‘]!=“false“ && $_POST[‚nazov‘]!=“false“):
$kde = $_POST[‚adresar‘].“/“.$_POST[‚nazov‘]; //do premennej vložíme cestu aj s názvom súboru

Pod podmienkou, že je vybratá operácia a názov súboru, môžeme pokračovať. Vytvoríme premennú $kde, ktorá bude obsahovať názov adresáru a súboru. Táto premenná sa bude používať pri každej operácií, preto sme ju vytvorili už na začiatku.

if($_POST[‚operacia‘]==“see“):
$fp = @FOpen($kde, „r“); // otvoríme súbor
$data = @File($kde); // načítame súbor do poľa
FClose($fp);
for($i=0;$i<Count($data);$i++) {
   echo HTMLSpecialChars($data[$i]).“<br />“; // vypíšeme obsah súboru
}

Ak si užívateľ zvolil operáciu „prezeranie“, spracuje sa tento skript. Jednoducho sa vypíše do stránky obsah súboru:

elseif($_POST[‚operacia‘]==“edit“): ?>
<form action=“edit_files.php“ method=“post“>
<input type=“hidden“ name=“operacia“ value=“edituj“ />
<input type=“hidden“ name=“nazov“ value=“<?=$_POST[‚nazov‘]?>“ />
<input type=“hidden“ name=“adresar“ value=“<?=$_POST[‚adresar‘]?>“ />
<textarea name=“text“ style=“width:100%;height=250px“>
 <?
 $fp = @FOpen($kde, „r“);
 $data = @File($kde);
 FClose($fp);
 for($i=0;$i<Count($data);$i++) {
 echo $data[$i];
 }
 ?>
</textarea>
<br />
<button type=“submit“ class=“button“>Uložiť upravený súbor</button>
</form>

Pri operácii „editácia“ sa vygeneruje formulár s prvkom textarea, do ktorého sa vypíše celý súbor. Ten môžeme následne upraviť a uložiť. V skrytom poli hidden sme do premennej $operacia uložili hodnotu edituj. S tým súvisí nasledujúca podmienka:

elseif($_POST[‚operacia‘]==“edituj“):
$text = StripSlashes($_POST[‚text‘]); // odstránime lomítka z pred citlivých znakov
$fp = @FOpen($kde, „w“);
if(@FWrite ($fp, $text)):
   echo „Súbor sa podarilo upraviť.“;
else:
   echo „Súbor sa nepodarilo upraviť.“;
endif;
FClose ($fp);

Tu sme po editácií súboru súbor uložili (prepísali):

elseif($_POST[‚operacia‘]==“del“):
if(@UnLink($kde)):
   echo „Súbor bol úspešne vymazaný.“;
else:
   echo „Súbor sa nepodarilo zmazať“;
endif;

Pri zvolení operácie „vymazať“ sa spracoval tento skript:

elseif($_POST[‚operacia‘]==“ren“):
<form action=“edit_files.php“ method=“post“>
<input type=“hidden“ name=“operacia“ value=“premenuj“ />
<input type=“hidden“ name=“nazov“ value=“<?=$_POST[‚nazov‘]?>“ />
<input type=“hidden“ name=“adresar“ value=“<?=$_POST[‚adresar‘]?>“ />
Nový názov súboru:* <input type=“text“ name=“meno“ class=“textinput“ /> 
<button type=“submit“ class=“button“>Premenovať</button>
</form>
<br />
*názov musí obsahovať aj príponu

Premenovanie súboru sa nezaobíde bez určenia nového názvu. V tomto formulári pošleme nový názov. Znova sme do premennej $operacia priradili nejakú novú hodnotu – premenuj:

<?
elseif($_POST[‚operacia‘]==“premenuj“):
$nove = $_POST[‚adresar‘].“/“.$_POST[‚meno‘];
if(!Empty($_POST[‚meno‘])):
 if(@Rename($kde, $nove)):
   echo „Súbor sa podarilo úspešne premenovať.“;
 else: echo „Súbor sa nepodarilo premenovať.“;
 endif;
else:
   echo „Nesprávne meno súboru!“;
endif;

A tu sa nám premenoval súbor podľa nového názvu z formuláru. Nasleduje posledná časť, ktorá nám vypíše stručné informácie o súbore:

elseif($_POST[‚operacia‘]==“info“):
   $pristup = fileatime($kde);
   $modif = filemtime($kde);
?>
<table>
<tr><td>Cesta</td><td width=“50″></td><td><?=$kde?></td></tr>
<tr><td>Veľkosť</td><td></td><td><?=filesize($kde).“ bajtov“?></td></tr>
<tr><td>Posledný prístup k súboru</td><td></td><td><?=Date(„j. M. Y H:i:s“, $pristup)?></td></tr>
<tr><td>Posledná modifikácia súboru</td><td></td><td><?=Date(„j. M. Y H:i:s“, $modif)?></td></tr>
</table>
<?endif;

Informácie sa vypíšu do tabulky pre lepšiu prehľadnosť. Na konci ešte nezabudnite ukončiť úplne prvú podmienku:

else:?>
Nesprávne zadané údaje!
<?endif;?>
<br /><br />
<a href=“index.php?adresar=<?=$adresar?>“>Vrátiť sa späť</a>

Časti skriptu sú jednoducho „vyrezané“ zo súboru edit_files.php, preto si môžete všimnúť „nezmyselný“ začiatok alebo koniec <? a ?>.

archív súborov k tomuto článku: klient.zip

V ďalších článkoch si vytvoríme stránky pre editáciu a prácu s adresármi, upload súborov, nastavovanie práv pre súbory a adresáre.

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 napivu.com
Š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 *