Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   помогите со скриптом (http://forum.oszone.net/showthread.php?t=53322)

slaine 31-08-2005 19:54 352330

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

PHP код:

if (isset($_POST['text']) && isset($_POST['fileid'])){
 
$text $_POST['text']; 
 
$ide $_POST['fileid'];
 
$fl fopen($ide"w");
 
flock($fl2);
 
fwrite($fl$text);
 
flock($fl3);
 
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 352340

chdir() не поможет?...
изменяет рабочую директорию...

vadimiron 31-08-2005 23:11 352374

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

slaine 20-09-2005 17:31 356929

Вот сделала.
А, как мне теперь проходить во вторую третью директорию, открывать файлы в дргих папках ведб ссылка будет оставаться такой script.php?dir=mydir?
PHP код:

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 356999

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

elfoflorien 21-09-2005 22:33 357330

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

PHP код:

function CreateContentsArrays$id )
{
    
$files= Array();
    
$dirs= Array();
    
$fullpath$fpath '/';
    
$mydirDir$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 ) == && count$files ) == ) return false;
    return( Array( 
$dirs$files ));


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

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

PHP код:

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


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


Время: 22:34.

Время: 22:34.
© OSzone.net 2001-