Jump to content
php.lv forumi

Venom

Moderatori
  • Posts

    1,918
  • Joined

  • Last visited

Posts posted by Venom

  1. arī šis te nostrādās:

    if (!($result = @mysql_query('select 1+1')))

    {

    echo 'notikusi liela nelaime';

    }

    pēc php "labās rokas" likuma tik novērtēts mysql_query('select 1+1') gabals.

    te var būt 2 rezultāti:

    a) atgriež false - nepareizs query

    B) atgriež "tukšu" vērtību - query izpildās, bet neatgriež resursa pointeri

    abos gadījumos @ nospiež kļūdas un $result tāpatās iegūst "tukšu" vērtību (NULL, vai tukšvirkni - '', fvz). Tukšvērtības iekš if pārtop par boolean false.

  2. ārejais divs: viņam nosaki text-align:center un line-height:xx vai text-vertical-align:middle, lai novietotu saturu centrēti pa horizontāli un vertikāli (line-height: automātiski ieslēdz block elementu satura centrēšanu pa vert.)

    iekšējais divs: divs, kā divs, iekš tā jau tie aligni.

    bet kas būs ar widthiem man gan nepras'

  3. a) $mas['name']=$_POST['name'];

    man jautājums - kam tev liekais dublējošais mainīgais?

     

    B) iekš tā php ir divas noderīgas funkcijas - var_dump, kas pasaka visu par un ap mainīgo (tipu etc) un print_r (print recursive) - kas izvada visas masīva/objekta apakšvienības. Vienīgais, izvada to "DOS" formatējumā, kuru apēd HTML, tāpēc /me lieto šādu te salikumu:

     

    echo '<pre>';

    print_r($_POST);

    echo '</pre>';

  4. btw> par string variantu-> var nomainīt mainīgos arī pēc visas templāšu inklūdošanas; saglabāt templ. mainīgos iekš datubāzes utml.

     

    <?php

    ob_start();

     

    inckļūdojam tempātes, visādi citādi izvadām info ar templāšu mainīgiem, e.g.

     

    echo '@CURRENT_DATE@';

     

     

    pašās beigās:

     

    $out=ob_get_clean();

     

    šeit norepleisojam ar visu ko vajag

    Te, starp citu var arī ar preg_match dabūt tikai to templāšu mainīgo nosaukumus, kuri tiešām ir nepieciešami un apstrādāt/iedabūt tikai tos.

     

    un beigās izvadām

     

    echo $out;

    ?>

     

    balstās ar uz to, ka php var noredirektēt visu html izvadu buferī (ob_start() == output buffering start) un pēc tam visu uzreiz no turienes iegūt mainīgajā (ouput buffering get buffer and clean it)

  5. str_replace "atgriež" textu, resp.

    $out=str_replace(ko, ar ko, kur)

    $out=str_replace(ko, ar ko, $out)

     

     

    nb: cik saprotu, tev db kolonnas būs nosauktas tāpat kā templāšu mainīgie?

    padomā par šādu variantu:

     

    $art=mysql_fetch_assoc($art_query);
    foreach($art as $key=>$value)
    $out=str_replace('@'.$key.'@',$value,$out);

     

    droši vien, ka no

    while($art=mysql_fetch_assoc($art_query);)

    {

    ... str_replace()

    }

     

    nekāda labuma nebūs - jo jau pie while pirmās izpildes visi templāšu mainīgie tiks nomainīti

     

    Par manu variantu: mysql_fetch_assoc atgriež kolonnu vērtības associatīvajā masīvā, kur indeksi ir kolonnu nosaukumi (sk. print_r($art)), un, starp citu, vispārēji ātrāk strādā. + Nav jāpārdefinē mainīgie. Kolonnas nosaukums tiek iedzīts iekš $key un tas pataisīts par augšējo reģistru => mysql colonna `date` kļūst par @DATE@.

  6. Kaut kad taisīju testus, file() tomēr bija ātrāks (turklāt + ir tāds, ka tu iegūsti masīvu ar rindām tālākai apstrādei).

    Kaut gan, jaunajās versijās varētu būt mainījies.

  7. šis te variants mani it īpaši pārsteidza:

    .kreisais {

    border:''; margin

     

    '' iekš css? turklāt kā nonullējošā vērtība?

     

    DIViem ir tāda problēma, ka uz IE padding, border un margin "neatskaitās" nost automātiski. Tāpēc ja tev ir sautrs, kas pēc platības pārsniedz block elementa width-border-margin-padding, tad tev viņu pletīs plašumā/augstumā (jānosaka pareizs width). Resp. var būt, ka tev nav atstarpe no "body" (augšas uz leju), bet gan atstarpe no "elementa" (no tā uz augšu).

    Kamēr projektē div-layoutu, noder likt div {border:1px solid #cccccc}

  8. Ūja, ūja! Var tač' vieglāk, ar foreach konstrukciju:

    $action=array('Galerija'=>'gallery','Jaunumi'=>'news');
    //var arī tā
    $action['buj']=>'faq';
    
    foreach($action as $arr_key=>$arr_val)
     echo '<a href="'.$arr_val.'.php">'.$arr_key.'</a>';

     

    see also:

    in_array(), array_keys(), array_values(), array_key_exists(), array_shift(), array_pop(), list(), each()

     

    att. uz 2 pēdējiem

    while(list($arr_key,$arr_val)=each($action))

    analoģisks foreach(), bet strādā lēnāk

  9. Ņu, dažiem strādā tāda funkcija kā memory_get_usage(), ar to skaisti varēja paskatīties.

     

    /me lieto unset pārsvarā 3 gadījumos:

     

    Gadījums 1: type juggling

    Kaut kur kodā $tmp=array(); pēc tam gribu izmantot $tmp kā ordināro tipu (str,float,int,bool). Lai nebūtu kļūdu/notīšu, taisam unset($tmp); un bliežam savu $tmp='a,jh;fdsf';

     

    Gadījums 2: lielu failu ielasīšana un bilžu ģenerēšana.

    pēc dafaulta php ir ierobežots oper. atmiņas daudzums (kā nu kuram, bet parasti 8mb)

    Teiksim, man jāapstrāda liels fails (6 mb) un vēl jāuztaisa kāda 1024x768 bildīte ar image* funkcijām kas arī ļoti labi havo RAMu, tad pēc faila apstrādes tā mainīgajam taisu unset. Ja jāapstrādā divi faili, tad vienkārši otro ielasu tai pašā mainīgajā, kas automātiski atmet pirmo vēŗtību un atbrivo RAMu. Bildēm obligāti taisu imagedestroy() (tas kā fclose() - varbūt nav vienmēr obligāts, bet labāk būtu ja iraid).

     

    Gadījums 3: mainīgo "at"iniciēšana

     

    $canWrite=1;

    $canDelete=2;

     

    if (!$isAdmin)

    unset($canWrite, $canDelete);

    ....

    if (!empty($canWrite))

    switch($canWrite)

    {

    case 1:

    //level 1

    break;

    case 2:

    //more options, level 2

    break;

    }

     

    bet šo gan tā paretāk (un piemērs arī so-so)

  10. a) $fails = file('fails.txt');

    foreach($fails as $x){

    echo $x;

    }

     

    ir slikti un lēni, labi un ātri ir

     

    $fails=file('fails.txt');

    echo @implode('',$fails);

     

    B) par tēmu.

    iekš htmla tev mainīgie tomēr jāizvada, jo teksts tiek ielasīts kā teksts, un $var tajā tik un vienīgi kā dolārzīme un teksts "var".

    Var izmantot vairākus variantus. Universālākais no tiem tomēr ir un paliek

    <b><?php echo $abols;?></b>

    ja ir eneiblots short_open_tag, tad augstākminēto var rakstīt kā

    <b><?=$abols;?></b> vai pat <b><?=$abols?></b>

     

    variants ir labs, bet ne visur, jo ne īpaši pārskatāms būs tāds variants:

    <a href=mailto:<?=$auth_mail;?>>$author</a> + iekš dreamweavera vai citiem WYSIWG tev rādīsies <?php ikoniņa, bet nebūs saprašanas, kam tieši tur jābūt.

     

    Otra pieeja attālinās no php izvadīšanas un balstās uz unikāliem mainīgo nosaukumiem (lai nesakrīt ar kādu tekstu), piem tev ir teksts:

    <b>%abols%</b>

    to var nomainīt ar str_replace('%abols%',$abols,$teksts);

     

    piem., ja tev visi mainīgie glabājas masīvā, kā

    $repl['abols']='antonofka';

    $repl['bumbieris']='saldais';

    tad var laist

    foreach($repl as $var=>$value)

    $text=str_replace('%'.$var.'%',$value,$text);

     

    Tāpat ofcourse var mainīt arī $abols vai $abols$, pats izdomā kādu simbola un mainīgā nosaukuma salikumu, kas nevarētu sakrist ar kādu tekstu, un tev pašam būtu skaidrs, ka tur iraid templāta mainīgais. Vēlams "mainīgo nosaukums" rakstīt lieliem burtiem, lai tie uzreiz izceltos (tāpat kā to ir ieteicams darīt ar konstantēm) - %ABOLS%, <a href=mailto:%AUTH_MAIL%>%AUTHOR%</a>.

    Turklāt pēc šāda varianta iekš DreamWeavera tu uzreiz redzēs kam kur jābūt. un vari noformēt tekstu "vizuāli".

  11. izvadam ar html vai tīri grafiski, sabīdīt tās vienu citai blakus?

    ja otrais, tad skatāmies Image Functions. Ideja - iegūt no visām bildēm maksimālo augstumu, summāro platumu. Uztaisīt "backgroundu" ar iegūtem parametriem un tad likt

    bildes ar imagecopy() vai tml. funkciju.

    Kā taisīt bildes ar php jau tika aprakstīts šajā forumā.

  12. session_id() - atgriež (ja tiek palaista bez parametriem) /uzstāda sessijas identifikātoru (ja tas tiek nodots kā parametrs)

     

    session_start() iesāk sessiju ar aktīvo identifikātoru

     

    es parasti izmantoju variantu:

     

    if (!session_id())

    session_start();

     

    gadījumā, ja fails tiek inklūdots citā, kur jau iesāknēta B) sessija.

  13. ip tur bija kaut kā

    zona.valsts.reģions.lietotājs, vismaz uz to pusi

    go google

     

    ko nozīmē bankas _pašas_ droši vien jau grāmatveži nesēž un neprogrammē. nolīgst kādu pamatīgu IT firmu, kas arī izstradā risinājumu un nodrošina suportu, pēc tam visus, kas programmēja, nošauj, lai neizpauztu algoritmu ;)

  14. A ja kukiji ir atslēgit, tad nekā ar sesijām ...

    pilnīga nesaprašana par sessiju mehānismu

     

    man vienmēr iekš php.ini session.use_cookies=0

    kad tiek pastartēts php, kas pieprasa atvērt sesiju, tad _serveris_ noģenerē katram tādam lietotājam unikālu identifikātoru (balstoties uz IP, pilno pārlūka stringu, pārlūka programmas handle utml, vai nu arī atverot permanento socketu, kā nu kurais). Šis hashs tiek nosūtīts atpakaļ brauzerim, kurš var, bet var arī nenēsāt sev pats to līdzi (operatīvajā atmiņā, nododot to tikai ar slēpto HTTP headeri; vai arī caur $_GET; dažs arī cūkijā utml), bet ja pārlūks nenodod šo identifikātoru, tad serveris to ģenerē no jauna, pēc tā paša algoritma - un loģiski, ka arī tad viņam jāsakrīt ar iepriekšējo.

    Attiecīgi katram hasham tiek izveidots failiņš _uz servera_ (sk. temp direktoriju, vai kur viņš to veido jums - session~path), kurā tiek serializēts $_SESSION masīva saturs. Pieslēdzoties klientam ar kādu hashu, tiek pārbaudīts, vai tāds failiņš eksistē, un ja - jā - tad tiek unserializēts tā saturs php pieejamā $_SESSION masīvā (tātad, unikāli katram lietotājam). Ja tāda failiņa nav, tad tiek vērta vaļā jauna sesija (ar jaunu hashu).

    Paralēli iet arī cits process, kas nodzēš novecojušo sesiju failus.

     

    Jā, cilvēki dāžreiz session.use_cookies=1, _ja_ sessijās glabājas "nekonfidenciāla" informācija.

     

    Jā, kūkijos glabā sessijas identifikātoru, lai atsāktu to pašu sesiju, ja pārlūks tika aizvērts. Jo, ja pārlūks tika aizvērts, pie jaunas konekcijas "ienākošie" parametri hashu ģenerēšanas algoritmam būs citādi (cits ports, handle un hvz kas vēl).

    Cūkijos saglabāto identifikātoru pirms sessijas uzsākšanas ar session_start ekskluzīvi var iestatīt ar session_id funkciju, vai arī nodot kā PHPSID?=šurum-burum (PHPSID vietā jūsu sessiju mainīgā nosaukums).

×
×
  • Create New...