Войти

Показать полную графическую версию : помогите со скриптом


slaine
31-08-2005, 19:54
Вот этот скрипт показывает все файлы в папке ввиде ссылок, при
нажимании на них отрывается содержание текстового файла или картинка.
Но не могу сделать, чтоб при клике на папку переходить в другую директорию.
Помогите.

if (isset($_POST['text']) && isset($_POST['fileid'])){
$text = $_POST['text'];
$ide = $_POST['fileid'];
$fl = fopen($ide, "w");
flock($fl, 2);
fwrite($fl, $text);
flock($fl, 3);
fclose($fl);
}
$dir = opendir(".");
while ($file = readdir($dir)){
if (($file != ".") && ($file != "..") && ($file != "ass.php")){
$dirlist[] = $file;
}
}
closedir($dir);
echo "<table border=1 width=100%>
<colgroup valign=top>
<tr>
<td width=200>";
foreach ($dirlist as $val){
echo ("<a href=ass.php?id=$val>$val</a><BR>");
}
echo "</td>
<td align=center>";
if (!empty($id)){
if (!file_exists($id)){
exit();
}
}
if (!empty($_GET['id'])){
if (eregi("(.php|.txt|.html|.htm)$", @$id)){
$data = file_get_contents($id);
} elseif (eregi("(.jpg|.gif|.png)$", @$id)){
echo "<img src=".$id." border=0>";
exit();
}
}
echo "<form action=ass.php method=post>
<input type='hidden' value=".@$id." name=fileid>
<textarea cols=68 rows=25 name=text>".@$data."</textarea><BR>
<input type='submit'></td>
</tr</table>
</form>";

XCodeR
31-08-2005, 20:21
chdir() не поможет?...
изменяет рабочую директорию...

vadimiron
31-08-2005, 23:11
slaine
А вы делайте в случае папки не прямую ссылку на файл (естественно это не будет работать), а ссылку скрипту, который будет доставать из этой ссылки папку, которую надо показать, типа script.php?dir=mydir, то есть принажатии на эту ссылку скрипт будет перезагружаться и открывать данную папку (то есть показывать все файлы в данной папке), если dir не определена, то есть не была передана скрипту, то открывается стандартная папка

slaine
20-09-2005, 17:31
Вот сделала.
А, как мне теперь проходить во вторую третью директорию, открывать файлы в дргих папках ведб ссылка будет оставаться такой script.php?dir=mydir?
function ss($path){
$dir = opendir($path);
while ($file = readdir($dir)){
if (($file != "..") && ($file != "aaa.php")){
$dirlist[] = $file;
}
}
closedir($dir);
foreach ($dirlist as $val){
echo ("<a href=aaa.php?id=$val>$val</a><BR>");
}
}
$s = 0;
if (!empty($_GET['id'])){
if (is_file($id)){
$data = highlight_file($id);
echo $data."<BR>";
}
if (is_dir($id)){
$s = 1;
ss($id);
}
}
if ($s == 0){
ss(".");
}

elfoflorien
20-09-2005, 21:29
slaine
если хочешь, я пришлю тебе свои программы, читающие всякое содержимое каталогов...
там, конечно, много недоработок, но, может быть, найдешь что-нибудь полезное

elfoflorien
21-09-2005, 22:33
slaine
во-первых, ответь на PM
во-вторых, чтобы все заработало, у тебя в переменной $id должен быть полный путь к директорию, потому что chdir() изменяет текущий каталог, но не значение переменной пути,
и третье, просто личный совет: для простоты и удобства раздели файлы и каталоги по разным массивам:


function CreateContentsArrays( $id )
{
$files= Array();
$dirs= Array();
$fullpath= $fpath . '/';
$mydir= Dir( $id );
$mydir->rewind();
for( $mydir->rewind(); $entry= $mydir->read(); )
{
if( $entry == '.' || $entry == '..' ) continue;
$item= $fullpath . $entry;
if( is_dir( $item ))
$dirs[]= $item;
else
$files[]= $item;
}
if( count( $dirs ) == 0 && count( $files ) == 0 ) return false;
return( Array( $dirs, $files ));
}


не знаю, как можно оптимизировать это в PHP5, но в PHP4 все работало нормально :)

дальше, касательно содержимого файлов: желательно, на мой взгляд, скрипт, выводящий содержимой файла перенести в отдельный файл, и программа должна, соответственно реагировать на каталог и файл по-разному; при щелчке на каталог должен открыться $PHP_SELF, с параметром id=текущий каталог/дочерний каталог
например:



list( $dirs, $files )= CreateContentsArrays( $id );
if( count( $dirs ) > 0 )
{
foreach( $dirs as $dir )
{
print "<a href=\"$PHP_SELF?id=$dir\">" . basename( $dir ) . "</a><br>";
}
print "<br><hr><br>\n";
}
if( count( $files ) > 0 )
{
foreach( $files as $file )
{
print "<a href=\"showfile.php?id=$file\>" . basename( $file ) . "</a><br>";
}
print "<br><hr><br>\n";
}



примерно вот так вот... если что не так, сообщайте, укажите на ошибку;
может быть, что-то можно оптимизировать под PHP5?




© OSzone.net 2001-2012