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

Форум PHP

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

 

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

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

тема: Автоудаление строки из файла
 
 автор: ded   (18.06.2005 в 21:20)   письмо автору
 
 

Уважаемый cheops, подскажите пожалуйста куда нужно вставить вот эту функцию автоудаления в ниже приведённом коде.

Код отвечающий за вывод объявлений из текстовой базы данных.
[поправлено модератором: листинги такого объёма разумнее прикреплять к сообщению в виде файла]

Код автоудаления

 $lines = file("dat/$catid.php");
  // Â öèêëå ðàçáèâàåì ñòðîêó è èçâëåêàåì âðåìÿ
  for($i = 0; $i < count($lines); $i++)
  {
    // &#208;&#224;&#231;&#225;&#232;&#226;&#224;&#229;&#236; &#241;&#242;&#240;&#238;&#234;&#243; &#237;&#224; &#238;&#242;&#228;&#229;&#235;&#252;&#237;&#251;&#229; &#234;&#238;&#236;&#239;&#238;&#237;&#229;&#237;&#242;&#251;
    $arr = explode("::", $lines[$i]);
    // &#194;&#240;&#229;&#236;&#255; &#226; &#241;&#229;&#234;&#243;&#237;&#228;&#224;&#245; &#241; 1 &#255;&#237;&#226;&#224;&#240;&#255; 1979 &#227;&#238;&#228;&#224;
    // &#237;&#224;&#245;&#238;&#228;&#232;&#242;&#241;&#255; &#226; $arr[1] - &#226;&#251;&#247;&#232;&#241;&#235;&#232;&#236; &#240;&#224;&#231;&#237;&#232;&#246;&#243; &#241;
    // &#242;&#229;&#234;&#243;&#249;&#232;&#236; &#236;&#238;&#236;&#229;&#237;&#242;&#238;&#236;: &#229;&#241;&#235;&#232; &#238;&#237;&#224; &#225;&#238;&#235;&#252;&#248;&#229; 20 &#228;&#237;&#229;&#233;
    // &#231;&#224;&#239;&#232;&#241;&#252; &#243;&#228;&#224;&#235;&#255;&#229;&#236;

    if((time() - $arr[1])/3600/24>1) unset($lines[$i]);
  }
  // &#212;&#238;&#240;&#236;&#232;&#240;&#243;&#229;&#236; &#237;&#238;&#226;&#238;&#229; &#241;&#238;&#228;&#229;&#240;&#230;&#232;&#236;&#238;&#229; &#244;&#224;&#233;&#235;&#224;
  $content = implode("",$lines);
  // &#207;&#229;&#240;&#229;&#239;&#232;&#241;&#251;&#226;&#224;&#229;&#236; &#241;&#238;&#228;&#229;&#240;&#230;&#232;&#236;&#238;&#229; &#244;&#224;&#233;&#235;&#224;
  $fd = fopen("dat/$catid.php","w");
  fwrite($fd,$content);
  fclose($fd);        */

   
 
 автор: cheops   (18.06.2005 в 23:24)   письмо автору
 
   для: ded   (18.06.2005 в 21:20)
 

А какая задача? Дело в том, что по такому коду сложно определить его назначение?

   
 
 автор: Евгений Петров   (18.06.2005 в 23:56)   письмо автору
 
   для: cheops   (18.06.2005 в 23:24)
 

Почему? Если сохранить это все в html и поставить между тегами <pre> и </pre> то очень даже ничего получается. :)

   
 
 автор: cheops   (19.06.2005 в 09:19)   письмо автору
 
   для: Евгений Петров   (18.06.2005 в 23:56)
 

Это, конечно, хорошо, но хотелось бы узнать конечную цель :))).

   
 
 автор: Евгений Петров   (19.06.2005 в 13:55)   письмо автору
 
   для: cheops   (19.06.2005 в 09:19)
 

... и ещё потом в Word вставить и восстановить текст ( :) ), вот что у меня получилось:

<?
$lines 
file("dat/$catid.php");
  
// В цикле разбиваем строку и извлекаем время
  
for($i 0$i count($lines); $i++)
  {
    
// Разбиваем строку на отдельные компоненты
    
$arr explode("::"$lines[$i]);
    
// Время в секундах с 1 января 1979 года
    // находится в $arr[1] - вычислим разницу с
    // текущим моментом: если она больше 20 дней
    // запись удаляем

    
if((time() - $arr[1])/3600/24>1) unset($lines[$i]);
  }
  
// Формируем новое содержимое файла
  
$content implode("",$lines);
  
// Переписываем содержимое файла
  
$fd fopen("dat/$catid.php","w");
  
fwrite($fd,$content);
  
fclose($fd);        */ 
?>

мне кажется этот код удаляет из файла все строки, где что то происходит со временем (срок годности истек)

   
 
 автор: ded   (19.06.2005 в 23:59)   письмо автору
7.6 Кб
 
   для: Евгений Петров   (19.06.2005 в 13:55)
 

Этот код предложили мне Вы cheops в своё время, но у меня с ним ничего не получилось, вернее просходит следующее. Я заполняю форму, инфа заноситься в базу, объявление высвечивается, после чего я пробую обновить стр с объявлением и... объява исчезает т.е. стриается из базы.
В принципе можете посмотреть недоделаную доску объявлений, чтобы иметь представление зачем это нужно. http://www.xivin.h14.ru/index.php?do=content

Ещё вопрс. В переменной arr[1], [1]-это позиция даты в базе?
Например если запись в базу у меня будет такая $uniqid::$date::и т.д. то arr будет с [2]?

Прикрепляю код куда нужно вставить автоудаление

   
 
 автор: cheops   (20.06.2005 в 00:30)   письмо автору
 
   для: ded   (19.06.2005 в 23:59)
 

Погодите ка... так ведь этот код для файлов, а не для базы - может лучше сформулировать подходящий SQL-запрос?

   
 
 автор: ded   (20.06.2005 в 00:32)   письмо автору
 
   для: cheops   (20.06.2005 в 00:30)
 

У меня инфа хранится в php файлах, My Sql у меня нет

   
 
 автор: cheops   (20.06.2005 в 00:45)   письмо автору
 
   для: ded   (19.06.2005 в 23:59)
 

А... да куда угодно его прикрепите - поставьте в самый конец. Правда это чревато, тем, что файл будет дёргать каждый посетитель - для того чтобы снизить вероятность можно использовать выполнение этого кода по случайному числу, скажем каждое 100 обновление исходной страницы. Т.е. после последней фигрурной скобки в прикреплённом вами файле следует поместить
<?php
if(rand(1,100) == 50)
{
  
// Код автоудаления
}
?>


>Ещё вопрс. В переменной arr[1], [1]-это позиция даты в базе?
>Например если запись в базу у меня будет такая $uniqid::$date::и т.д.
>то arr будет с [2]?
1 - да это позиция элемента в массиве, в PHP они начинаются с 0, т.е. 0 - первый элемент, 1 - второй, 2 - третий и так далее до count($arr) - 1. Если запись у вас будет такая
$uniqid::$date::и т.д.

то $arr[0] - $uniqid
$arr[1] - $date
$arr[2] - и т.д.

   
 
 автор: ded   (20.06.2005 в 17:24)   письмо автору
 
   для: cheops   (20.06.2005 в 00:45)
 

Большое спасибо за подробное объяснение. Пошёл пробовать.

   
 
 автор: ded   (20.06.2005 в 17:56)   письмо автору
 
   для: ded   (20.06.2005 в 17:24)
 


<?php
if(rand(1,100) == 50)
{
  
// Код автоудаления
}
?> 

if(rand(1-это позиция, 100-каждое сотое обновление) == 50-а это что?)
Так строка, что удалиться не от времени, а от сотого обновления?
Я сейчас все сделал как Вы сказали, всё вроде бы работает нормально, объявление не стирается после обновления как было прежде, но в чём была причина я так и не понял.

   
 
 автор: FoMa   (20.06.2005 в 18:02)   письмо автору
 
   для: ded   (20.06.2005 в 17:56)
 

rand(a, b) - выбирает случайное число от "a" до "b" и если это число равно 50 то идет автоудаление... тоесть в данном случае шанс на удаление примерно равен 1%.

   
 
 автор: ded   (28.06.2005 в 18:51)   письмо автору
 
   для: FoMa   (20.06.2005 в 18:02)
 

Ну что ж такое, господа программисты подскажите, что препятствует удалению. Прикрепляю файл куда я вставил код автоудаления. Может кто подскажет, что не так?

Кратко опишу схему работы скрипта. В корневом каталоге у меня php файл с названиями категорий объявлений, в нём запись такого рода 13243244535::Недвижимость
В папке dat храняться php файлы с соответстующим id т.е
13243244535.php это файл где хранятся сами объявления.
там запись такого рода $uniqid::$date::$name::$mail::$sitename::$url::$city::$msg::$ip\r\n
Теоретически код удаления должен бы работать, а пракически он не работает.

   
 
 автор: cheops   (28.06.2005 в 22:53)   письмо автору
 
   для: ded   (28.06.2005 в 18:51)
 

А он в оригинале раскомментирован - или это рабочий файл - тогда нужно убрать комментарий.

   
 
 автор: ded   (29.06.2005 в 00:06)   письмо автору
 
   для: cheops   (28.06.2005 в 22:53)
 

Да раскоментирован, я просто пробовал его ставить в разные места, а вообще на сервере он стоит в самом конце. А это не может быть из-за того, что дата записана в id файле у меня в таком виде 12 июня 2005 13:45 может если было бы так ( 12 jun 05 13:45) сработало бы?

   
 
 автор: cheops   (29.06.2005 в 00:41)   письмо автору
 
   для: ded   (29.06.2005 в 00:06)
 

А структура файла "dat/$catid.php" какая? Смущает строка
<?php
  $content 
implode("",$lines);
?>

Может имелось в виду
<?php
  $content 
implode("\r\n",$lines);
?>

   
Rambler's Top100
вверх

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