Newsgroup: it.comp.www.php
Titolo: Help: syntax error(di molto niubbo riguardo al PHP)

Questo è il codice della riga 63:
echo "<iframe style=\"width: 100%;height: 100%;\" 
src=\"".blogpath.index_name."\">".$frame_message."</iframe>";
e questo è l'errore:
Parse error: syntax error, unexpected '<' in 
/membri2/araimondi/sections/none_blog/section.php on line 63
Mi dice la riga ma non mi dà indicazioni sul "dove" precisamente sia il
problema, e poiché non sono certo un esperto di PHP, diciamo che la
cosa mi sta creando qualche problema.
Poiché a volte capita che gli errori vengano dalla "prossimità",
ecco la riga 62:
echo "<div style=\"width: 100%;background-color:".$bgcolor1.";\"">";
Indicazioni?
Grazie per la pazienza,
Andrea

 Andrea
Saluti,
David
-- 
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<


in effetti con le " (virgolette) spesso ci si perde, io per questo uso 
nell'HTML gli equivalenti ' (apice singolo), prova cosi:
echo "<div style='width: 100%;background-color:".$bgcolor1.";'>";
echo "<iframe style='width: 100%;height: 100%;' 
src='".blogpath.index_name."'>".$frame_message."</iframe>";
ciao
Mario
_________________________
WEB: 
www.mario-online.com
________________________________ 

Grazie ad entrambi per l'aiuto e buone feste a tutti :-)
Andrea

 echo "<div style='width: 100%;background-color:".$bgcolor1.";'>";
avrebbe piu' senso il contrario soprattutto visto che gia' concateni la
variabile alla stringa
usando le virgolette per delimitare una stringa il php tenta di
"espandere" le variabili, ovvero se ne incontra una la sostituisce al
valore, cosa che non accade con gli apici (per le quali e' quindi
necessario la concatenazione)
visto che gia' concateni e considerando poi che e' piu' performante
usare gli apici e concatenare piuttosto che le virgolette e
l'espansione delle variabili la soluzione migliore e':
echo '<div style="width: 100%;background-color:'.$bgcolor1.';">';

 echo '<div style="width: 100%;background-color:'.$bgcolor1.';">';
concordo...anche se (pura curiosità) mi piacerebbe quantificare "quanto" 
risparmi con la concatenazione piuttosto che con la espansione, parlando con 
colleghi la scelta viene sempre più fatta in base (non necessariamente 
nell'ordine)
- leggibilità
- "il mio editor mi evidenzia le variabili meglio cosi"
- gusti personali...ovviamente...;)


 
Poichè l'esempio mostrato riguarda l'echo suggerisco la virgola al posto 
della punto (ancora più performante, visto che non deve eseguire 
concatenazione)
echo '<div style="width: 100%;background-color:', $bgcolor1 , ';">';
	Francesco

 - "il mio editor mi evidenzia le variabili meglio cosi"
questi sono quelli che usano eclipse scometto ;)

 fai dei test con microtime() :P
giusto della serie "non so cosa fare"....;)...ho buttato giù due righe qua 
sotto per un test assolutamente empirico...in effetti qualche sec alla -5 si 
risparmia....;)
ciao e buon anno nuovo
<?
$bgcolor1 = "yellow";
$mytime_start = getmicrotime();
print "fake per inizializzare micro time";
$mytime_end = getmicrotime();
# echo
$mytime_start = getmicrotime();
for ($i = 1; $i <= 100; $i++)
 echo "background-color:".$bgcolor1."\n";
$mytime_end = getmicrotime();
$mytime = $mytime_end - $mytime_start;
print "<br><b>Echo:$mytime secondi</b><br>";
# virgole
$mytime_start = getmicrotime();
for ($i = 1; $i <= 100; $i++)
 echo "background-color:",$bgcolor1,"\n";
$mytime_end = getmicrotime();
$mytime = $mytime_end - $mytime_start;
print "<br><b>Echo con virgole:$mytime secondi</b><br>";
# print
$mytime_start = getmicrotime();
for ($i = 1; $i <= 100; $i++)
 print "background-color:$bgcolor1\n";
$mytime_end = getmicrotime();
$mytime = $mytime_end - $mytime_start;
print "<br><b>Print:$mytime secondi</b><br>";
function getmicrotime()
{
   list($usec, $sec) = explode(" ",microtime());
   return ((float)$usec + (float)$sec);
}
?>


 
Tra che hai fatto 30, fai 31 e posta anche i risultati per chi non può 
provarli al volo (sono troppo pigro per accendere il server)
Se poi mi permetti, alcune non sono proprio ottimizzate:
echo "background-color:".$bgcolor1."\n";
in
echo 'background-color:'.$bgcolor1."\n";
Lo stesso per quello con la virgola al posto della concatenazione (.), 
inoltre io passerei da 3 a qualcosa più sostanzioso (modello 5)
Ok, ho chiesto troppo...
	Francesco

 echo 'background-color:'.$bgcolor1."\n";
anche questa non e' ancora abbastanza ottimizzata ;)
echo 'background-color:'.$bgcolor1.chr(10); dovrebbe essere piu'
perfomante, ma in verita', la morte sua e' :
define('LF', chr(10));
echo 'background-color:'.$bgcolor1.LF;
faccio cosi' con tutti i caratteri speciali di cui esiste la forma
escapata espansa tra virgolette, es:
define('CRLF', chr(13).chr(10));
define('TAB', chr(9));
uso chr() e non la forma escapata il che velocizza ulteriormente
la costante viene definita una volta all'inizio dello script, poi il
parser deve solo accedervi, invece di dover ogni volta espandere
l'escape o computare la funzione chr()


Scusa ma a questo punto, invece di diventare noiosi e fare 
ottimizzazione su ottimizzazione, ci vorrebbe un bel benchmark fatto 
bene, che prende in considerazione le varie migliorie e concretizzare 
praticamente quanto spreca quel metodo in più rispetto ad altri.
Allora se si fa tanto per dire, anche la tua
echo 'background-color:'.$bgcolor1.LF; si può ottimizzare in
echo 'background-color:', $bgcolor1, LF;
Comunque l'idea delle costanti per il CRLF è ottimo suggerimento :-)
	Francesco

 echo 'background-color:', $bgcolor1, LF;
certo, ma se avessi scritto il codice ottimizzato definitivo il thread
sarebbe morto :P

 provarli al volo (sono troppo pigro per accendere il server)
ho sistemato lo script:
<?php
    ini_set('max_execution_time', 0);
    define('LF', chr(10000));
    function getmicrotime() {
       list($usec, $sec) = explode(' ',microtime());
       return ((float)$usec + (float)$sec);
    }
    $bgcolor1 = 'yellow';
    $mytime_start = getmicrotime();
    ?><b>echo 'background-color:', $bgcolor1, LF;</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i < 2501; $i++) {
        echo 'background-color:', $bgcolor1, LF;
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo 'background-color:', $bgcolor1, LF;</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i <= 2500; $i++) {
        echo 'background-color:', $bgcolor1, LF;
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo "background-color:$bgcolor1", LF;</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i < 2501; $i++) {
        echo "background-color:$bgcolor1", LF;
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo "background-color:$bgcolor1", LF;</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i <= 2500; $i++) {
        echo "background-color:$bgcolor1", LF;
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo "background-color:$bgcolor1".LF;</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i < 2501; $i++) {
        echo "background-color:$bgcolor1".LF;
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo "background-color:$bgcolor1".LF;</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i <= 2500; $i++) {
        echo "background-color:$bgcolor1".LF;
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo 'background-color:'.$bgcolor1.LF;</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i < 2501; $i++) {
        echo 'background-color:'.$bgcolor1.LF;
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo 'background-color:'.$bgcolor1.LF;</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i <= 2500; $i++) {
        echo 'background-color:'.$bgcolor1.LF;
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo "background-color:$bgcolor1\n";</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i < 2501; $i++) {
        echo "background-color:$bgcolor1\n";
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo "background-color:$bgcolor1\n";</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i <= 2500; $i++) {
        echo "background-color:$bgcolor1\n";
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo 'background-color:', $bgcolor1, "\n";</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i < 2501; $i++) {
        echo 'background-color:', $bgcolor1, "\n";
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo 'background-color:', $bgcolor1, "\n";</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i <= 2500; $i++) {
        echo 'background-color:', $bgcolor1, "\n";
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo 'background-color:'.$bgcolor1."\n";</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i < 2501; $i++) {
        echo 'background-color:'.$bgcolor1."\n";
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
    ?><b>echo 'background-color:'.$bgcolor1."\n";</b><!--<? /* --> */
    $mytime_start = getmicrotime();
    for ($i = 0; $i <= 2500; $i++) {
        echo 'background-color:'.$bgcolor1."\n";
    }
    echo '//--> -> '.(getmicrotime() - $mytime_start).'
secondi</b><br>';
?>
come vedi ho messo due tipi di cicli for, uno con < X + 1 e l'altro con
<= X
io penso che il primo sia piu' performante
il problema ora e' fare il test su una macchina senza carico di cpu,
cosa che non sono riuscito a fare, cmq il piu' veloce sembra essere:
echo 'background-color:', $bgcolor1, LF; come ci si aspettava, ma ci
sono delle sorpese (lascio a te vedere quali)

     ?><b>echo 'background-color:', $bgcolor1, LF;</b><!--<? /* --> */
/* --> */ questo ovviamente va eliminato, io l'ho messo per un problema
di syntax highlighting

 
Per me si rimanda la discussione a martedě :-)
	Francesco