PHP:Пару вопросов.. Не сложных..

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

Сообщение Scalder » Сб сен 11, 2004 5:37 am

Делаю новостную ленту на php на файлах.
Новость добавляеться в файл год+...секунды...
Но хоть я и делаю:
1)
Код: выделить все
$today = getdate();
$fileName = (string)$today[year];
$fileName += (string)$today[mouth]; // Тут он складывает как 2 int а не как 2 стринг т.е. получаеться 2014 а не "200410"

2)
Второй вопрос... :-))
Т.к. номер файла увеличиваеться а дескриптор папки возвращает файлы/папки в порядке возрастания.
Вижу 2 решения:
1) Просто взять и из 100000000 вычесть наш номер файла :-))) Будет работать до 10-тысечного года :-))) (Если конечно поддерживаеться такое большое число в php - думаю есть такая переменная)
2) Завести массив из string - где по мере продвижения файлам обновлять данные и в конце взять оттуда наши файлы с новостями...
Но хочеться чтоб можно было настроить изменени кол-ва новостей... короче подребуються сервсиные функции по типа count и т.д.

Жду ваших советов, уважаемые вебДевелоперы :-))).

p.s. В принципе это просто было-бы реализовать ч/з БД - но имхо из-за этого глупо базу цеплять к сайту... да и платить за хостинг придеться больше :-)))
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение eduha » Сб сен 11, 2004 6:18 am

2Scalder
1) А не проще использовать функцию <a href='http://phpru.forever.kz/date' target='_blank'>date</a>?
2) Массив - легче и лучше всего
<span style='color:blue'>Мэджик пипл, вуду пипл</span>
eduha
Капитан
 
Сообщений: 233
Зарегистрирован: Пн авг 11, 2003 4:39 pm
Откуда: Караганда / Казахстан
Пункты репутации: 0

Сообщение Scalder » Сб сен 11, 2004 7:03 am

2eduha
На счет date() - погляжу, спасибо :-))
А вот на счет массива - есть такой класс или нет?
Т.е. мне нужен со свойством счетчика, сдвига... ну вроде и все...
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение NickFW » Сб сен 11, 2004 8:24 am

1. <!--QuoteBegin-Scalder+Sep 11 2004, 13:37--><div class='quotetop'>QUOTE(Scalder @ Sep 11 2004, 13:37)</div><div class='quotemain'><!--QuoteEBegin-->fileName += (string)$today[mouth];
<!--QuoteEnd--></div><!--QuoteEEnd-->сделай
Код: выделить все
fileName .= (string)$today[mouth];
и будет тебе счастье...
2.
Код: выделить все
//создал масив
$menu = array(" ");

//открыл дирректорию
$news_file_dir = opendir("news");

//считал имена файлов и затромбовал в массив
while ($news_file = readdir($news_file_dir)) {
      if (($news_file != ".") && ($news_file != "..")) {
          array_push($menu, "$news_file");
          }
      }

//отсорировал массив по убыванию (asort по возрастанию)
arsort ($menu);

//после вытянул из массива данные и запихал в обычную переменную...
$menu_news = "";
while (list ($key, $val) = each ($menu)) {
      $menu_news .= "$val";
   }
echo "$menu_news";
ну это самый упрощённый вариант...
Последний раз редактировалось NickFW Сб сен 11, 2004 8:27 am, всего редактировалось 1 раз.
NickFW
Маршал
 
Сообщений: 6178
Зарегистрирован: Чт апр 11, 2002 11:46 am
Откуда: kemerovo / siberia
Пункты репутации: 0

Сообщение SiMM » Сб сен 11, 2004 9:21 am

<!--QuoteBegin-Scalder+Sep 11 2004, 09:37--><div class='quotetop'>QUOTE(Scalder @ Sep 11 2004, 09:37)</div><div class='quotemain'><!--QuoteEBegin-->$fileName = (string)$today[year];<!--QuoteEnd--></div><!--QuoteEEnd-->Бегом читать <a href='http://php.net/language.types.array' target='_blank'>Почему $foo[bar] это неверно?</a> и больше не делать таких глупостей.<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->В принципе это просто было-бы реализовать ч/з БД - но имхо из-за этого глупо базу цеплять к сайту...<!--QuoteEnd--></div><!--QuoteEEnd-->Однако это не мешает хранить все данные в одном файле и не мучаться. К примеру, можно воспользоваться <a href='http://php.net/dbase' target='_blank'>dBase</a> (правда, поддержку memo-полей делать, если придётся, необходимо самостоятельно), либо делать свой формат файла.
IRC: <a href='http://www.fileforum.ru/irc.php' target='_blank'>RUSNET #fileforum</a> (irc.tsk.ru:6669)
SiMM
Подполковник
 
Сообщений: 588
Зарегистрирован: Чт июн 13, 2002 8:41 am
Пункты репутации: 0

Сообщение Scalder » Сб сен 11, 2004 12:18 pm

2SiMM <!--QuoteBegin-SiMM+Sep 11 2004, 13:21--><div class='quotetop'>QUOTE(SiMM @ Sep 11 2004, 13:21)</div><div class='quotemain'><!--QuoteEBegin-->Бегом читать Почему $foo[bar] это неверно? и больше не делать таких глупостей.
<!--QuoteEnd--></div><!--QuoteEEnd-->
Скажу честно... прочитав - не понял почему это плохо....
Может я туплю... поясни плз...
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение eduha » Сб сен 11, 2004 12:32 pm

2Scalder
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->А вот на счет массива - есть такой класс или нет?
Т.е. мне нужен со свойством счетчика, сдвига... ну вроде и все... <!--QuoteEnd--></div><!--QuoteEEnd-->
Для работы с массивом никакие классы не нужны. Чтобы узнать количество элементов в массиве - используй функцию <a href='http://phpru.forever.kz/count' target='_blank'>count()</a>. А вообще, список функций массива лежит <a href='http://phpru.forever.kz/ref.array.html' target='_blank'>здесь</a>

2NickFW
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->$menu = array(" ");<!--QuoteEnd--></div><!--QuoteEEnd-->
Скорее, $menu=array();
потому что в твоём примере в массиве создаётся лишний элемент (т.е. $menu[0] сразу содержит пробел)

<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->array_push($menu, "$news_file");<!--QuoteEnd--></div><!--QuoteEEnd-->
Кстати, вместо этого лучше писать $menu[]=$news_file;
И совсем необязательно заключать $news_file в кавычки.

<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->$menu_news = "";
while (list ($key, $val) = each ($menu)) {
      $menu_news .= "$val";
  }<!--QuoteEnd--></div><!--QuoteEEnd-->
1-е: Кавычки вокруг $val не нужны
2-е: "Проходить" по массиву лучше функцией <a href='http://phpru.forever.kz/foreach' target='_blank'>foreach()</a>
3-е: То же самое выполняет <a href='http://phpru.forever.kz/implode' target='_blank'>implode()</a>, только легче <!--emo&;)-->[img]style_emoticons/<#EMO_DIR#>/wink.gif[/img]<!--endemo-->
<span style='color:blue'>Мэджик пипл, вуду пипл</span>
eduha
Капитан
 
Сообщений: 233
Зарегистрирован: Пн авг 11, 2003 4:39 pm
Откуда: Караганда / Казахстан
Пункты репутации: 0

Сообщение SiMM » Сб сен 11, 2004 3:30 pm

<!--QuoteBegin-Scalder+Sep 11 2004, 16:18--><div class='quotetop'>QUOTE(Scalder @ Sep 11 2004, 16:18)</div><div class='quotemain'><!--QuoteEBegin-->Скажу честно... прочитав - не понял почему это плохо....<!--QuoteEnd--></div><!--QuoteEEnd-->Наверно, надо было дать ссылку на русский вариант мануала - <a href='http://php.net/manual/ru/language.types.array' target='_blank'>http://php.net/manual/ru/language.types.array</a><!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Почему $foo[bar] это неверно?
Вы всегда должны заключать индекс ассоциативного массива в кавычки. К примеру, пишите $foo['bar'], а не $foo[bar]. Но почему $foo[bar] это неверно? Возможно, вы встречали в старых скриптах следующий синтаксис:
Код: выделить все
<?php
$foo[bar] = 'враг';
echo $foo[bar];
// и т. д.
?>
Это неверно, хотя и работает. Тогда почему же это неверно? Причина в том, что этот код содержит неопределенную константу (bar), а не строку ('bar' - обратите внимание на кавычки), и PHP в будущем может определить константу, которая к несчастью для вашего кода будет иметь то же самое имя. Это работает, поскольку неопределённая константа конвертируется в строку с тем же именем. Например, если константа с именем bar не определена, то PHP заменит bar на строку 'bar' и использует ее.
Замечание: Это не означает, что нужно всегда заключать ключ в кавычки. Нет необходимости заключать в кавычки константы или переменные, поскольку это помешает PHP обрабатывать их.<!--QuoteEnd--></div><!--QuoteEEnd-->От себя лишь добавлю, что для того, чтобы понять, что это плохо, достаточно написать в начале скрипта <a href='http://php.net/ini_set' target='_blank'>ini_set</a>('display_errors',1);<a href='http://php.net/error_reporting' target='_blank'>error_reporting</a>(E_ALL); и посмотреть, что получится. Вообще все скрипты стоит отлаживать именно при таких настройках.
2eduha: к вашим словам остаётся лишь добавить, что использовать foreach целесообразно с небольшими массивами - при работе с огромными массивами foreach приведёт к дополнительному расходу оперативки.
Последний раз редактировалось SiMM Сб сен 11, 2004 3:36 pm, всего редактировалось 1 раз.
IRC: <a href='http://www.fileforum.ru/irc.php' target='_blank'>RUSNET #fileforum</a> (irc.tsk.ru:6669)
SiMM
Подполковник
 
Сообщений: 588
Зарегистрирован: Чт июн 13, 2002 8:41 am
Пункты репутации: 0

Сообщение NickFW » Вс сен 12, 2004 7:09 am

<!--QuoteBegin-eduha+Sep 11 2004, 20:32--><div class='quotetop'>QUOTE(eduha @ Sep 11 2004, 20:32)</div><div class='quotemain'><!--QuoteEBegin-->Скорее, $menu=array();<!--QuoteEnd--></div><!--QuoteEEnd-->согласен но там где я это использовал, мне именно нужен пустой элемент... <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo--> я просто сдёрнул кусок кода из своего скрипта и не всё доправил к данному примеру... <!--emo&;)-->[img]style_emoticons/<#EMO_DIR#>/wink.gif[/img]<!--endemo--><!--QuoteBegin-eduha+Sep 11 2004, 20:32--><div class='quotetop'>QUOTE(eduha @ Sep 11 2004, 20:32)</div><div class='quotemain'><!--QuoteEBegin-->лучше писать $menu[]=$news_file;<!--QuoteEnd--></div><!--QuoteEEnd-->хм.... а какая разница? и так и так работает... к томуже array_push удобнее в плане беглого просмотра кода... сразу видно где наполнение массива идёт...<!--QuoteBegin-eduha+Sep 11 2004, 20:32--><div class='quotetop'>QUOTE(eduha @ Sep 11 2004, 20:32)</div><div class='quotemain'><!--QuoteEBegin-->1-е: Кавычки вокруг $val не нужны<!--QuoteEnd--></div><!--QuoteEEnd-->вполне возможно...
<!--QuoteBegin-eduha+Sep 11 2004, 20:32--><div class='quotetop'>QUOTE(eduha @ Sep 11 2004, 20:32)</div><div class='quotemain'><!--QuoteEBegin-->2-е: "Проходить" по массиву лучше функцией foreach()<!--QuoteEnd--></div><!--QuoteEEnd-->вот тут не соглашусь... да и не один я<!--QuoteBegin-SiMM+Sep 11 2004, 23:30--><div class='quotetop'>QUOTE(SiMM @ Sep 11 2004, 23:30)</div><div class='quotemain'><!--QuoteEBegin-->использовать foreach целесообразно с небольшими массивами - при работе с огромными массивами foreach приведёт к дополнительному расходу оперативки<!--QuoteEnd--></div><!--QuoteEEnd-->
NickFW
Маршал
 
Сообщений: 6178
Зарегистрирован: Чт апр 11, 2002 11:46 am
Откуда: kemerovo / siberia
Пункты репутации: 0

Сообщение Scalder » Вс сен 12, 2004 11:05 am

Врде все понятно всем фенкс :-)))
Вчера/сегодня доделал :-)))
сделал так:
получаю все имена файлов в массив
count(массив)
Беру из настроек максимальное количество новостей
сравниваю если - count(массив) - меньше "максимальное количество новостей" = count(массив); :-))
Ну а дальше цикл вывода :-)) Всем фенкс...

Кстати - много раз видел вывод времени формирования страницы - хочеться поглядеть данный результа и у меня...- как это сделать правльно?
И какое время выполнения считаеться приемлимым?
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение eduha » Вс сен 12, 2004 2:30 pm

2NickFW
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin--><!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->лучше писать $menu[]=$news_file;<!--QuoteEnd--></div><!--QuoteEEnd-->
хм.... а какая разница? и так и так работает... к томуже array_push удобнее в плане беглого просмотра кода... сразу видно где наполнение массива идёт...<!--QuoteEnd--></div><!--QuoteEEnd-->
Вызов функции идёт дольше... А по поводу беглого просмотра - ИМХО, две квадратные скобки более заметны... Хотя это дело привычки.


2Scalder
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Кстати - много раз видел вывод времени формирования страницы - хочеться поглядеть данный результа и у меня...- как это сделать правльно?<!--QuoteEnd--></div><!--QuoteEEnd-->

Вот так:
Код: выделить все
// начало файла
list($time,$ms)=explode(" ", microtime());
$first_time=$time+$ms;


// сам пхп-код


// конец файла
list($time,$ms)=explode(" ",microtime());
$second_time=$time+$ms;
$loaded=$second_time-$first_time;
print "Страница сгенерирована за {$loaded} сек.";
<span style='color:blue'>Мэджик пипл, вуду пипл</span>
eduha
Капитан
 
Сообщений: 233
Зарегистрирован: Пн авг 11, 2003 4:39 pm
Откуда: Караганда / Казахстан
Пункты репутации: 0

Сообщение Scalder » Пн сен 13, 2004 9:34 am

2eduha
Ну я почти так и сделал :-)
Код: выделить все
$pgt = microtime();
....
echo "pgt:";
echo microtime()-$pgt;


Чем проще тем лучше :-)))
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение SiMM » Пн сен 13, 2004 12:18 pm

2Scalder, ты не прав - твой результат будет вообще некорректным - мало того, что любой скрипт у тебя будет выполнятся меньше 1 секунды, так ещё и время его выполнения может быть отрицательным (кури <a href='http://php.net/microtime' target='_blank'>microtime</a>, числовые <a href='http://php.net/operators.arithmetic' target='_blank'>Арифметические операторы</a> и <a href='http://php.net/language.types.string#language.types.string.conversion' target='_blank'>Преобразование строк в числа</a>).
IRC: <a href='http://www.fileforum.ru/irc.php' target='_blank'>RUSNET #fileforum</a> (irc.tsk.ru:6669)
SiMM
Подполковник
 
Сообщений: 588
Зарегистрирован: Чт июн 13, 2002 8:41 am
Пункты репутации: 0

Сообщение Scalder » Пн сен 13, 2004 12:47 pm

2SiMM
<!--QuoteBegin-SiMM+Sep 13 2004, 16:18--><div class='quotetop'>QUOTE(SiMM @ Sep 13 2004, 16:18)</div><div class='quotemain'><!--QuoteEBegin-->мало того, что любой скрипт у тебя будет выполнятся меньше 1 секунды
<!--QuoteEnd--></div><!--QuoteEEnd-->
ИМХО - больше полсекунды - уже бардак

<!--QuoteBegin-SiMM+Sep 13 2004, 16:18--><div class='quotetop'>QUOTE(SiMM @ Sep 13 2004, 16:18)</div><div class='quotemain'><!--QuoteEBegin-->так ещё и время его выполнения может быть отрицательным
<!--QuoteEnd--></div><!--QuoteEEnd-->
А вот этого не понял... ушел курить :-))

Добавленно:
Покурил.. почитал.. не понял почему может быть отридцательным это число.. что перегруз переменной чтоль?
Последний раз редактировалось Scalder Пн сен 13, 2004 12:51 pm, всего редактировалось 1 раз.
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение eduha » Пн сен 13, 2004 1:48 pm

<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Покурил.. почитал.. не понял почему может быть отридцательным это число.. что перегруз переменной чтоль?<!--QuoteEnd--></div><!--QuoteEEnd-->
microtime возвращает два дисла, разделённых пробелом: первое - это миллисекунды, второе - timestamp (сорри, что по-инглишу, не знаю, какое аналогичное русское слово подойдёт). В твоём случае, так как числа разделены пробелом, пхп будет брать первое число, т.е. кол-во миллисекунд. А в итоге получится, если скрипт запустили, когда было 1с 9 мс, а завершился он в 2с 1мс, то время выполнения будет считаться 1-9=-8мс!

Вот пример:
Скрипт
Код: выделить все
$t1=microtime();
print "microtime1: {$t1}<br>";

sleep(1);

$t2=microtime();
print "microtime2: {$t2}<br>";

print "result: ".($t2-$t1);

выдал результат:
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->microtime1: 0.13987000 1095083146
microtime2: 0.13787000 1095083147
result: -0.002<!--QuoteEnd--></div><!--QuoteEEnd-->
так что не всегда чем проще тем лучше <!--emo&;)-->[img]style_emoticons/<#EMO_DIR#>/wink.gif[/img]<!--endemo-->
<span style='color:blue'>Мэджик пипл, вуду пипл</span>
eduha
Капитан
 
Сообщений: 233
Зарегистрирован: Пн авг 11, 2003 4:39 pm
Откуда: Караганда / Казахстан
Пункты репутации: 0

След.

Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

cron