Jump to content
php.lv forumi

PHP koda optimizēšana un security


orion

Recommended Posts

Varbūt kādam ir zināmi labi resursi par tēmu PHP optimisation un security. Gribās kkā, lai kods būtu optimāls un drošs, ne tikai strādājošs.

 

Vai varbūt arī te uz vietas kādam ir ko teikt par dotajām tēmām.

 

Par security - ir skaidrs, ka izmantojam register_globals OFF, ravējam no formu laukiem liekos simbolus, rakstam echo $kkas.' ir psc'; nevis echo"$kkas ir psc";

Izmantojam md5 neizpaužamu datu nodošanai un glabāšanai db u.c. vietās, kur svarīgi lai kāds kko neuzzin par daudz ((:

Kam vēl ir jāpievērš uzmanība??

Kamdēļ izmantojam <br> vietā <br />? kādas pirmajam var būt sekas?

Link to comment
Share on other sites

Nu ok, lai būtu, bet kā optimizē šādu koda gabalu??

<? 
$cat=$_GET['cat'];
if (!isset($cat)) { $cat='pirmaa'; }
if ($cat == 'pirmaa') {
$url=$_SESSION['jazik']."/main.php";
include $url;
}
else if ($cat == 'oper') {
$url=$_SESSION['jazik']."/oper.php";
include $url;
}
else if ($cat == 'wuk') {
$url=$_SESSION['jazik']."/wukoras.php";
include $url;
}
else if ($cat == 'agri') {
$url=$_SESSION['jazik']."/agri_es_celjos.php";
include $url;
}
else if ($cat == 'med') {
$url=$_SESSION['jazik']."/medinieks_duriks.php";
include $url;
}
------//---------dafig nafig kas -----------//-----------
else {$url=$_SESSION['jazik']."/main.php";
include $url; }

 

Kategorijas nesakriit ar failu nosaukumiem.

 

Veidot vienu masiivu ar atljautajaam kategorijaam un otru ar attieciigajiem linkiem? --> taalaak atlasiit attieciigo linku, bet ja nav atlasiijies - pieshkjirt savu?? hmz... Vai arii tas jaadara kkaa savadaak???

Link to comment
Share on other sites

Es taisītu to visu ar switch:

<?php
switch($_GET['cat']){
  case 'oper':
     $url=$_SESSION['jazik'].'/main.php';
     break;
  case 'wuk':
     $url=$_SESSION['jazik'].'/wukoras.php';
     break;
  case 'agri':
     $url=$_SESSION['jazik'].'/agri_es_celjos.php';
     break;
  case 'med':
     $url=$_SESSION['jazik'].'/medinieks_duriks.php';
     break;
  default:
     $url=$_SESSION['jazik'].'/main.php';
}
include($url);
?>

Link to comment
Share on other sites

Nuu, vaardusakot man sanaaca šāda variants:

 

<? $cat=$_GET['cat'];
$atljautie=array('pervaja', 'work', 'wuk','agri', 'med', 'kval');
$linki=array('pervaja'=>'/main.php','work'=>'/work.php','wuk'=>'/wukoras.php','agri'=>'/agri_es_celjos.php','med'=>'/medinieks_duriks.php' );
foreach($atljautie as $atlj){
if(isset($linki[$cat])){ $kategorija=$cat;}}
if(!isset($kategorija)){ $kategorija='pervaja';}
$url=$_SESSION['jazik'].$linki[$kategorija];
include $url; ?>

 

Liekas ka ir biku īsāk (: . Ņemot vērā ka in da real kategorijas ir ap 30 un to skaits tikai pieaugs. Kautkā nepatīk man šis manuālais stils, bet db diemžēl šim projektam nav pieejama...

 

A varbūt šis vēl nav tas optimālākais variants??

Paldies Aleksejs par savu variantu (:

Es tik nedaudz būtu pielabojis - respektīvi izlaižot $_SESSION['jazik'] - tjip pieliekot jamo tikai pašās beigās klāt. Tomēr mazāk vietas aizņem ((:

Edited by orion
Link to comment
Share on other sites

Kods ir mazāk rindiņās, bet katru reizi iziet cauri visam masīvam. Tas, manuprāt, nav optimāli (-;

Tālāk... Ja loti gribi tieši tā, tad es šo:

foreach($atljautie as $atlj){
  if(isset($linki[$cat])){
     $kategorija=$cat;
  }
}
if(!isset($kategorija)){ $kategorija='pervaja';}
$url=$_SESSION['jazik'].$linki[$kategorija];

izmainītu šādi:

$kategorija='pervaja';
foreach($atljautie as $atlj){
  if(isset($linki[$cat])){
     $kategorija=$linki[$cat];
     break;
  }
}
$url=$_SESSION['jazik'].$linki[$kategorija];

Jeb vēl īsāk:

$linki=array('pervaja'=>'/main.php','work'=>'/work.php','wuk'=>'/wukoras.php','agri'=>'/agri_es_celjos.php','med'=>'/medinieks_duriks.php' );
if(isset($linki[$_GET['cat']])){
  $url=$_SESSION['jazik'].$linki[$_GET['cat']];
}
else {
  $url=$_SESSION['jazik'].$linki['pervaja'];
}

 

Updeits: Tikko pats pārlasīju, ko sarakstiju...

Vai gadijumā nebiji domājis

foreach($atljautie as $atlj){

if(isset($atlj[$cat])){

$kategorija=$cat;

}

}

jo citādi nav jēga iet cauri tam "ayļauto" vērtibu masīvam...

Edited by Aleksejs
Link to comment
Share on other sites

Kods ir mazāk rindiņās, bet katru reizi iziet cauri visam masīvam. Tas, manuprāt, nav optimāli (-;

Ko tu ar to domaaji?? Nuu tjipa ir divi masiivi - katram, lai ielaadeetu lapu, izskrien vienu reizi cauri. Pirmo, lai paarbaudiitu vai kategorija atljauta - otro, lai atrastu incluudojamo failu.

 

Kgan - vispaar man tas tavs switch variants patiik. Eertaak papildinaat + paarskatāmāks. Un pieljauju ka arī ātrāks.

Link to comment
Share on other sites

Par ātrumu krieviski:

http://www.codenet.ru/webmast/php/speed/

12261[/snapback]

Hee, incants rakstinjsh. Apakshaa pie komentaariem tur ir piemeeri ar HTML koda iizvadiishanu ar echo, un aarpus PHP. Tur bijs ljooti juutama atshkjiriiba, bet es patesteeju uz savas kastes - ieguvu ljooti liidziigus rezultaatus pa 10x palaizhot katru no testiem seciibaa: 123; 123; 123... u.t.t. Praktiski ļoti maza atšķirība man parādījās. Varbūt pie vainas jamam ir IIS 6, man stāv Apache 1.3

Link to comment
Share on other sites

Hee, incants rakstinjsh. Apakshaa pie komentaariem tur ir piemeeri ar HTML koda iizvadiishanu ar echo, un aarpus PHP. Tur bijs ljooti juutama atshkjiriiba, bet es patesteeju uz savas kastes - ieguvu ljooti liidziigus rezultaatus pa 10x palaizhot katru no testiem seciibaa: 123; 123; 123... u.t.t. Praktiski ļoti maza atšķirība man parādījās. Varbūt pie vainas jamam ir IIS 6, man stāv Apache 1.3

 

Ko nozīmē ļoti līdzīgi rezultāti? :) Ja teiksim skripts izpildās 2 milisekundēs bet tu panāc uzlabojumu uz 1ms, cilvēkam jau neko tas būtiski neizsaka, taču atrdarbības uzlabota pa 50%. Un ja parēķinam jau uz 100 vai 1000 paralēliem lietotājiem / pieprasījumiem - šī "praktiski ļoti maza atšķirība" pieaug jau krietni manāma gan servera noslodzes gan jau jūtamas bremzes ziņā.

Link to comment
Share on other sites

Tātad joka pēc vēl nedaudz patestējos. ---rezultāti-->

Tests1

<?php session_start();
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$t_start = getmicrotime();
for ($i = 1; $i <= 100000; $i++)
{
echo "<i>";
echo $i;
echo "</i> ";
}
echo "<br>";
$t_end = getmicrotime();
$t1 = $t_end - $t_start;
echo 'Laiks bija: '.round($t1,4);?>

tests2

<?php
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}

$t_start = getmicrotime();
for ($i = 1; $i <= 100000; $i++)
{
?><i><?= $i;?></i> <?
}
echo "<br>";
$t_end = getmicrotime();
$t2 = $t_end - $t_start;
echo 'Laiks bija: '.round($t2,4);
?>

tests3

<?php
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$tstr = "";
$t_start = getmicrotime();
for ($i = 1; $i <= 100000; $i++)
{
$tstr .= "<i>".$i."</i> ";
}
echo $tstr;
echo "<br>";
$t_end = getmicrotime();
$t3 = $t_end - $t_start;
echo 'Laiks bija: '.round($t3,4);?>

 

rezultāti pēc desmit testiem secībā t1->t2->t3->t1->t2->...

 

|Tests1 | Tests2 | Tests3 |

=================

|9,1524 |9,4372 |4,6406 |

|9,0501 |6,5130 |13,0046|

|7,8540 |3,9836 |5,3020 |

|9,4327 |8,1066 |4,5298 |

|5,2410 |6,8997 |5,1321 |

|8,6352 |8,9852 |6,2694 |

|10,1446|9,5270 |9,8356 |

|11,5732|11,3878|11,0793|

|9,3089 |11,7769 |8,1910 |

|8,5403 |11,0443 |11,7231|

vidēji:|8,4932 | 8,7661 | 7,9438 |

 

Pirmo reiz testējot - dabūju vēl līdzīgākus rezultātus.

Interesanti, ka trešajam testam pieder gan labākais, gan arī sliktākais rezultāts.

 

Domāju ka būs jāuztaisa kāds advancētāks testiņš un tad vēlreiz jāpatestē.

Link to comment
Share on other sites

×
×
  • Create New...