Как трябва да се получи ?

dakata__92

Super Moderator
Имам всичко нужно за въвеждане на информация в txt документ и като се запише да я изведа . Питането ми е има ли начин да трия нещо в txt файла и примерно да го автоматизирам на всеки 48 часа да се трият автоматично . На сайта си нямам часовник и въвеждам информацията така :
PHP:
<?php
if(isset($_POST['submit'])){
$fileime = "see.txt";
$time = date('D, d/M/Y H:i:s [+2 часа времева зона]');
$ip = htmlspecialchars($_SERVER['REMOTE_ADDR']) ;
$abonat = htmlspecialchars( $_POST['abonat']);
$inf = "
$time
$abonat - $ip";
$fp = fopen($fileime, "a");
fwrite($fp, $inf );
fclose($fp);
{
echo "";
}
}
?>
 
Искаш да изтриеш цялото съдържание на файла, или само някаква част от него?

И в двата случая виж в хостинг админ панела си за "Cron jobs" - сървъра може да изпълнява някаква задача регулярно и автоматично.

Ако ще трие целия файл:
1. Създаваш един РНР файл който ще изпълнява задачата:

<?php file_put_contents('', 'see.txt'); ?>

2. Задаваш в cron jobs пълния път до този файл и интервала през който да се изпълнява.
 
http://php.net/manual/en/function.filemtime.php


+ 48 часа ( 48 * 60 * 60 = 172 800 )

И когато часа на последната модификация + 48 е равна или по-малка от сегашното време тогава да използва x ( мисля ,че то беше за писане от начало на файла )


Предполагам ,че ще трябва да бъде нещо такова :

PHP:
<?php
if(isset($_POST['submit'])){
	$fileime = "see.txt";
	$time = date('D, d/M/Y H:i:s [+2 часа времева зона]');
	$ip = htmlspecialchars($_SERVER['REMOTE_ADDR']) ;
	$abonat = htmlspecialchars( $_POST['abonat']);
	$inf = "$time  \n\r
	$abonat - $ip\n\r\n\r";
	$file_time = filemtime($fileime)+172800; //  vremeto kogato e  redaktiran posledno +  48 chasa
	$now =  time(); //  segashnoto vreme
	
	if($file_time == $now || $file_time < $now)
	{
	
		$fp = fopen($fileime,"x");
	}else{
        	$fp = fopen($fileime, "a");
	}
        fwrite($fp, $inf );
	fclose($fp);
	{
		
	}
}
 
PHP:
$now =  time(); //  segashnoto vreme
Този ред немога да го разбера нещо ! time(); сегашното време нали го записвам по-горе с $time , защо е нужно втори път да въвеждам времевата информация или аз нещо не схващам . За "Cron jobs"съм на фрее хост и не го подържа на сайта който желая да сложа кода . Ще пробвам с горния пост , защото е уцелил перфектно това което желая като идея , но незнам дали ще се получи . :)
 
Стойността, който имаш на ред 4 в променливата $time, от гледна точка на типа данни, не е време и няма нищо общо с време и дати. От гледна точка на РНР, това е просто някакъв текст.

От друга страна time() връща число, което представлява броя на секундите от началото на UNIX епохата до момента и може много удобно да се използва за пресмятания, свързани с дати и време.

Този код няма да работи правилно, защото резултата от функцията filemtime се кешира автоматично от РНР. Преди всяко извикване на тази функция, първо трябва да се изтрие кеша чрез clearstatcache или:

PHP:
.....
clearstatcache(true, $fileime);
$file_time = filemtime($fileime)+172800; //  vremeto kogato e  redaktiran posledno +  48 chasa
.....

Поради работата с файлове и управлението на кеша, при по-голямо натоварване, този код ще работи бавно, едва ли ще го забележиш в твоя случай, но все пак не е оптималния вариант.
 
PHP:
<?php
if(isset($_POST['submit'])){
	$fileime = "see.txt";
	$time = date('D, d/M/Y H:i:s [+2 часа времева зона]');
	$ip = htmlspecialchars($_SERVER['REMOTE_ADDR']) ;
	$abonat = htmlspecialchars( $_POST['abonat']);
	$inf = "$time  \n\r
	$abonat - $ip\n\r\n\r";
                     clearstatcache(true, $fileime);
                     $file_time = filemtime($fileime)+172800; //  vremeto kogato e  redaktiran posledno +  48 chasa
	$now =  time(); //  segashnoto vreme
	
	if($file_time == $now || $file_time < $now)
	{
	
		$fp = fopen($fileime,"x");
	}else{
        	$fp = fopen($fileime, "a");
	}
        fwrite($fp, $inf );
	fclose($fp);
	{
		
	}
}
Ако го оставя на отделна празна страница тозии код и му поставя сесия за защита на страницата дали ще работи . В смисъл за да не ми бави да кажем отделна страница от сайта , една празна само с този сорс без никаква визуализация ?
 
Едва ли ще усетиш забавянето, за което говоря...

Между другото, точно след fclose имаш една отваряща и една затваряща скоби, които въобще не ти трябват:

fclose($fp);
{

}
 
exec каза:
Едва ли ще усетиш забавянето, за което говоря...

Между другото, точно след fclose имаш една отваряща и една затваряща скоби, които въобще не ти трябват:

fclose($fp);
{

}

Там имам echo което не съм показал в кода после и един else с който пренасочвам , но просто неисках да се обърквам ако случайно ми подадете код с такива нужни за проверка команди . Даже в първия пост съм въвел само празен echo . Някакви идеи как най-качествено да проверя кода който ми е подаден ? Аз мислех да го кача на хост да въведа в txt документ посредством форма някакво инфо , да намаля времето да кажем на 10 секунди да рефрешна и ще си каже дали ще го изтрие . А примерно ръчно как мога с кода от първия ми пост да трия определен ред на който да кажем съм въвел инфото във форма ?
 
PHP:
<?php
if(isset($_POST['submit'])){
	$fileime = "seevote.txt";
	$time = date('D, d/M/Y H:i:s [+2 часа времева зона]');
	$ip = htmlspecialchars($_SERVER['REMOTE_ADDR']) ;
	$abonat = htmlspecialchars( $_POST['abonat']);
	$inf = "$time  \n\r
	$abonat - $ip\n\r\n\r";
                     clearstatcache(true, $fileime);
                     $file_time = filemtime($fileime)+172800; //  vremeto kogato e  redaktiran posledno +  48 chasa
	$now =  time(); //  segashnoto vreme
	
	if($file_time == $now || $file_time < $now)
	{
	
		$fp = fopen($fileime,"x");
	}else{
        	$fp = fopen($fileime, "a");
	}
        fwrite($fp, $inf );
	fclose($fp);
	{
		
	}
}
Вижте какви грешки ми изпсва :
Код:
Warning: Wrong parameter count for clearstatcache() in mail.php on line 9

Warning: fopen(seevote.txt) [function.fopen]: failed to open stream: File exists in mail.php on line 14

Warning: fwrite(): supplied argument is not a valid stream resource in mail.php on line 18

Warning: fclose(): supplied argument is not a valid stream resource in mail.php on line 19
 
1. Махни параметрите от clearstatcache(true, $fileime) и нека остане само clearstatcache() явно версията на РНР която ползваш е преди 5.3

2. $fp = fopen($fileime,"x"); го промени на $fp = fopen($fileime,"w+"); - параметъра x се използва само в случай че искаш да създадеш файла, функцията няма да се изпълни. При w+ ако файла не съществува, ще (се опита да) го създаде, ще отвори файла за четене и запис и ще изтрие цялото съдържание, ако има някакво.
 
Ок получи се както ми каза , но изникна друг проблем . Когато въведа някаква информация през формата тя се презаписва върху старата , старата изчезва , а аз желая да се подрежда информасията една под друга и на всеки 48 часа да се премахва запис :
PHP:
<?php
if(isset($_POST['submit'])){        
$fileime = "see.txt";        
$time = date('D, d/M/Y H:i:s [+2 часа времева зона]');        
$ip = htmlspecialchars($_SERVER['REMOTE_ADDR']) ;        
$abonat = htmlspecialchars( $_POST['abonat']);        
$inf = "$time  \n\r        
$abonat - $ip\n\r\n\r";                     
clearstatcache();                     
$file_time = filemtime($fileime)+10; //  vremeto kogato e  redaktiran posledno +  48 chasa        
$now =  time(); //  segashnoto vreme                
if($file_time == $now || $file_time < $now)        
{                        
$fp = fopen($fileime,"w+");        
}else{                
$fp = fopen($fileime, "a");        
}        
fwrite($fp, $inf );        
fclose($fp);        
}
?>
Сега се получава така :
4023285m.jpg

трие се proba и се презаписна proba2 на същото място и като реча веднага да сложа proba3 примерно пък презаписва proba2 ...
4023286C.jpg

а искам да е така и всеки текст като завърши 48 часа от добавянето си да се премахва , а останалите НЕ завършили 48 часа да си седят :
4023287b.jpg
 
Аз предположих, че само за целите на теста си намалил времето на 10 секунди, но правиш тестовете бавно и затова винаги ти трие съдържанието. Но иначе работи, поне ме накара да тествам кода :)

Успех!
 
За целите на теста беше , но не съобразих , чеее ще започне да трие постовете толкова бързо :D Само още едно въпросче ако поставя още един txt файл в който да се записва информацията , но в него не желая да трия автоматично нещата как да построя кода . Мислех да е така :
PHP:
<?php
if(isset($_POST['submit'])){
$fileime = "see.txt";
$see = "seeme.txt";
$date = date('D, d/M/Y H:i:s [+2 часа времева зона]');
$abonat = htmlspecialchars($_POST['abonat']);
$inf = "
$date - $abonat \n\r\n\r";
$info = "
$date - $abonat";
clearstatcache();                     
$file_time = filemtime($fileime)+ 1800; //  vremeto kogato e  redaktiran posledno +  48 chasa        
$now =  time(); //  segashnoto vreme                
if($file_time == $now || $file_time < $now)        
{                        
$fp = fopen($fileime,"w+"); 
}else{ 
$fp = fopen($fileime, "a");

}
$fp1 = fopen($see, "a");
fwrite($fp, $inf );
fclose($fp);
fwrite($fp1, $info );
fclose($fp1);
}
?>
 
Точно така е, само можеш малко да подредиш кода - първо приключи с първия файл, после отваряй и работи с втория.
 
exec каза:
Точно така е, само можеш малко да подредиш кода - първо приключи с първия файл, после отваряй и работи с втория.
Писах го набързо мерси друже +1 имаш от мен :?: :?: :?:
 

Back
Горе