Jump to content
php.lv forumi

Venom

Moderatori
  • Posts

    1,918
  • Joined

  • Last visited

Posts posted by Venom

  1. /me atkal te ar output bufferingu, resp. lai tik ir tas

    <html>

    <title>{title}</title>

    <body>

    {teksts}

    </body>

    </html>

    bet ā) ne iekš mainīgā bē) case-sensitive

     

    index.php jāizskatās šādi:

     

    <?php

    ob_start();

    ?>

    <html>

    <title>{title}</title>

    <body>

    {teksts}

    <?php

    include('cits.template');

    ?>

    </body>

    </html>

    <?php

    $htmls=ob_get_clean();

    foreach($template_mainīgais as $indekss=>$vertiba)

    $htmls=str_replace('{'.$indekss.'}',$vertiba,$htmls);

    echo $htmls;

    flush();

    ?>

     

    bet vispā man tās templātsistēmas ne visai

     

    NB: tēma tika plaši apspriesta, tāpēc vēlams apskatīt vismaz http://php.lv/f/index.php?showtopic=59 topiku (tur tālāk pa tēmu)

  2. šeit ir tas gadījums, kad kods jāatdala ne tikai no satura, un dizaina, bet arī dizaina saskarnes teksts no koda

    /me lieto tā:

     

    visur lapā augšā meta encoding=utf-8, iekš koda "interfeisa" teksts tiek ierakstītsangliski, caur funkciju (e.g. if (!isAuth) tr('Welcome, Guest!');

    - tas atbrīvo mani no koda rakstīšanas nepierastā tekstredeaktorā (rakstu joprojām pierastajā VenPadā). Līdz ar valodas pārslēgšanu pārslēdzu ulkošanas failus - un jau tie ir UTF-8 attiecīgā valodā (taisu ar SCiTe). Resp variants tāds: ja tulkojuma faila nav, izvadīsies "welcome" teksts angliski, kā tas ir ierakstīts iekš *.php faila, ja ir attiecīgs tr_*.php fails - tad skatās, ja tur ir attiecīgs tulkojums vārdam "welcome", tad to izvada, ja nav - bliež ik to pašu angļu.

     

    Neticu tam, ka ja iekš drīmwīvera uzliekutf-8 encodingu viš latviešu raksts normālā utf, bet krievu or whatever taisīs par &XXXX;. Tu laikam mēģini pie ievada lapai uzlikt attiecīgo windows-xxxx, bet pie izvada liec utf-8 un ceri, ka viss atrādīsies jo "utf-8 iekšā taču visi encodingi". Arī ievadam jānotiek iekš utf-8 - utfā _ir_ vairākas valodas iekšā - bet tām atkal katram simbolam citāds atbilstumsimbols.

     

    Kad taisa ievadu iekš windows-xxx encodingiem, tad jānodrošina arī lai ) intersa teksts būtu tājā pašā B) visādi inputi kaut ārī pieļaus iedīt dažādas valodas, vienu paņems pretī kā iestatīto windows-xxx, bet otru nokodēs pēc sava prāta. Ja tas viss notiks iekš utf-8, tad viss ievads tiks nokodēts pēc utf-8, neatkarīgi no valodas.

  3. up close & personal jautājiens ;)

     

    no redzētā:

     

    if(@$_SESSION['user'] && @$_SESSION['pass']){

    echo "<a href=\"?id=logout\">Logout</a><hr>ok! ".$user." ".$pass;

     

    $user un $pass iepriekš nav definēti

    arī tālāk:

    $_SESSION["name"] = $name; ...

    neredzu no kurienes tie rodas

     

    (!in_array($_SERVER['QUERY_STRING'],@$_SESSION['user'] && @$_SESSION['pass'])

     

    ko atrgiež (array() && array()), manuprāt false vai true, ja abos masīvos kaut kas bijis, bet nu nekādīgi ne kopmasīvu, ar + vēl varbūt, tomēr tik un tā - no kurienes tur query_stringam rasties?

     

    NB: you are logged out

     

    @$mainigais vietā vēlams izmantot !empty($mainigais)

  4. move tiek taisīts uz servera!

     

    klienta pārlūks pārsūta failu uz serveri, kur tas tiek noglabāts kādā upload (temporālā) direktorijā, tālāk move_ no tās aizbliež kur pastāvīgā (uz servera)

     

    no move_ vislielākā jēga ir uz vienu un to pašu servera direktoriju uploado vairāki lietotāji vai tas ir temp folderis, kur pati OS laiku pa laikam izdzēš failus. Jo pastāv, kaut arī maza iespēja, iespēja, ka var notikt tā, ka ar dažu milisekunžu atsarpi tiek uploadoti faili ar vienādu tmp nosaukum, vai piem. tiek uploadots fails, kuru OS tieši tai laikā izdzēš no tmp direktorijas un cits uzaplodojas ar to pašu nosaukumu.

    Manuprāt, tur tajā funkcijā tiek izmantots kaut kas līdzīgs failu hashoshanai - tiek salīdzināti ienākošā faila izmērs, tips etc ar tā, kas it kā ir noglabāts uz cietņa. iespējami, ka pat tiek izrēķināts kāds CRC/md5, lai pārliecinātos, ka arī saturs atbilst pilnībā.

  5. nez', nez', mēs mākam labāk.

    ir procesu optimizēšana un ir koda optimizēšana arī

     

    redzot kodu ar

    echo "<i>";

    rodas nepārvēlama vēlme aizvērt un vairs to neskatīties, jo tam jābūt vismaz

     

    echo "<i>$x"; lai tas būtu attaisnojams, kaut arī ātrāk būtu

    echo "<i>".$x, vai, kā arī pierāda testi augstāk (krieviskā lapā), jāraksta

     

    echo '<i>';

     

    f-ja getmicrotime?

    array_sum(explode(' ',microtime()));

  6. nē CREATE privilēģijas tiek izdotas tieši caur MySQL, nevis phpMyAdmin, bet, domājams, ka tās tev iraid, jo it kā jau sāk rakstīt (erorā teikts error writing, nevis not allowed to write vai tml). Jautājums - vai pareizi nokonfigurēts MySQL data-dirs, vai arī, ja viss stāv uz Linux - uz kurieni mapojas './datubaze/'.

    Neesi mēģinājis starp normāliem programmrīkiem? E.g. MySQL Front (http://www.mysql-front.com/), MySQL CC, EMS MySQL Manager?

  7. resp. līdzīgi nesenajam postam ar IP:

     

    $onl=180;//seconds 2 be considered online

     

    session_start();

    id=session_id()."\n";

     

    $period='/tmp/'.floor(time()/$onl).'.onl';

    $tmp=@file($period);

    if (!$tmp) $tmp=array();

     

    if (!in_array($id,$tmp))

    {

    $fh=fopen($period,'a');

    flock($fh,LOCK_EX);

    fwrite($tmpfile,$ip);

    flock($fp,LOCK_UN);

    fclose($fh);

    $tmp[]=$ip;

    }

     

    echo count($tmp).' apmekletajs lapa pedejas '.$onl.' sekundes';

  8. $onl=180;//seconds 2 be considered online

    $period='/tmp/'.floor(time()/$onl).'.onl';

    $tmp=@file($period);

    if (!$tmp) $tmp=array();

     

    $ip=(isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'').

    (isset($_SERVER['HTTP_X_FORWARDED_FOR'])?';'.$_SERVER['HTTP_X_FORWARDED_FOR']:'').

    (isset($_SERVER['HTTP_CLIENT_IP'])?';'.$_SERVER['HTTP_CLIENT_IP']:'')."\n";

     

    if (!in_array($ip,$tmp))

    {

    $fh=fopen($period,'a');

    flock($fh,LOCK_EX);

    fwrite($tmpfile,$ip);

    flock($fp,LOCK_UN);

    fclose($fh);

    $tmp[]=$ip;

    }

     

    echo count($tmp).' apmekletajs lapa pedejas '.$onl.' sekundes';

  9. es jau laikam šo atbildēju - pirms visas šīs padarīšanas (pēc inkclūdiem)

    izvadi print '<pre>'.print_r($_SESSION,1).'</pre>';

     

    ja tev tur nav 'name' elementa, tad nedrīkst vienkārši bliezt

    echo $_SESSION['name'], tāpatās kā nedrīkst uzreiz likt echo $variable, ja pirms tam mainīgam netika piešķirta nekāda vērtība

     

    tavā gadījumā pēc noklusējuma 'name' var būt teksts, resp. ja vārds netika ievadīts, tur jābūt tukšam stringam:

     

    if (!isset($_SESSION['name']))

    $_SESSION['name'];

    //else jau IR sessijā, bijis iepriekš ievadīts, resp. mainīgais ir definēts

     

    echo $_SESSION['name'];

  10. pats saprati, ko prasi? + mums te php, nevis flash forums un ko tur tur flashā meistaro nekādas saprašanas

     

    date, savukārt, ir f-ja kas var izvadīt laiku dažādā veidā, tur ir uzrakstīts - kā

    mēnesis/datums/gads četriem cipariem Stunda 24-formātā:minūtes ar 0 priekšā:sekundes

     

    ja gribi pamainīt - skaties php date() funkcijas parametrus

  11. ā) echo "$ref"; ir muļķība, jo pietiek ar echo $ref;

    bē) getenv atšifrējas kā get envinronment variable, t.i. datus saņem no $_ENV masīva, kas pieetams tikai uz paša server (lokāli), vai izņēmumgadījumos php kā command-line interface (CLI)

     

    pie tam referers ne vienmēr IR. T.i. tas parādās tikai kad uz labu atnāk otro reizi/nonāk caur linku.

    beigu beigās:

     

    $ref='';

    if (!empty($_SERVER['HTTP_REFERER']))

    $ref=$_SERVER['HTTP_REFERER'];

     

    echo $ref;

×
×
  • Create New...