Utilizzo di un parser per individuare il codice difettoso

0

Ultimamente ho lavorato molto su PHP e ho riscontrato un numero anormalmente elevato di errori di analisi. Mi rendo conto che sono colpa mia e sono il risultato di una codifica iniziale sciatta da parte mia, ma sto arrivando al punto di dedicare più tempo alla risoluzione dei tag che allo sviluppo. Nell'interesse di non sbattere la mia produttività, ci sono trucchi per individuare il problema nel codice?

Quello che cercherò davvero sarebbe una riga da inserire nel codice che restituirebbe l'intero tag difettoso nell'errore di analisi o qualcosa di simile.

Puramente per amor di riferimento, il mio errore attuale è Errore Parse: errore di sintassi, "}" inatteso in /home/content/80/9480880/html/cache/tpl_prosilver_viewtopic_body.html.php alla riga 50

(che si riferisce a questo):

</dd><dd><?php if ($_poll_option_val['POLL_OPTION_RESULT'] == 0) {  echo ((isset($this->_rootref['L_NO_VOTES'])) ? $this->_rootref['L_NO_VOTES'] : ((isset($user->lang['NO_VOTES'])) ? $user->lang['NO_VOTES'] : '{ NO_VOTES }')); } else { echo $_poll_option_val['POLL_OPTION_PERCENT']; } ?></dd> </dl> <?php }} if ($this->_rootref['S_DISPLAY_RESULTS']) {  ?> <dl> <dt>&nbsp;</dt> <dd class="resultbar"><?php echo ((isset($this->_rootref['L_TOTAL_VOTES'])) ? $this->_rootref['L_TOTAL_VOTES'] : ((isset($user->lang['TOTAL_VOTES'])) ? $user->lang['TOTAL_VOTES'] : '{ TOTAL_VOTES }')); ?> : <?php echo (isset($this->_rootref['TOTAL_VOTES'])) ? $this->_rootref['TOTAL_VOTES'] : ''; ?></dd> </dl> <?php } if ($this->_rootref['S_CAN_VOTE']) {  ?> <dl style="border-top: none;"> <dt>&nbsp;</dt> <dd class="resultbar"><input type="submit" name="update" value="<?php echo ((isset($this->_rootref['L_SUBMIT_VOTE'])) ? $this->_rootref['L_SUBMIT_VOTE'] : ((isset($user->lang['SUBMIT_VOTE'])) ? $user->lang['SUBMIT_VOTE'] : '{ SUBMIT_VOTE }')); ?>" class="button1" /></dd> </dl> <?php } if (! $this->_rootref['S_DISPLAY_RESULTS']) {  ?> <dl style="border-top: none;"> <dt>&nbsp;</dt> <dd class="resultbar"><a href="<?php echo (isset($this->_rootref['U_VIEW_RESULTS'])) ? $this->_rootref['U_VIEW_RESULTS'] : ''; ?>"><?php echo ((isset($this->_rootref['L_VIEW_RESULTS'])) ? $this->_rootref['L_VIEW_RESULTS'] : ((isset($user->lang['VIEW_RESULTS'])) ? $user->lang['VIEW_RESULTS'] : '{ VIEW_RESULTS }')); ?></a></dd> </dl> <?php } ?> </fieldset></div>
    
posta ryan.riverside 20.06.2012 - 19:19
fonte

2 risposte

6

In nessun ordine particolare (beh, forse in ordine di importanza, tipo):

  • formatta il tuo codice;
  • crea generatori di codice , quindi non altera il codice PHP e HTML . È un principio di base: separazione delle preoccupazioni per la vista / UI e codice business / logic;
  • usa controllori di codice automatici ;
  • scrivi almeno alcuni test di integrazione o di base di base che rileveranno gli scenari di "pagina vuota a causa di errori di analisi";
  • utilizza un IDE decente , che ti darà un feedback immediato sugli errori di analisi (se separi l'interfaccia utente e il codice logico ...);
  • hanno cicli di vita code-to-test più brevi in modo da prenderli presto.
risposta data 20.06.2012 - 20:52
fonte
1

Questo esempio sta urlando per essere refactored in una funzione. Forse due o più.

Una volta creata una funzione e inserita in un file PHP incluso, è possibile testarla in isolamento (relativo). Forse creando una pagina che chiama quella funzione e non fa nient'altro e passa quella pagina a un verificatore HTML (sto assumendo che il tuo problema sia l'analisi HTML, perché altrimenti il motore PHP ti dirà dove si trova il problema).

Inoltre, con una funzione puoi inserire commenti che spiegano esattamente dove viene generato il contenuto (anche se rimuovili per uso di produzione).

    
risposta data 20.06.2012 - 20:50
fonte

Leggi altre domande sui tag