Autor | Zpráva | ||
---|---|---|---|
honzaik Profil |
#1 · Zasláno: 29. 9. 2011, 16:49:00
čau mám udělanej script kterej mi logne každýho kdo zadá heslo:
function zapis() { $text = "Někdo napsal jako heslo: <b>".$_POST["heslo"]."</b> v <b>".date("H:i:s")."</b> dne <b>".date("d.m.Y")."</b> z IP: <b>".ip."</b>.\n<br><hr>"; $log = fopen("log.php", "a+"); fwrite($log, $text); fclose($log); } a chci aby mi to v tom logu posunulo např <span> s nějakym ID, nebo jak docílit toho, aby ten $text byl mezi nějakýmu dvěma prvky, protože takhle mi to loguje dolu, a když to dám s parametrem "r+" tak mi to zase posune celej obsah "log.php" takže hlavičku atd. takže jde nějak jednoduše (protože jsem začátečník a nechci používat scripty který nechápu) docílit toho aby se $text přidal mezi nějaký dva prvky např přechozí log, ale aby to nebylo nakonci a uplně nahoře před hlavičkou. |
||
Chro Profil |
#2 · Zasláno: 29. 9. 2011, 18:56:27
<?php $hlavicka = '...'; $soubor = 'log.php'; if (file_exists($soubor)) { $stare_zaznamy = file_get_contents($soubor); $stare_zaznamy = str_replace($hlavicka, '', $stare_zaznamy); } else { $stare_zaznamy = ''; } $novy_zaznam = '...'; file_put_contents($soubor, $hlavicka.$novy_zaznam.$stare_zaznamy, LOCK_EX); ?> |
||
honzaik Profil |
#3 · Zasláno: 29. 9. 2011, 20:57:13
super díky už to funguje ale ted mám problém, protože jsem to chtěl dát do funkce log() a napíše mi to
Fatal error: Cannot redeclare log() pravděpodobně musí bejt něco mezi těma závorkama u log("tady") a to je další problém protože já jsem nikdy nepochopil (a to už jsem četl hodně tutoriálů na JS a PHP) k čemu je ta závorka u funkce, kdyby se někdo obětoval a napsal mi sem stručnej popis, protože já to nejsem schopen z ničeho vyčíst |
||
honzaik Profil |
#4 · Zasláno: 29. 9. 2011, 21:02:55
mám to takhle
<? function log() { $hlavicka = " <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'> <html> <head> <script type='text/javascript'> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-25300344-3']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <meta http-equiv='Content-Type' content='text/html; charset=windows-1250'> <link rel='stylesheet' type='text/css' href='./css/style.css'> <script src='./js/index.js'></script> <title>Praktika na ? </title> </head> "; $soubor = "./log.php"; if (file_exists($soubor)) { $stare_zaznamy = file_get_contents($soubor); $stare_zaznamy = str_replace($hlavicka, "", $stare_zaznamy); } else { $stare_zaznamy = ""; } $novy_zaznam = "TEST\n<br>"; file_put_contents($soubor, $hlavicka.$novy_zaznam.$stare_zaznamy, LOCK_EX); } log(); ?> |
||
Mike8748 Profil |
#5 · Zasláno: 29. 9. 2011, 21:43:13
honzaik:
nemůžeš to dát do funkce log() protože taková funkce již existuje v php (počítá logaritmy) pokud na názvu své funkce fakt trváš tak jedině přes jmenné prostory (v php 5.3) |
||
honzaik Profil |
#6 · Zasláno: 29. 9. 2011, 22:27:08
ahá tak to jsem nevěděl, dík :D, už to funguje a ještě bych někoho poprosil jestli by mi k tomu něudělal nějaký komentář, moc jasně nechápu řádky 27 až 35
|
||
Chro Profil |
#7 · Zasláno: 29. 9. 2011, 22:47:07
honzaik:
Doporučuju pojmenovávat vlastní funkce s nějakým prefixem nebo postfixem. Já to dělám např. takhle (my = moje): my_getgps(), my_createimage(). Je to přehlednější. K řádkům 27 až 35. Když bude existovat soubor se záznamy, načti jeho obsah do proměnné a odstraň hlavičku. Pokud soubor neexistuje, definuj prázdnou proměnnou, aby její neexistence později případně nevyvolávala ve funkcích chyby typu notice (ve file_put_contents). |
||
honzaik Profil |
#8 · Zasláno: 29. 9. 2011, 23:17:20
dík, už to jakž takž chápu, akorát mě napadlo, že bych nastavil aby se ten soubor log.php za den přejmenoval na nějakou hodnotu, která by se měnila, např date(d_m_Y), ale nevím jak nastavit ten timeout a vůbec jak by se to spustilo, nemáte nějaký nápad? jo a funkci set_time_limit() jsem zkoušel a ta je zakázaná na mém hostingu, takže jestli se někomu chce mi poradit tak do toho :D
|
||
Chro Profil |
#9 · Zasláno: 29. 9. 2011, 23:38:28
To jsem moc nepochopil, co a jak měnit. Timeout jsi myslel timestamp? Zkus se rozepsat v bodech, co by to postupně mělo dělat, čím víc detailů, tím lépe.
Abych nezapoměl. Závorky u funkce vymezují oblast pro parametry, tzn. s jakými hodnotami má funkce pracovat, případně jak s nima pracovat. Třeba: <?php muj_kalkulator($prvni_cislo, $druhe_cislo, $co_s_nima) { if ($co_s_nima == 'sečti') { return $prvni_cislo + $druhe_cislo; //return vrací výsledek funkce k dalšímu zpracování } } echo muj_kalkulator(5, 2, 'sečti'); ?> |
||
Honzaik Profil * |
#10 · Zasláno: 29. 9. 2011, 23:48:46
Jj ta () mi ted z ničeho nic došla:D, ale k tematu. No aby ten soubor log, obsahoval jen data za určitej den, takze by se přejmenoval na to datum, ale jak udelat to aby se na konci dne přejmenoval. Jako rename("log.php", date("d-m-Y").".php") neni problem asi ale jak nastavit aby se ten soubor na konci dne teda renamenul a ted předchozí script by automaticky vytvoril novej a pak by to šlo dokola.
Takzě stručně, jak udelat, aby se v souboru funkce spustila např za 24h od vytvoření, je to teda vůbec možné provést? |
||
Tori Profil |
#11 · Zasláno: 30. 9. 2011, 00:46:03
Honzaik:
Použila bych asi takovýhle postup: - Jméno souboru: $log = [dnešní datum ve formátu Y-m-d] + ".log" - Funkcí touch soubor $log vytvořím, pokud neexistuje (myslím, že by to mělo být bezpečnější pro paralelní přístup, než fopen/fclose). Tím odpadne přejmenovávání nebo kopírování souboru. (tohle by se mělo provést jen jednou na začátku skriptu) - Zapíšu data (všechno dohromady na konci skriptu, nebo pokaždé když je zavolaná logovací funkce. Osobně bych data k zapsání ukládala do proměnné a do souboru je zapsala až při ukončení běhu skriptu, viz funkce register_shutdown_function.) |
||
honzaik Profil |
#12 · Zasláno: 30. 9. 2011, 07:33:48
Já ale používám řešení, ktere mi doporučil Chro, pro mě je to to, co jsem hledal, ted jen jak nastavit vykonání přikazu jednou za 24hodin, jestli je něco jako interval v js a spustilo by se to treba o pulnoci toho dne...
|
||
okolojdouci Profil * |
#13 · Zasláno: 30. 9. 2011, 07:41:09
honzaik:
„jak nastavit vykonání přikazu jednou za 24hodin“ Existuje nástroj CRON, kde si můžeš nastavit automatické spouštění php souborů. Jeho dostupnost na hostinzích je různá - někde k dispozici není, někde je za příplatek, někde zadarmo. |
||
honzaik Profil |
#14 · Zasláno: 30. 9. 2011, 08:35:48
Díky podívám se na to.
|
||
honzaik Profil |
#15 · Zasláno: 30. 9. 2011, 11:20:11
Jj cron je to co potrebuju dik.
|
||
honzaik Profil |
#16 · Zasláno: 1. 10. 2011, 00:45:40 · Upravil/a: honzaik
mám ted problém s cronem a jakoby nastavením cesty spíše, mám soubor rename.php ve kterém je
<?php $newname = "neco.php"; $oldname = "log.php"; rename( $oldname, $newname); ?> a ten mám když se připojím k ftp celkové ve složce /public_html/praktika/rename.php a na mém webhostingu, je to 000webhost.com kdyb to chtěl někdo zkusit, je tohle ve ftp detailech a tohle při nastavení cronu jak tam mám dopsat tu cestu? a stačí cronu ten soubor tak jak je nahoře? |
||
Chro Profil |
#17 · Zasláno: 1. 10. 2011, 10:46:00
honzaik:
Možná by ti stačilo, aby návštěvník, který přišel např. ve 23:56 se zapsal do log.php. A ten co příjde po půlnoci, třeba v 0:14, archivoval log.php do souboru den.mesic.rok.php a zapsal se do nového log.php. <?php /* nastaveni */ $hlavicka = <<< EOT <html> <head> <!-- nalezitosti --> </head> <body> EOT; //i tak lze zapsat HTML do promenne $konec_html = "</body>\n</html>"; $soubor = 'log.php'; /* log soubor neexistuje? vytvor ho */ if (!file_exists($soubor)) { file_put_contents($soubor, $hlavicka.$konec_html, LOCK_EX); } /* nacti nove a starsi zaznamy */ $novy_zaznam = "...\n"; $starsi_zaznamy = file_get_contents($soubor); $starsi_zaznamy = str_replace(array($hlavicka, $konec_html), '', $starsi_zaznamy); /* kdyz je novy den, archivuj log */ $dnesni_datum = date('d.m.Y', time()); $soubor_datum = date('d.m.Y', filectime($soubor)); if ($dnesni_datum != $soubor_datum) { rename($soubor, $soubor_datum.'.php'); $starsi_zaznamy = ''; //starsi zaznamy byly, archivovany, vymaz je pro novy log soubor } /* ukladame novy zaznam */ file_put_contents($soubor, $hlavicka.$novy_zaznam.$starsi_zaznamy.$konec_html, LOCK_EX); ?> |
||
honzaik Profil |
#18 · Zasláno: 1. 10. 2011, 12:13:35 · Upravil/a: honzaik
hm já bych byl radši pro ten cron, protože ten mi bude v budoucnu užitečnej, to přejmenovaní použiju, ale mám k tmu dotaz co znamená to <<<EOT a na konci EOT?
a ještě to /* log soubor neexistuje? vytvor ho */ if (!file_exists($soubor)) |
||
Tori Profil |
#19 · Zasláno: 1. 10. 2011, 12:29:20
honzaik:
„co znamená to <<<EOT a na konci EOT?“ "heredoc" zápis řetězce. Funguje stejně, jako řetězec v uvozovkách (=názvy proměnných se nahrazují jejich hodnotou), ale není potřeba escapovat uvozovky. |
||
honzaik Profil |
#20 · Zasláno: 1. 10. 2011, 12:31:15
díky za vysvětlení
|
||
honzaik Profil |
#21 · Zasláno: 1. 10. 2011, 12:36:06
bych potřeboval vědět to, jak je cesta v tom cronu... jako jestli je /home/"ten_nick"/ a v tom ta složka public_html do který to uploaduju nebo jestli to je rovnou /home/"ten_nick"/ a zde uploaduju
|
||
Tori Profil |
#22 · Zasláno: 3. 10. 2011, 21:42:02
honzaik:
Pokud neznáte cestu ke skriptu ale jen jeho url, zjistíte ji např. tímto echo __FILE__; |
||
honzaik Profil |
#23 · Zasláno: 3. 10. 2011, 22:48:23
už jsem to zjistil ale ted prostě ten cron nefunguje, stačí cronu dát cestu k tomu soboru php, ve kterém je příkaz? nebo to musí bejt jinak? máte s tím někdo zkušenosti?
|
||
Časová prodleva: 13 let
|
0