Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Rimuovere i commenti da un file , ecco una possibile soluzione

    Invece di inzozzare l' OT magari lo scrivo qua' , servisse anche ad altri

    In pratica capita di dover fare un parser per prendere testo , codice o quant' altro da un file o un testo rappresentante un file ... o una stringa con commenti ...

    questa funzione semplicemente prende tutti i testi racchiusi tra apici singoli e/o doppi, li cambia nel loro hash md5, elimina a quel punto i commenti ( non importa se avevano stringhe al loro interno perche' sono stringhe di commenti, quindi vanno comunque tolte anche se hashate ) , poi riapplica agli hash residui, quelli non portati via dai commenti, il replace inverso , ed eccovi i testi con commenti o meno salvaguardati

    spero sia utile a qualcuno

    funzione
    codice:
    function removePHPComments( $text ) {
    	/**
    	 * Function removePHPComments:
    	 *	removes all php comment from a string
    	 * -------------------------------------
    	 * @author		Andrea Giammarchi
    	 * @date		30/03/2005
    	 * @compatibility	PHP >= 4
    	 */
    	$string2md5 = create_function(
    		'$a,$b,&$d',
    		'$c = md5($b); $d[$c] = $a.$b.$a; return $c;'
    	);
    	$comments = $find = $replace = Array();
    	$text = preg_replace(
    		"/('|\")([^\a]*?)(\\1)/ie",
    		'$string2md5( "\\1", "\\2", $comments );',
    		$text
    	);
    	$text = preg_replace(
    		Array(
    			"/(\/\/)([^\\n]*|[^\\r]*)/",
    			"/(\/\*)([^\a]*?)(\*\/)/i"
    		),
    		"",
    		$text
    	);
    	foreach( $comments as $k => $v ) {
    		if( strpos( $text, $k ) !== false ) {
    			array_push( $find, $k );
    			array_push( $replace, $v );
    		}
    	}
    	return str_replace( $find, $replace, $text );
    }

    esempio
    codice:
    $text = "
    /** osaksao o kds
    jasd asodsoia dj a
    jasoi d ojsadoiasj
    */
    
    \"sadja wij wajdiw
    // asd
    wj aoid joaw
    /*
    	lol
    */
    ijd oai jd \"
    // asjdijaoi wiojjo iwjd
    'lol'
    /** asjidj aowdiwaojwdiowdijawii*/
    \"jiwjdiaj aidwwawida \"
    ";
    echo '<pre>'.removePHPComments( $text ).'</pre>';

    Nota Bene
    e' studiata per commenti di tipo php, quindi

    // per linea singola

    e

    /*
    per multi linea
    */

    basta modificare in modo ottimale le pregs per adattarsela per commenti tipo python o mysql

    #

    o altri che siano ...



    insomma, una funzione per tante soluzioni, basta sapere cosa si vuole togliere
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    l'idea è molto carina ... xo non so se è + leggera di un parser vero e proprio

    probabilmente si ... xo mi sa che il carico del procio sale di parecchio x via delle multiple eliminazioni di commenti

    xo è una buona base per fare un offuscatore

  3. #3
    [supersaibal]Originariamente inviato da daniele_dll
    l'idea è molto carina ... xo non so se è + leggera di un parser vero e proprio
    [/supersaibal]
    intendi un parser vero e proprio in php ?


    [supersaibal]Originariamente inviato da daniele_dll
    probabilmente si ... xo mi sa che il carico del procio sale di parecchio x via delle multiple eliminazioni di commenti
    [/supersaibal]
    i commenti stanno su una preg a 2 regs, molto piu' leggero di un qualunque parser bbcode o sqlite usato nei siti piu' visitati ... quello che mi preoccupa di piu' e' la conversione di troppe stringhe in md5 ... ma i tempi dei tests da me effettuati sono comunque molto convincenti


    [supersaibal]Originariamente inviato da daniele_dll
    xo è una buona base per fare un offuscatore [/supersaibal]
    veramente io l' ho scritta dopo che ho letto del tuo problema coi commenti ... provala per i dumps, non per offuscare

    o no ? :master:
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    sisi per i dumps sicuramente funziona ... io dico un altra cosa ...

    per parser intendo un codicillo che si cicla carattere per carattere e si ricostruisce la struttura ... in base a certe condizioni deve segnare un flag del tipo "commento" o meno ...

    il codice con le preg va più che bene ... ma è molto più pesante rispetto a un semplice ciclo for che lancia qualche if

    non so se mi spiego ... non parlo in termini di "velocità" di esecuzione ... dato che le reg exp sono in C mentre il codice sarebbe in php ... ma parlo a livello di utilizzo di risorse come cicli di processore e memoria, che sicuramente sono molto maggiori nel caso delle reg exp ... xche prima deve sostituire tutti i commenti presenti in stringhe con degli hash, eliminare tutti i commenti, ripristinare gli hash ... che, per l'appunto, utilizza più risorse e se il parser, nel frattempo, deve fare altre cose non so se conviene più di tanto perché dovresti andare ad inserire altri cicli di sostituzione e altre preg che sostituiscono con hash il testo da mantenere

    anche xche, le preg, in fin dei conti, fanno proprio questo ... cercano nel testo, carattere per carattere, e si comporta di conseguenza ... ma come ti ripeto va benissimo nella maggior parte dei casi, ma nel mio specifico no, xche ho giù un parser che si occupa di spezzarmi le query presenti nel file sql e di tirarmi fuori i dati ... ad esempio un parser ti permette di validarne il contenuto ... ed in questo modo parsi, controlli ed in caso ripulisci ))

  5. #5
    ma te cose normali mai eh ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Ciao,
    per caso vi serve un lexer per fare il parsing dell'sql ?
    http://pear.php.net/package/SQL_Parser#results
    http://pear.php.net/package/SQL_Pars...Lexer_php.html
    per favore NIENTE PVT TECNICI da sconosciuti

  7. #7
    [supersaibal]Originariamente inviato da Fabio Heller
    Ciao,
    per caso vi serve un lexer per fare il parsing dell'sql ?
    http://pear.php.net/package/SQL_Parser#results
    http://pear.php.net/package/SQL_Pars...Lexer_php.html [/supersaibal]
    cosi non c'è neanche gusto xo

    cmq ... il problema di una soluzione di questo tipo è che necessita di costruita per il db ... e se non vengono supportate clausole ... può finir male (credo ... non l'ho provata quindi nun zo)

    cmq molto figa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.