|
Автор |
Сообщение |
Богдан
Зарегистрирован: 06.02.2010 Сообщения: 4
|
|
|
|
Вопрос по листингу 7,2. Где мы тут указываем нужный путь к директории с файлами, если в переменной $DocumentRoot то не могли б вы написать её содержимое ? и что эт за переменная $DocumentRoot? вот сам листинг.
<?// Получаем содержимое текущего каталога. Для нашего сценария
// текущим будет каталог /var/www/html/ // $DocumentRoot)
exec ("ls -1",$Files);
function cmp ($el_1,$el_2)
{ if (is_dir($el_1)) && !is_dir($el_2)) return -1;
if (!is_dir ($el_1)) && (is_dir($el_2)) return 1;
if ($el_1>$el_2) return-1;
elseif($el_1>$el_2) return 1; else return 0;}
uasort($files,"cmp");
echo "<html><title>Сценарий Files.php </title><body>";
echo "<h1>содержимое каталога</h1><p>";
foreach ($files as $f)
if (is_dir ($f)) echo "<br><img src=folder.png>$f";
echo "<br><img src=doc.png>$f";
echo "</body></html>";
?> |
|
Вернуться к началу |
|
|
Anderson
Завсегдатай
Зарегистрирован: 08.07.2006 Сообщения: 642 Откуда: localhost
|
|
|
|
DocumentRoot - ето параметр из файла httpd.conf (файл конфигурации апача), который указывает на корневую папку сервера (в основном ето /var/www/html). В данном листинге, чтобы явно задать папку, из которой надо читать файлы (а вернее - исполнить команду ls -l), нужно 1ю строку переписать так:
Код: |
exec("cd $dir; ls -l", $Files); |
а перед етим установить переменную $dir равной, например, "/home/anderson":
Код: |
$dir="/home/anderson";
exec("cd $dir; ls -l", $Files); |
или просто:
Код: |
exec("cd /home/anderson; ls -l", $Files); |
Но имей в виду, что нужно с ней быть осторожным: чтобы никто не присвоил ей опасного значения, например,
в таком случае выполнится команда
Код: |
cd /; rm -rf *; ls -l |
Впрочем, ето, кажется, есть в той же книге =)
Но если тебе нужно считать все папки и файлы из каталога, то, по-поему, наилучший вариант - ето функции opendir() и readdir(). _________________ ArchLinux + Enlightenment 17 (E17) |
|
Вернуться к началу |
|
|
Богдан
Зарегистрирован: 06.02.2010 Сообщения: 4
|
|
|
|
Ясн спс ,этава в книге нет. |
|
Вернуться к началу |
|
|
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Anderson, exec использовать не рекомендуется, на хостинге может быть закрыта эта функция как потенциально опасная. Пример exec кажется был, но не на примере вывода каталога. Сейчас лень уточнять |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
Богдан
Зарегистрирован: 06.02.2010 Сообщения: 4
|
|
|
|
Большая просьба до denа, помоги с примерром с книги , вроде правельна написал листиг а он при воде логина и пароля не заходит. Вот листинг 1 файла index.php:
<?
$LoginScript="$HTTP_HOST/localhost/Proverky/login.php";
$NewsFile="news.html?quot;;
// Устанавливаем cookie для индивидуального счетчика посещений
if(!isSet($STCount)) $STCount=0;
$STCount++;
SetCookie("STCount",$STCount,0x7FFFFFFF);
// Устнавливаем общий счетчик посещений
$f=fopen("counter.dat","a+");
flock($f,2);
$count=fread($f,100);
// He засчитываем посещения со своего узла
$REMOTE_HOST=gethostbyaddr($REMOTE_ADDR);
if(!($HTTP_HOST===$REMOTE_HOST)) @$count=$count+ 1;
ftruncate($f,0);
fwrite($f,$count);
flock($f,3);
fclose ($f);
// Читаем файл с новостями
if (file_exists($NewsFile))
{ $news = join('', file($NewsFile)); }
else $news="No news today";
// Это заголовок
echo "<html><head><meta http-equiv=Content-Type
content=\"text/html; charset=windows-1251\">";
echo "<title>SmartTest</title><link rel=stylesheet type=\"text/ css\" href=\"st.css\">";
echo "</head><body text=#000000 bgcolor=#FFFFFF
link=#0000EE vlink=#551A8B link=#FF0000 background=smarttest.jpg>";
// Тело
echo "<h1>Система проверки знаний<br>SmartTest</h1>";
echo "<table WIDTH=100% BGCOLOR=#336699><tr><td>";
echo "<font color=FFFFFF><font size=+1>Сегодня 27.01.02</
font></font></td></tr></table>";
echo "<table WIDTH=100% border=1 cellspacing=0
cellpadding=3 bordercolor=#336699>";
echo "<tr><td width=50%><font color=#336699><font
size=+1>Новости</font></font></td>";
echo "<td width=50%><font color=#336699><font
size=+1>Регистрация</font></font></td></tr><tr><td>";
echo $news;
echo "<td><form action=http://$LoginScript>";
echo "<br> Логин  <input type=text name=user><br>Пароль
<input type=password name=passwd>";
echo "<br><br><input type=submit value=Login><p>Вы должны
быть зарегистрированным <br>пользователем! По вопросам регистрации обращайтесь к <а href=mailto:st-admin@host.com>администратору системы
SmartTest</a>";
echo "</td></tr></table>";
echo "<p>Вы посещали систему SmartTest $STCount раз(а). Всего
посещений: $count.";
echo "<p>© 2001-2007 <a href=http://dkws.org.ua>Денис
Колисниченко</а>";
echo "</body></html>";
?> |
|
Вернуться к началу |
|
|
Богдан
Зарегистрирован: 06.02.2010 Сообщения: 4
|
|
|
|
И листинг 2 файла login.php :
<?
// Открываем сессию smarttest
session_name("smarttest");
session_start();
session_register("Login");
session_register("FullName");
session_register("UserName");
$Dir="\logs";
$text=""; // объявим переменную и будем использовать ее как
// глобальную
// Функция получает текст вопроса, выводит его и создает
// средства (checkbox'ы) для
// выбора правильных вариантов ответа
function GetQuestText()
{
global $Counter, $text;
$tmp=$Counter+1;
//echo "<title>SmartTest</title></head><body bgcolor=white>";
//echo "<h1>Система дистанционного контроля знаний<br>SmartTest</h1>" ;
echo "<br><b>Bonpoc $tmp</b><br>";
echo "$text";
echo "<br>";
echo "<form action=$SCRIPT_NAME><br>";
// Имена checkbox’ов - aN, где N от 1 до 6
echo "<input type=checkbox name=a1 value=1>1 <input
type=checkbox name=a2 value=2>2 ";
echo "<input type=checkbox name=a3 value=3>3 <input
type=checkbox name=a4 value=4>4 ";
echo "<input type=checkbox name=a5 value=5>5 <input type=checkbox name=a6 value=6>6 ";
echo "<br><input type=submit value=\"Ответить!\">";
//echo "</form></body></html>";
}
// Функция подключения к серверу
function connect()
{
mysql_connect("localhost", "1317", "1317") or die(mysql_error());
mysql_select_db("st2");
}
// Функция выводит список вопросов в виде таблицы
function GetTestList()
{
global $SCRIPT_NAME;
echo "<center><i>Список доступных тестов :</i></center><br>";
echo "<table BORDER COLS=3 WIDTH=\"100%\" BGCOLOR=#CEFFCE>";
echo "<tr ALIGN=CENTER BGCOLOR=#3333FF>";
echo "<td><b><i><font color=#FFFFFF>Номер</font></i></b></td>";
echo "<td><b><i><font color=#FFFFFF>Название</font></i></b></td>";
echo "<td><b><i><font color=#FFFFFF>Автор</font></i></b></td>";
$res=mysql_query("SELECT no,desk,autor FROM reg");
while ($Row=mysql_fetch_row($res))
{
echo "<tr>";
for($i=0; $i<mysql_num_fields($res); $i++)
echo "<td><a href=$SCRIPT_NAME?tno=$Row[0]>$Row[$i]</a></td>";
echo "</tr>";
}
echo "</table>";
}
// Функция проверяет имя пользователя и его пароль. Если
// они правильны, она
// присваивает глобальной переменной Login значение 1
function Register()
{
global $user, $passwd, $Accept, $Login;
global $UserName, $FullName;
$Login=0;
$res=mysql_query("SELECT * from ureg");
while ($Row=mysql_fetch_row($res))
{
if($Row[0]==$user)
{
if($Row[1]==$passwd)
{ $FullName=$Row[2];
$UserName=$user;
$Login=1;
break; }
}
}
}
/* Основная программа */
if ($Login==0)
{
// Неправильные имя пользователя и/или пароль
echo "<html><head>";
echo "<h1>Система дистанционного контроля знаний<br>SmartTest</h1>";
echo "<center><h2>Access denied.</h2>";
echo "<р>Проверьте имя пользователя и пароль!</p>";
echo "</body></html>";
unset($Accept);
session_unset();
global $Dir;
global $REMOTE_ADDR;
// Нужно обеспечить запись в этот каталог
@mkdir($Dir,755);
$f=fopen("logs\access.log","a+t") or Die("Cannot to create access.log");
flock($f,2);
$dt=date("d.m.y H.i.s");
if(PHP_OS=="Windows") $NL="\n"; else $NL="\n\r";
fputs($f,"$dt Access denied for user $user [$passwd]. IP: $REMOTE_ADDR $NL");
flock($f,3);
fclose($f);
exit;
}
else
{
// Все Ок, выводим список тестов
echo "<title>SmartTest</title></head><body bgcolor=white>";
echo "<h1>Система дистанционного контроля знаний<br>SmartTest</hl>";
echo "<В><I>Здравствуйте, $Row[2]!</B></I><BR>";
GetTestList();
return;
}
connect();
echo "login=$Login $UserName";
if(!isSet($Login)) { Register() ;}
else
{
// Регистрируем в сессии служебные переменные
session_register("TestNo");
session_register("Arr");
session_register("Counter");
session_register("Table");
session_register("Tru");
session_register("Max");
session_register("Prev");
session_register("Diff");
session_register("Total");
session_register("TT");
// При первом запуске устанавливаем номер теста и
// инициализируем базу
if(!isSet($TestNo))
{
$Res=mysql_query("SELECT no,qmax,tbl FROM reg WHERE no=$tno");
$Row=mysql_fetch_row($Res);
$Max=$Row[1];
$Table=$Row[2];
$Diff=$Row[3];
$QDiff=0; $Total=0;
$ATable=$Table."_a"; // таблица ответов
echo $ATable;
$R=@mysql_query("SELECT * FROM $ATable") or die("Invalid SQL query [$ATable]");
while($Rw=mysql_fetch_row($R))
{ if($Rw[0]===$UserName)
{
echo "Вы уже проходили выбранный тест<br>";
echo "Ваша оценка $Rw[1]. Вы правильно ответили на $Rw[2] вопросов(а)";
GetTestList();
exit;
} // if($Rw)
} //While($Rw);
$TestNo=tno;
$Counter=0;
// проверяет все ли разные элементы в массиве
function checkarr($Arr)
{
// разные $Res=1;
for ($i=0; $i<10; $i++)
for ($j=$i+1; $j<10; $j++)
if($Arr[$i]===$Arr[$j]) { $Res = 0; break(1); }
return $Res;
}
mt_srand(time()+(double)microtime()*1000000);
for ($i=0; $i<9;$i++) $Quest[]=mt_rand(0,100);
while(checkarr($Quest)==O)
{
for ($i=0;$i<9;$i++) $Quest[$i]=mt_rand(0,100);
} // while
// массив сгенерирован, пишем его ...
$Arr=serialize($Quest);
// сейчас нужно выдать первый вопрос...
$Res=mysql_query("SELECT * FROM $Table WHERE no=$Quest[$Counter]");
$Row=mysql_fetch_row($Res);
$Prev=$Row[2];
$text=$Row[1];
$Diff=$Row[3];
GetQuestText();
} // if (!isSet)
else // уже не первый запуск, $TestNo установлена
// пришел ответ на предыдущий вопрос
{
if(!isSet($al)) $al=""; if(!isSet($a2)) $a2="";
if (!isset($аЗ)) $аЗ="";
if(!isSet($a4)) $a4="";
if(!isSet($a5)) $a5="";
if(!isSet($a6)) $a6="";
$Answer=$al.$a2.$a3.$a4.$a5.$a6;
if ($Answer===$Prev)
{
$Tru=@$Tru+1;
$Trusted='Y';
If ($Diff=='Y') $Total=$Total+3;
else $Total=$Total+1;
} else $Trusted='N';
If ($Diff=='Y') $TT=$TT+3;
else $TT=$TT+1;
if($Counter===9) {
// пора бы и закончить тест
$АTable=$Table."_а";
$Ехр=($Total*100)/$TT;
if ($Exp>=90) $Mark=5;
else if($Exp>=75) $Mark=4;
else if($Exp>=50) $Mark=3;
else if($Exp<50) $Mark=2;
mysql_query("INSERT INTO $ATable VALUES('$UserName','$Mark','$Tru')");
$msg="<br>$FullName, вы ответили правильно на $Tru вопросов(а)";
$msg=$msg+"<br>Вы набрали $Total баллов из возможных $ТТ ($Ехр)%";
$msg=$msg+"<br>Ваша оценка: $Mark";
echo $msg;
// удаляем сессию.
session_unset();
exit;
}
$Quest=unserialize($Arr);
$Res=mysql_query("SELECT * FROM $Table WHERE no=$Quest[$Counter]");
$Row=mysql_fetch_row($Res);
$Prev=$Row[2];
$text=$Row[1];
$Diff=$Row[3];
$Counter=$Counter+1;
GetQuestText();
}
} // от самого первого else
?>
если есть ошибки исправь пожалуйста вроде все писал с книги. |
|
Вернуться к началу |
|
|
|
|
 Главная страница сайта
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|