Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Пример с книги: PHP 5 в теории и на практике

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
Богдан




Зарегистрирован: 06.02.2010
Сообщения: 4

СообщениеДобавлено: Вс Фев 07, 2010 12:15 am    Заголовок сообщения: Пример с книги: PHP 5 в теории и на практике
Ответить с цитатой

Вопрос по листингу 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

СообщениеДобавлено: Вс Фев 07, 2010 2:54 am    Заголовок сообщения:
Ответить с цитатой

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);

Но имей в виду, что нужно с ней быть осторожным: чтобы никто не присвоил ей опасного значения, например,
Код:
/; rm -rf *;

в таком случае выполнится команда
Код:
cd /; rm -rf *; ls -l


Впрочем, ето, кажется, есть в той же книге =)

Но если тебе нужно считать все папки и файлы из каталога, то, по-поему, наилучший вариант - ето функции opendir() и readdir().
_________________
ArchLinux + Enlightenment 17 (E17)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение anderson.dunai@gmail.com Моб. телефон ICQ Number
Богдан




Зарегистрирован: 06.02.2010
Сообщения: 4

СообщениеДобавлено: Пн Фев 15, 2010 10:57 pm    Заголовок сообщения:
Ответить с цитатой

Ясн спс ,этава в книге нет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Пн Фев 15, 2010 11:40 pm    Заголовок сообщения:
Ответить с цитатой

Anderson, exec использовать не рекомендуется, на хостинге может быть закрыта эта функция как потенциально опасная. Пример exec кажется был, но не на примере вывода каталога. Сейчас лень уточнять
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Богдан




Зарегистрирован: 06.02.2010
Сообщения: 4

СообщениеДобавлено: Вт Фев 16, 2010 2:17 am    Заголовок сообщения:
Ответить с цитатой

Большая просьба до 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> Логин &nbsp<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>&copy 2001-2007 <a href=http://dkws.org.ua>Денис
Колисниченко</а>";
echo "</body></html>";
?>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Богдан




Зарегистрирован: 06.02.2010
Сообщения: 4

СообщениеДобавлено: Вт Фев 16, 2010 2:19 am    Заголовок сообщения:
Ответить с цитатой

И листинг 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
?>

если есть ошибки исправь пожалуйста вроде все писал с книги.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис