Sto scrivendo un'applicazione abbastanza elementare in PHP. L'idea sarebbe quella di avere un filemanager che permetta di spostarsi all'interno di un XML (che contiene la struttura) fuori dal server (come anche i files): i documenti sarebbero poi copiati solo temporaneamente nel server per essere accessibili dal client.
il problema è che, per qualche ragione, a volte gli attributi sembrano essere presi casualmente...
l'xml:
<?xml version = "1.0" encoding="UTF-8"?>
<base>
<el owner="system" type="root">
<el name="Condivisa" type="dir" owner="system"></el>
<el name="Utenti" type="dir" owner="system">
<el name="user1" type="dir" owner="user1"></el>
<el name="user2" type="dir" owner="user2">
<el name="2.html" owner="user2" type="html"></el>
</el>
</el>
<el name="user3" type="dir" owner="user3"></el>
</el>
<el name="Leggimi.html" owner="system" type="html"></el>
</el>
</base>
per essere più chiaro, descrive i luoghi raggiungibili:
/
/Condivisa
/Leggimi.txt
/Utenti
/Utenti/user1
/Utenti/user2
/Utenti/user2/2.html
/Utenti/user3
e ora abbiate pietà, non ho mai visto questo linguaggio prima...
potrebbero esserci dei parametri passati nelle funzioni ma rimasti inutilizzati, come variabili globali che potrebbero anche non essere tali, provvederò a sistemarlo in seguito.
il php:
<?php
session_start();
if (!isset($_SESSION['loggedin'])) {
header('Location: index.html');
exit;
}
?>
<form method="post">
<input type="submit" name="back" value="<--"/>
</form>
<?php
$fsmap="/Applications/XAMPP/xamppfiles/htdocs/FLMNGR/MAP.xml"; //nota: la base del server non è htdocs ma htdocs/site mentre i files risiedono in htdocs/FLMNGR insieme all'xml
$DF = simplexml_load_file($fsmap);
global $path;
global $child;
global $pget;
$pget=$_GET['path'];
$pgetc=$pget;
$pp=explode(".", $pget);
$pel=count($pp);
$path=$DF;
if(isset($pget)){
for($c=0; $c<--$pel; $c++){
$tmp=intval($pp[$c]);
$path=$path->el[$tmp];
}
}
echo "<table style=\"width:100%\"><tr>";
function auth($path){
$a=$path['owner'];
$n=$_SESSION['name'];
if($a=="system")return 0;
if($a==$n){return 1;}
else{return 2;}
}
function type($path,$pgetc){
$a=$path["type"];
if($a=="html")return 1;
if($a=="dir")return 0;
if($a=="root")return 999;
echo "Il tipo dell'elemento selezionato non prevede nessun comportamento predefinito";
return null;
}
function open($path,$pgetc, $DF){
$a=intval(type($path,$pgetc));
if($a==0 or $a=999)get_dir_content($path, $pgetc);
if($a==0)get_html_file($path, $pgetc, $DF);
return null;
}
function goback(){
$pget=$_GET['path'];
$pp=explode(".", $pget);
$bk = array_pop($pp);
$bk = array_pop($pp);
$bk = array_pop($pp);
$prp=implode(".",$pp);
header("Location: file_manager.php?path=".$prp.".");
}
function get_html_file($path, $pgetc, $DF){
//////////INCOMPLETO////////////
if(isset($_POST['back']))goback();
$base="/Applications/XAMPP/xamppfiles/htdocs/FLMNGR/";
$f0=explode(".", $pget);
$pel=count($f0);
$pth=$DF;
for($c=0; $c<=--$pel; $c++){
$tmp=intval($f0[$c]);
$pth=$pth->el[$tmp];
if($c >= "1"){
$base=$base.$pth['name']."/";
}
}
//////////INCOMPLETO////////////
}
function get_dir_content($path,$pgetc){
ob_start();
if(isset($_POST['back'])) {
goback();
}
$foldericon="<img src=\"filemanager/icone/foldericon.tiff\" width=\"50\" height=\"50\">";
$sfoldericon="<img src=\"filemanager/icone/session_foldericon.tiff\" width=\"50\" height=\"50\">";
$yfoldericon="<img src=\"filemanager/icone/system_foldericon.tiff\" width=\"50\" height=\"50\">";
$docicon="<img src=\"filemanager/icone/docicon.tiff\" width=\"50\" height=\"50\">";
$el=$path->count();
$el++;
for($c=1;$c<$el;$c++){
$child=$path->children();
$temp=$child[$c-"1"];
$DoF=$child[$c-"1"]['type'];
if($DoF=="dir" and auth($temp)==2){
echo "<td><div align=\"center\">".$sfoldericon."</div></td>";
}
if($DoF=="dir" and auth($temp)==1){
echo "<td><div align=\"center\">".$foldericon."</div></td>";
}
if($DoF=="dir" and auth($temp)==0){
echo "<td><div align=\"center\">".$yfoldericon."</div></td>";
}
if($DoF=="txt" or $DoF=="html"){
echo "<td><div align=\"center\">".$docicon."</div></td>";
}
if(($c%6)==0 and $c!=0 ){
echo "</tr>";
for($cn=$c-"6"; $cn<$c; $cn++){
$child=$path->children();
$bchild=$child[$cn];
$name=$child[$cn]['name'];
$at=auth($bchild);
if($at==2){
echo "<th><div align=\"center\"><a href=\"#\" onClick=\"alert('Attenzione! Non sembri disporre dei privilegi per effettuare le seguenti azioni su questo elemento: visualizzazione, modifica')\">".$name."</a></div></th>";
}else{
un'altra cosa che non riesco a comprendere: per muovermi all'interno dell'xml uso un percorso composto da indici consequenziali separati da "." e logica vorrebbe che per raggiungere la
seconda cartella dentro la seconda cartella in "/" si possa usare
.1.1. ... invece per qualche oscuro motivo (ci sono arrivato a tentativi) ho notato che per spostarmi all'interno di una cartella dovevo inserire due volte l'indice per lo stesso elemento, per riprendere l'esempio precedente:
.1.1.1.1. dove i primi due "1" portano all'interno di "/Utenti" e i secondi due a "/Utenti/user1"
echo "<th><div align=\"center\"><a href=\"file_manager.php?path=".$pgetc.$cn.".".$cn."\">".$name."</a></div></th>";
}
}
echo "</tr><tr>";
}
}
if($el%6!=0){
echo "</tr>";
for($cn=$c-$el%6; $cn<$c; $cn++){
$child=$path->children();
$bchild=$child[$cn];
$name=$child[$cn]['name'];
$at=auth($bchild);
if($at==2){
echo "<th><div align=\"center\"><a href=\"#\" onClick=\"alert('Attenzione! Non sembri disporre dei privilegi per effettuare le seguenti azioni su questo elemento: visualizzazione, modifica')\">".$name."</a></div></th>";
}else{
echo "<th><div align=\"center\"><a href=\"file_manager.php?path=".$pgetc.$cn.".".$cn.".\">".$name."</a></div></th>";
}
}
echo "</tr><tr>";
}
}
open($path,$pgetc, $DF);
?>
Grazie in anticipo a chi proverà ad aiutarmi!