• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Cum sa elimini comentariile din codul PHP?

2
  • Publicat de Andrei Avădănei
  • în Fără categorie
  • — 18 oct., 2010 at 5:36 pm

Exista diverse situatii cand esti nevoit sa simplifici codul PHP foarte mult, aducandu-l la o forma care poate fi interpretata de aplicatia ta. Recent m-am izbit de o problema foarte interesanta privind simplificarea codului – stergerea tuturor comentariilor in mod automat dintr-un cod PHP. Avand in vedere ca imi place sa caut provocari noi, am decis sa rezolv problema prin doua variante – prin metoda usoara care e aproape rezolvata automat de PHP sau prin metoda complicata ce presupune interpretarea efectiva a codului. Acest articol va prezenta atat metoda simpla pentru cei mai lenesi dintre voi cat si rezolvarea „hardcode”, ce presupune si cunostinte mai avansate.

Cea mai simpla metoda de a sterge comentariile din cod PHP

Metoda simpla presupune folosirea functiei token_get_all() din PHP ce va parsa tot codul PHP trasnformandu-l in token-uri ce fac parte din lexicul motorului Zend.

<?php
 function removeComments($string)
{
	$newStr  = '';
	$commentTokens = array(T_COMMENT);
	
	if (defined('T_DOC_COMMENT'))
		$commentTokens[] = T_DOC_COMMENT; // PHP 5
	if (defined('T_ML_COMMENT'))
		$commentTokens[] = T_ML_COMMENT;  // PHP 4
	
	$tokens = token_get_all($string);//extragem toate tokenurile
	
	foreach ($tokens as $token) {    //parcurgem fiecare token
		if (is_array($token)) { //daca e comentariu
			if (in_array($token[0], $commentTokens))
				continue; //trecem peste
	
			$token = $token[1]; 
		}
	
		$newStr .= $token; //adaugam orice token care nu e comentariu
	}
	return $newStr;
}

?>

Sterge comentariile in PHP folosind metoda low level

Asa cum am precizat initial, aceasta functie necesita cunostinte avansate de programare in PHP pentru a fi intelesa. Pe scurt, functia de mai jos incearca sa elimine comentariile din PHP (mai putin cele ce incep cu #, acesta e un todo simplu de rezolvat) folosindu-se efectiv de parsarea codului. Incercam sa ne asiguram ca nu avem ghilimele simple si duble. Cand acest criteriu este indeplinit cautam comentarii, in caz contrar ignoram tot pana cand ghilimele sunt inchise. Trebuie sa mentionez ca functia se comporta corect doar cand codul parsat este bun din punctul de vedere al lexicului PHP. Desi m-am straduit sa fac functia sa reactioneze frumos si in restul situatiilor, nu garantez stabilitatea rezultatului.

<?php

	function removeComments($content)
	{		
		$quotes   = false;
		$comments = false; 		
		$len = strlen($content);
		$pos = 0;
		
		while($pos < $len)
		{ 
			//search for closing quotes if open exists
			while($quotes !== false && $pos < $len && ($p = stripos($content, $quotes, $pos)) !== false)
			{
				if($p == 0 || $content{$p-1} != "\\")
					$quotes = false;
				$pos = $p + 1;
				if($quotes == false) continue; //todo
			}	 
			if($pos >= $len) break;		 
			
			//we don't have quotes or comments				 
			if($quotes == false && $comments == false)
			{ 
				//find which is first
				$posq1 = stripos($content, '"',  $pos);
				$posq2 = stripos($content, "'",  $pos);
				$posc1 = stripos($content, "//", $pos);
				$posc2 = stripos($content, "/*", $pos);
				
				//we validate values
				$errors = 0;
			 
				if($posq1 === false) { $posq1 = $len+1;  $errors++; }
				if($posq2 === false) { $posq2 = $len+1;  $errors++; }
				
				if($posc1 === false) { $posc1 = $len+1;  $errors++; }
				if($posc2 === false) { $posc2 = $len+1;  $errors++; } 				
								
				if($errors < 4)
				{
					//if quotes are before
					if(min($posq1, $posq2) < min($posc1, $posc2))
					{
						$pos    = min($posq1, $posq2)+1;
						$quotes = ($posq1 < $posq2 ? '"' : "'");
					}
					else
					{
						//if simple comments are first then ignore everything else after
						if($posc1 < $posc2) 
						{							
							$content = substr($content, 0, $posc1).substr($content, stripos($content, "\n", $posc1));
							$len     = strlen($content);
							$pos     = $posc1;
						}
						else
						{
							//we have allready end quotes							
							if(($p = stripos($content, "*/", $posc2)) !== false)
							{
								$content = substr($content, 0, $posc2).substr($content, $p+2);																	
								$len     = strlen($content);
								$pos     = $posc2;
							}
						}
					}
				}
				else
				{
					break;
				}
			}
		}	
		return $content;
	}

?>

Etichete: comentarii in phpdespre comentarii phpPHPsecrete in phpsterge comentarii din cod phpTehnictokenuri in phptutorial php

— Andrei Avădănei a scris 1246 articole

Andrei scrie pe worldit.info din vara lui 2011. Este fondatorul Asociatiei Centrul de Cercetare in Securitate Informatica din Romania - CCSIR si coordoneaza DefCamp, cea mai importanta conferinta de securitate informatica & hacking din Europa Centrala si de Est. Andrei ofera in cadrul Bit Sentinel servicii de securitate informatica, penetration testing, security management, recuperarea de pe urma unui atac cibernetic, training-uri si workshop-uri.

  • Articolul anterior ITFest Bucuresti 2010 – concurs national de proiecte IT
  • Articolul următor Indisponibilitatea adreselor IPv4 ar putea duce la un haos temporar

2 Comentarii

  1. Ionut Staicu spune:
    octombrie 18, 2010 la 8:17 pm

    codul NU se simplifica prin eliminarea comentariilor. Never EVER.

    • Andrei Avadanei spune:
      octombrie 18, 2010 la 8:31 pm

      Nu ai inteles.

      Codul se simplifica atunci cand esti nevoit sa interpretezi TU codul, nu Zend-ul. 🙂


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    [wp_rss_retriever url="https://rohacked.bit-sentinel.com/feed/" excerpt="none" items="5" read_more="false" new_window="true" thumbnail="false" cache="0"] RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • august 2022
    L Ma Mi J V S D
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Cum sa elimini comentariile din codul PHP?
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons