Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: readdir и как с ним бороться
 
 автор: BArt Simpson   (26.08.2005 в 18:04)   письмо автору
 
 


$dist="./dir/files/";
$h=opendir("$dist");
while(($f=readdir($h))!==false)
   {
       if (substr($f,0,1)!=".")
            { 
                    echo "<a href=\"./page.php?path=$f\">$f\n</a><br> ";
             }
}

и в соседнем столбце

if($path)
  {
    $dist="./memarea/files/$path";
     $h=opendir("$dist");
          while(($f=readdir($h))!==false)
              {
                  if (substr($f,0,1)!=".")
                  { 
                        echo " <a href=\"./page.php?path=$path&path2=$f\">$f\n</a> -";
                   }

              }
  }


И нужно что-б выше dir нельзя было подняться вводя в адресной строке
page.php?path=../../

   
 
 автор: cheops   (26.08.2005 в 22:16)   письмо автору
 
   для: BArt Simpson   (26.08.2005 в 18:04)
 

Удалите все точки из $path
<?php
  $path 
str_replace(".","",$path);
?>

   
 
 автор: BArt Simpson   (29.08.2005 в 10:43)   письмо автору
 
   для: cheops   (26.08.2005 в 22:16)
 

Спасибо

   
 
 автор: BArt Simpson   (29.08.2005 в 11:59)   письмо автору
 
   для: cheops   (26.08.2005 в 22:16)
 

Возник следующий вопрос. Предположим $path - это директория, а $path2 это уже файл! как сделать что б он скачивался через этот же скрипт а не на прямую?

   
 
 автор: cheops   (29.08.2005 в 12:11)   письмо автору
 
   для: BArt Simpson   (29.08.2005 в 11:59)
 

А в смысле скачивался не на прямую?

   
 
 автор: BArt Simpson   (29.08.2005 в 12:37)   письмо автору
 
   для: cheops   (29.08.2005 в 12:11)
 

чтоб не видно было реального адреса а ссылка была
http://домен.ru/page.php?go=dil&path=lexar&path2=photo&path3=secuer_digital&file=SD512-40-231_large.jpg

   
 
 автор: P@Sol   (29.08.2005 в 12:18)   письмо автору
 
   для: BArt Simpson   (29.08.2005 в 11:59)
 

.htaccess надо использовать

   
 
 автор: idborn   (29.08.2005 в 12:47)   письмо автору
 
   для: P@Sol   (29.08.2005 в 12:18)
 

А поподробнее..

   
 
 автор: BArt Simpson   (29.08.2005 в 12:49)   письмо автору
 
   для: P@Sol   (29.08.2005 в 12:18)
 

типа Rewrite?

   
 
 автор: P@Sol   (29.08.2005 в 12:58)   письмо автору
 
   для: BArt Simpson   (29.08.2005 в 12:49)
 

--

   
 
 автор: BArt Simpson   (29.08.2005 в 13:08)   письмо автору
 
   для: P@Sol   (29.08.2005 в 12:58)
 

а что значит let_me_in ?

   
 
 автор: P@Sol   (29.08.2005 в 13:09)   письмо автору
 
   для: BArt Simpson   (29.08.2005 в 13:08)
 

просто я так обозвал это условие:) хотя может это и еще что то обозначает

   
 
 автор: BArt Simpson   (29.08.2005 в 13:16)   письмо автору
 
   для: P@Sol   (29.08.2005 в 12:58)
 

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

   
 
 автор: cheops   (29.08.2005 в 19:10)   письмо автору
 
   для: BArt Simpson   (29.08.2005 в 13:16)
 

А какова исходная задача? Коммерческое распространение или что?

   
 
 автор: BArt Simpson   (29.08.2005 в 13:28)   письмо автору
 
   для: P@Sol   (29.08.2005 в 12:58)
 

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

   
 
 автор: BArt Simpson   (29.08.2005 в 13:36)   письмо автору
 
   для: BArt Simpson   (29.08.2005 в 13:28)
 

я пологаю что она должна быть примерно такой
./page.php?go=dil&path=$path&path2=$path2&path3=$path3&file=$f

а код такой

<?php
if($file)
{
$dist="./files/$path/$path2/$path3/$file";
open незнаю чего("$dist");

а тут всё должно открыться :)   (как-то)

}
?>

   
 
 автор: BArt Simpson   (29.08.2005 в 15:26)   письмо автору
 
   для: BArt Simpson   (29.08.2005 в 13:36)
 

нашёл
ссылка на файл с кодом
<a href=\"./down.php?go=dil&path=$path&path2=$path2&path3=$path3&file=$f\">$f\n</a>

а сам код


<?php
if($file)
    {
    
$dist="./files/$path/$path2/$path3/$file";
        
    
header("Content-Type: application/octet-stream");
    
header("Content-Disposition: attachment; filename=$file");
    
header("Content-Length: ".filesize($dist));
    
header("Accept-Ranges: bytes");
    
header("Pragma: no-cache");
    
header("Expires: 0");
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Content-transfer-encoding: binary");
            
    @
readfile($dist);
    exit();
    
    }
?>

   
 
 автор: BArt Simpson   (01.09.2005 в 14:42)   письмо автору
 
   для: BArt Simpson   (26.08.2005 в 18:04)
 

и тут столкнулся ещё с проблеммой - имена файлов в дириктории слишком длинные что б красиво отображаться в одну строчку!!!!
хотелосьбы покороче!!!!
напр.
Вася_Пупкин_жевел_всякий_мусор.wav
а надо на выходе
Вася_Пупкин...

<?php
$h
=opendir("$dist");
while((
$f=readdir($h))!==false)
{
if (
substr($f,0,8)!="info.txt")

echo
"<a href=$f>$f</a><br>"
}
}
?>

   
 
 автор: BArt Simpson   (01.09.2005 в 16:45)   письмо автору
 
   для: BArt Simpson   (01.09.2005 в 14:42)
 

Там ведь навернека substr !!!???

   
 
 автор: cheops   (01.09.2005 в 18:07)   письмо автору
 
   для: BArt Simpson   (01.09.2005 в 16:45)
 

А ну да просто отрежте длинное имя при помощи substr
<?php 
  $h
=opendir("$dist"); 
  while((
$f=readdir($h))!==false
  { 
    if (
substr($f,0,8)!="info.txt"
    { 
       if(
strlen($f) > 8$filename substr($f,0,8)."...";
       else 
$filename $f;
       echo
"<a href=$f>$filename</a><br>" 
     

  } 
?>

   
 
 автор: BArt Simpson   (02.09.2005 в 12:48)   письмо автору
 
   для: BArt Simpson   (01.09.2005 в 14:42)
 

И сново на нашем интересном пути к совершенствованию препядствие


<?
if (($sub=fopen("$dist/info.txt","r"))!==false)
  {
     include_once(
"$dist/info.txt");
  }
else
  {
      
$desc="no coment";
   }
?>


если есть файл info.txt то переменная из него забирается
если нет файла то
"Warning: fopen(./memarea/files/One for all/audio files/URC8210/info.txt): failed to open stream: No such file or directory "
и за одно
"no coment"
как с этим змеем бороться?
файл может быть в одной директории и не быть в другой?

   
 
 автор: BArt Simpson   (02.09.2005 в 13:04)   письмо автору
 
   для: BArt Simpson   (02.09.2005 в 12:48)
 

или вот ещё вариант, но ему тоже не нравится когда нет файла


<?
if (($sub=implode('',file("$dist/info.txt")))!==false)
    {
         
$desc="$sub";
     }
else
     {
         
$desc="no coment";
      }
?>

   
 
 автор: cheops   (02.09.2005 в 13:19)   письмо автору
 
   для: BArt Simpson   (02.09.2005 в 12:48)
 

1) Для этог, сначала проверяют существование файла при помощи функции file_exists() http://www.softtime.ru/dic/id_dic=173&id_group=6
<?php
if(file_exists("$dist/info.txt"))
{
  if ((
$sub=fopen("$dist/info.txt","r"))!==false
  { 
     include_once(
"$dist/info.txt"); 
  } 
}
else 

    
$desc="no coment"

?>

2) Или просто подавляют вывод сообщений при помощи символа @ http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4389
<? 
  
if (($sub = @fopen("$dist/info.txt","r"))!==false
  { 
     include_once(
"$dist/info.txt"); 
  } 
  else 
  { 
      
$desc="no coment"
   } 
?

   
 
 автор: BArt Simpson   (05.09.2005 в 10:52)   письмо автору
 
   для: BArt Simpson   (01.09.2005 в 14:42)
 

И сново!!!!
так как мы держим в секрете всё что можно, возникла потребность открыть грфический файл через всё тотже скрипт:



<?php
if(file_exists("$dist/logo.gif")) 

$tmp=include("$dist/logo.gif");
$logo=base64_decode($tmp);
echo 
"
<tr>
     <td>
            <div align=center>
                   <img src=\"
$logo\">
             </div>
       </td>
</tr>"
;
}

?>

по чтитаемости должно быть так, но в реале не получается.

   
 
 автор: BArt Simpson   (05.09.2005 в 10:59)   письмо автору
 
   для: BArt Simpson   (05.09.2005 в 10:52)
 

А вот я и нашёл, ща попробую!!!!

http://www.softtime.ru/bookphp/gl6_1.php

   
 
 автор: BArt Simpson   (05.09.2005 в 11:03)   письмо автору
 
   для: BArt Simpson   (05.09.2005 в 10:59)
 

не вышло


<?
if(file_exists("$dist/logo.gif")) 

$logo fopen("$dist/logo.gif","rb");
 if(!
logo)
{
 echo(
"Ошибка открытия файла");
}
echo 
"
<tr><td>
<div align=center>
$logo
</div>
</td></tr>"
;    }
?>


и результат
не gif а нодпись
Resource id #67

так как же?

   
 
 автор: cheops   (05.09.2005 в 12:20)   письмо автору
 
   для: BArt Simpson   (05.09.2005 в 11:03)
 

А нет... вывод нескольких изображений на одной странице осуществляется сложнее http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5173. Только ведь это не защитит изображения от заимствований - для того, чтобы изображение увидел посетитель - оно должно быть загружено к нему на локальную машину, а там он его всегда найдёт.

   
 
 автор: BArt Simpson   (05.09.2005 в 12:59)   письмо автору
 
   для: cheops   (05.09.2005 в 12:20)
 

а мне нужно зашитить только адрес откуда оно грузится

   
 
 автор: BArt Simpson   (06.09.2005 в 15:17)   письмо автору
 
   для: BArt Simpson   (26.08.2005 в 18:04)
 

Чёйта дафига у меня получилось директорий которые выводятся через скрипт, начал теряться!!! Как сделать чтоб они выводились по алфавиту?


<?
$dist
="./files/";
$i=0;
$h=opendir("$dist");
while((
$f=readdir($h))!==false)
   {
       if (
substr($f,0,1)!=".")
           {      
             
$i++;
              if ((
$i%2)==0)
                    {
                    echo 
"<td><a href=\"./index.php?go=dil&path=$f\">$f\n</a></td>";
                     }
               else
                      {
                      echo 
"<td bgcolor=\"#E9E9E9\"><a href=\"./index.php?go=dil&path=$f\">$f\n</a></td>";
                       }
             }
    }
@
closedir($h);
?>

   
 
 автор: cheops   (06.09.2005 в 15:25)   письмо автору
 
   для: BArt Simpson   (06.09.2005 в 15:17)
 

Для вывода файлов в алфавитном порядке следует воспользоваться скриптом в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4792. Смысл такой - помещаем все названия файлов в массив - массив сортируем, а затем выводим.

   
 
 автор: BArt Simpson   (09.09.2005 в 12:04)   письмо автору
 
   для: BArt Simpson   (26.08.2005 в 18:04)
 

***Собираю слёзки в ладошку*** Начинаю вводить карявые переменные в адресной сроке типа
http://site.ru/?go=memberarea&path=Vasya&path2=/../&path3=Pupkin
скрипт предательски выдаёт своё место положения (он вкючён инклудом), выдовая ошибку
Warning: opendir(./путь/кдириктории/Vasya////Pupkin/): failed to open dir: No such file or directory in /home/part/01/site/www/memarea/script.php on line 777

как запретить вывод ошибки если директория не правельная?

   
 
 автор: cheops   (09.09.2005 в 12:41)   письмо автору
 
   для: BArt Simpson   (09.09.2005 в 12:04)
 

Поставльте перед функцией opendir символ @, который подавляет вывод сообщений http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5146
<?php
  $h 
= @opendir("$dist");
?>

   
 
 автор: BArt Simpson   (09.09.2005 в 13:09)   письмо автору
 
   для: cheops   (09.09.2005 в 12:41)
 

После того как я попробовал @ я уже решил спросить, это не работает
а вот error_reporting(0); то что нужно

   
 
 автор: cheops   (09.09.2005 в 13:16)   письмо автору
 
   для: BArt Simpson   (09.09.2005 в 13:09)
 

Вообще говоря странно, что это не работает... В таком случае вы можете воспользоваться функцией file_exists(), которая проверяем на существование файл или директорию.
<? 
$dist
="./files/"
$i=0
if(
file_exists("$dist"))
{
  
$h=opendir("$dist"); 
  while((
$f=readdir($h))!==false
   { 
       if (
substr($f,0,1)!="."
           {      
             
$i++; 
              if ((
$i%2)==0
                    { 
                    echo 
"<td><a href=\"./index.php?go=dil&path=$f\">$f\n</a></td>"
                     } 
               else 
                      { 
                      echo 
"<td bgcolor=\"#E9E9E9\"><a href=\"./index.php?go=dil&path=$f\">$f\n</a></td>"
                       } 
             } 
    } 
  @
closedir($h); 
}
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования