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

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

 

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

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

тема: Вопрос по задаче из книги авторов сайта
 
 автор: baston   (08.02.2010 в 23:30)   письмо автору
18.5 Кб
 
 

Здравствуйте уважаемые Максим, Игорь и Сергей.
Изучаю вашу книгу "PHP 5 на примерах" и на странице 131 в первом задании к Главе 4 столкнулся с трудностью. В этом задании вы предлагаете извлечь из результирующей строки
echo `dir`;

имена всех файлов и каталогов и разместить их в массивах соответствующих.
Все бы ничего, но в этой главе, равно как и в предыдущих, не были описаны функции по работе с каталогами и файлами. О них рассказывается в следующих главах книги.
Поскольку результат работы указанной выше строки у меня (см. скриншот) отличается кардинально от представленного в книге на стр. 95, то я был в замешательстве. Ибо вытащить из этой строки имена файлов и каталогов, не зная (умозрительно) функций или регулярных выражений, на мой взгляд очень сложно. Вероятно, потому что я расцениваю эту книгу как своеобразный учебник с заданиями по пройденным главам. Возможно, ошибаюсь.

Тем не менее, я воспользовался функцией glob() и выполнил задание (код ниже).

Однако у меня остались вопросы, на которые я прошу вас при желании ответить (или других опытных пользователей):
1. Как все-таки можно вытащить из этой строки имена файлов и каталогов, используя только те сведения, которые читатель подчерпнул из первых 4 глав книги?
2. Необязательный флаг функции glob() GLOB_NOSORT запрещает сортировку результата по алфавиту. Однако в моем случае этот флаг вообще никакого действия не возымел, так как имеющиеся каталоги выводятся по алфавиту. Почему?
Спасибо.

Вот мой код:
<?php
//Получаем список файлов и каталогов корня
$arrFD glob("C:/*"GLOB_NOSORT);
//Выводим список имен каталогов
foreach($arrFD as $fd)
{
    if(
is_dir($fd))
    {
        
$fd substr($fd,3);
        echo 
$fd."<br>";
    }  
}
echo 
"<br><br>";
//Выводим список имен файлов
foreach($arrFD as $fd)
{
    if(
is_file($fd))
    {
        
$fd substr($fd,3);
        echo 
$fd."<br>";
    }
}

?>

  Ответить  
 
 автор: cheops   (09.02.2010 в 11:26)   письмо автору
 
   для: baston   (08.02.2010 в 23:30)
 

Дело в том, что обраные кавычки позволяют выполнить команду операционной системы. Т.е. при помощи следующего скрипта вы получаете строку $str с результатом выполнения команды dir
<?php
  $str 
= `dir`;
?>

Из которой уже можно извлекать данные при помощи строковых функций.

PS Разумеется это лишь учебное задание, который подразумевает, что вы не будете пользоваться файловыми функциями. В реальной практике, конечно лучше использовать файловые функции.

  Ответить  
 
 автор: baston   (09.02.2010 в 16:11)   письмо автору
 
   для: cheops   (09.02.2010 в 11:26)
 

Игорь Вячеславович, спасибо за ответ. Буду думать, как определить только нужные данные из строки...
И еще: нет ли ответов к этой книге? Хотелось бы сверяться.
Например, на стр.132 есть задание №2. Я его решил (потратил целый день, чтобы сначала разобраться с факториалом, потом как его вычислить, потом как запихнуть в массив его значения и т.д.). Помучался конечно, ведь я только учусь с нуля программировать. Уверен, что не зря!
Вот получившийся код. Прошу сказать, верно ли решение (впрочем, могут быть и другие варианты решений):
<?php
//Определяем функцию расчета факториала числа
function factorial($fact)
{
  return (
$fact <= 1)? $fact factorial($fact-1);
}
// Заполняем массив, значения которого равны факториалу индексов массива
$num 10;
$mas = array();
for(
$i 1$i <= $num$i++)
{
  
$mas[] = factorial($i);
}
//Преобразуем каждый элемент массива в строку из 20 символов
//и выравниванием по левому краю
for($i 0$i count($mas); $i++)
{
  echo 
"<pre>";
  
printf("%-20s<br>"$mas[$i]);
  echo 
"</pre>";
}
?>

Спасибо.

  Ответить  
 
 автор: cheops   (09.02.2010 в 17:10)   письмо автору
 
   для: baston   (09.02.2010 в 16:11)
 

Централизованно в одном месте ответов на вопросы из книги нет - они разбросаны по форуму (можно попытаться их поискать). Однако, мы создали раздел "Задачи PHP", ответы на которые существуют и разбораны в этом разделе форума. Возможно вас этот раздел заинтересует.

  Ответить  
Rambler's Top100
вверх

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