Jump to content
php.lv forumi

Par log failiem


Lynx

Recommended Posts

Tātad projekta attistībā esmu nonācis tik tālu, ka attiecīgi jebkura lietotāja kustība/darbība būtu jaiegrāmato. Un te rodas daži jautājumi par to kā labāk.

 

Attiecīgi iespējas ir ievadīt visu mysql datubāzē, nav tik liela pārskatāmība, jo gandrīz katrai darbībai jataisa savs datu ierakstu izkārtojums, bet iespējams vinē drošība un ātrums.

 

Otra iespēja likt iekš txt failiem un visu informāciju tik rakstīt iekšā failiņā ar lietotāja vārdu. Tagad jautājums kas ir ātrāk izmantot mysql(noslodze gan ir liela, jo visi dati ir mysql ierakstīti) vai arī txt faili būs ātrāki. Apstrādāt pēc tam viņus nevajadzēs.

 

Nākamais par Mysql drošību nebūtu jautāumu, bet kā ar txt. Serveris ir Windows NT ar Microsoft-IIS/4.0 Tāpēc cik noprotu .htaccess faili nedarbojas un man arī nesanāk nobloķēt pieeju txt failu apskatei. Ir kāds veids kā appiet šo problēmu?

 

Vel kādas idejas labākajam risinājumam?

Link to comment
Share on other sites

gandrīz katrai darbībai jataisa savs datu ierakstu izkārtojums
kapēc gan? Ja šāds logs nekalpo par kaut kādu datu restorēšanai (undo) un iepriekšēju darbību atcelšanu tad tak struktūru var pielāgot pilnīgi visam vienādu. Proti kaut kāds darbības identifikators / jūzeris kad veikta un pārējos datus jau var sabakāt vienā unikālā laukā (kaut vai seralizējot).

 

Tagad jautājums kas ir ātrāk izmantot mysql(noslodze gan ir liela, jo visi dati ir mysql ierakstīti) vai arī txt faili būs ātrāki. 
Ja jūzeri nav drausmīgi daudz (sistēmai nav jāņemas ar 1000 logfailiem) tad ātrāk manuprāt ir darboties failsistēmas līmenī, vēl jo vairāk ja pēcāk nav nepieciešami kaut kādi detalizēti izvilkumi.

 

Nākamais par Mysql drošību nebūtu jautāumu, bet kā ar txt. Serveris ir Windows NT ar Microsoft-IIS/4.0 Tāpēc cik noprotu .htaccess faili nedarbojas un man arī nesanāk nobloķēt pieeju txt failu apskatei. Ir kāds veids kā appiet šo problēmu?
Ja tas ir NT serveris (ne workstacija) tad NTFSam ir vairāklīmeņu failpermisijas, kam read, kam write utt.

Ja uztraukums ir par logfailu lasīšanu no weba, var tak logfailus turēt ārpus webroota! Un administratīvu pieeju organizēt kaut kā savādāk. Lai arī IIS ir pietiekami normālas tiesību menedžēšanas iespējas.

 

Galugalā ja patīk .htaccess kapēc nelietot Apache par webserveri? Ja php nepieciešama .asp procesēšana IIS var strādāt kā backends un apache kā transparents proxy redirektēt .asp requestus tam.

Link to comment
Share on other sites

Nu lielākā problēma ir tāda ka nav tieša pieeja webservera konfigurācijai, tāpēc meiģinu meklēt kautkādus apkārt ceļus.

 

Pēc idejas varētu rakstīt iekš php failiem un rīkoties šādi:

<?PHP

visi loga ieraksti

?>

 

Bet nakamais jautājums vai var vispār šādu failu nolasīt? fopen nedarbojās, ar include dati netiek izvadīti. + vēl kā vispār var ierakstīt iekš faila saglabājot šo struktūru? <?PHP teksts ?>

 

Varbūt citi varianti failu saglabāšanā.

Link to comment
Share on other sites

bubu, tavs variants nederēs, jo visu laiku jau starp <?PHP un ?> bus japievieno jauns teksts un pēc kāda laika tam visam būs jaizskatas šādi:

 

<?PHP

ieraksts 1

ieraksts 2

ieraksts 3

?>

 

Nevis:

<?PHP

ieraksts 1

?>

<?PHP

ieraksts 2

?>

 

+ vel neatradu veidu kā šādi ievadītus datus izvadīt uz admin paneli, vai nu met resourceid#1 erroru. Vai nekas nenotiek.

 

Izvērtējot + un - nolēmu nečakarēties ar flat failiem un jau uzrakstiju funkciju, kas visu vajadzigo ieraksta mysql datubāzē.

Link to comment
Share on other sites

failā jāraksta pirmajā rindiņā <?php exit; ?> un tālāk dati

lasīt - vai nu ar to pašu $lines=file() ar unset($lines[0]), vai arī ar visu

$fh=fopen($file,'r');

fgets($fh,4096); //izlaižam pirmo rindu

while($line=fgets($fh,4096))

{

apstrādājam log rindiņu

}

Link to comment
Share on other sites

Venom, tavs variants strādā tikai daļēji. Pirmā rindiņa tiek patiešām nogriezta, ja tā nav šī te <?PHP exit; ?> Ar exit; skripts neizpildās vispār. Izmeiģināju gan ar $lines variantu, gan variantus iekš php.net manuāļa. Ja tas kautko varbūt maina, tad šādi izskatās ievades kods:

function playerlog($message)
{
global $username; 
$log=fopen('./log_files/'.$username.'.php','a');
fwrite($log, "".date('Y-m-d H:i:s')." ".$message." \n "); 
fclose($log);
}

 

Un šādi es meiģinu izvadīt:

$fh=fopen('./log_files/'.$_GET['username'].'.php','r');
fgets($fh,4096); //izlaižam pirmo rindu
while($line=fgets($fh,4096))
{
echo"$line<br>"; 
}

 

Dati izskatās failā tieši šādi:

<?PHP exit(); ?>

2005-04-06 16:17:08 Action: Move From: 414 To: 415

2005-04-06 16:17:10 Action: Move From: 415 To: 515

Link to comment
Share on other sites

maza piebilde, un tad jau viss strādā

function playerlog($message)
{
global $username;
$file='./log_files/'.$username.'.php';
if (!file_exists($file))
{
 $fh=fopen($file,'w');
 fwrite($fh,'<?php exit; ?>'."\n")
 fclose($fh);
}
$log=fopen($file,'a');
fwrite($log, date('y-m-d H:i:s').' '.$message."\n"); 
fclose($log);
}

//lasīšana
$fh=fopen('./log_files/'.$_GET['username'].'.php','r');
fgets($fh,4096); //izlaižam pirmo rindu
while($line=fgets($fh,4096))
echo '<br />'.$line;
fclose($fh);

Link to comment
Share on other sites

Logu nemeiģinu inkludot, viss lapas kods attiecigi tajā vietā sastav tikai no tās tavas dotās rindiņas.

 

Arī jaunais lasīšanas variants nestrādā. Sāku domāt varētu būt problēmas ar php versiju. Jo kods tagad ir tīrs copy/paste. PHP Version 4.3.1

 

Ja <?php exit; ?> pirmaja rindaa ir, kods vispar neizpildās, ja izdēšam tad visi ieraksti tiek parādīti izņemot pirmā rinda. Pameiģināju arī preg_match izmantot lai nogalinatu lapu, nekā :( Uztaisīt kodu, ja nav padots noteikts mainigais tad die(); Un mainigo no interneta nevar padot, jo global variables off. Tāpat negrib iet.

 

Sāku apsvērt variantu pāriet atpakaļ uz mysql log failiem, darbojas bez problēmām.

Link to comment
Share on other sites

×
×
  • Create New...