Jump to content
php.lv forumi

PHP fopen


spynode

Recommended Posts

Es nodefineeju mainiigo teiksim $abols = "antonofka";

Es peec shadas sisteemas atveru failu

$out=fopen('template/articles.html',"r");

Failaa ir html ir teiksim shitaads teksts <b>$abols</b>.

Peec tam izvadot mainiigo echo $out; man izprinteesies antonofka? Es gribu html failus izmantot kaa templatus peec shaadas sisteemas. Man pagaidaam neko vispaar neprintee uz ekraana. Tuksh outputs sanaak.

Link to comment
Share on other sites

Pie reizes kads varetu atbildet uz jautajumu ko nozime shada kljuda - Resource id #3. Taadu izmet, kad es meegjinu izvadiit $out.

Tad veel jautaajums par echo. Ja es izvadu ar single quotes informaaciju tad mainiigie nestraadaa? piem echo 'aabols ir $abols'; ?

Edited by spynode
Link to comment
Share on other sites

Nu es no failiem neko nejēdzu, jo reti tos lietoju, bet, ja ko man vajag ar tiem darīt, tad lietoju šādu elementāru lietu:

$fails = file('fails.txt');
foreach($fails as $x){
    echo $x;
}

Funkcija file tavu failu samet masiva un tad ar foreach to to pa vienai rindinjai met araa, un katru rindu smuki var apstradat.

 

Apskaties php5, tam ir nakushas dazhas f-cijas prieksh failiem.

Link to comment
Share on other sites

Nu kā izvadīt faila saturu es izlobīju, bet mani interesē kā e varētu mainīgos ielikt izvades brīdī vietās kur vinji html failā ir izsaukti. Nu apm šitā

   $out=file_get_contents('template/articles.html',"r");
   while($art=mysql_fetch_array($art_query))
{
    $id=$art[0];
    $date=$art['date'];
    $caption=$art[2];
    $author=$art[5];
    $auth_mail=$art[6];
    $comments=comcount($id);
    $head=$art[3];
    $body=$art[4];
     echo $out;

un patšā articles.html failā ir tīrs html un pa vidu iesprausti tie mainīgie nu piem

<b>$date</b> <b>caption</b> <a href=mailto:$auth_mail>$author</a>

utt. Un lai izvada to informāciju atkarīgi no mainīgo vērtībām. Ceru, ka sapratāt mani. Kā to varētu panākt ?

Link to comment
Share on other sites

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".

Edited by Venom
Link to comment
Share on other sites

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);

Šādi nebūs vēl ātrāk?

 echo file_get_contents('fails.txt');

Edited by bubu
Link to comment
Share on other sites

Domaaju izmantot to str_replace koncepciju, bet shitas variants nezin kaadeelj negrib straadaat :

$out=file_get_contents('template/articles.html');
   while($art=mysql_fetch_array($art_query))
{
    $id=$art[0];
    $date=$art['date'];
    $caption=$art[2];
    $author=$art[5];
    $auth_mail=$art[6];
    $comments=comcount($id);
    $head=$art[3];
    $body=$art[4];
    str_replace(array("@DATE@","@CAPTION@","@AUTHOR@","@AUTH_MAIL@","@COMMENTS@","@HEAD@","@BODY@"),
                array($date,$caption,$author,$auth_mail,$comments,$head,$body), $out); //shitaads variants nestraadaa
    str_replace('@DATE@', $date, $out); //shitaads variants arii nestraadaa
    echo $out;

Edited by spynode
Link to comment
Share on other sites

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@.

Link to comment
Share on other sites

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)

Edited by Venom
Link to comment
Share on other sites

Izmēģinājos visādi, bet tie stringaa nekas nemaz nerepleisojas. Viņi tikuntā izvadās kā @CAPTION@ u.t.t. Tas ir dīvaini, jo stringu nu viņam vajadzēja apstrādāt un izvadīt bez ierunām.

Nevermind. kautkas liidziigs tam ok gribeeju man beidzot izdevaas.

Edited by spynode
Link to comment
Share on other sites

Venom, tnx ka pateici ātrāku || echo filter(@implode('',$data)); || variantu, tagad arī to izmantošu, bet es vēl jo projām nēsmu sapratis, ko dara tas @ operātors un kur viņš būtu jaizmanto! Manuālī atradu, bet šā vai tā tā īsti neiebraucu, saprotu, ka tagadējā gadījumā tas @ uztaisa kjipa ciklu un izvada to failu!

Link to comment
Share on other sites

Cik man zināms @ netaisa ciklu. @ lieto, lai lietotājs neredzētu kļūdas. Piemēram:

Ja raksta mysql_connect, bet nevar piekonektēt, tad lietotājs redzēs kļūdas paziņojumu (pie attiecīgiem error_reporting), a bet, ja raksta @mysql_connect, tad pie jebkādiem erorr_repoerting vērtībām, lietotājs neko redzēs, un kļūdas varēs apstrādāt programātiski un attiecīgi rīkoties.

Link to comment
Share on other sites

×
×
  • Create New...