• 0

[PHP/MySQL] $15 Contest for the most complex code


Question

Ok, so the rules are simple. Just post the most complex php/mysql code (within reason don't post some mysql string that takes up 500 pages) that takes up of a maximum of 2 pages of code (printed). It doesn't even have to be yours (as long as you have a right to post it). Just post it and explain what it does. The winner will be chosen by me and I'll paypal them $15. Contest ends Friday. Have fun! :)

btw: I'm doing this for a learning experience more than anything. I want to see really complex pieces of work so I can see where I'm at with my coding as far as queries go. Just to fill you in as you're probably wondering why on earth I decided to do this lol.

25 answers to this question

Recommended Posts

  • 0
<?php

class Blog {

	public $id;
	public $userId;
	public $title;
	public $body;
	public $views;
	public $comments;
	public $voteCount;
	public $voteAverage;
	public $voteTotal;
	public $voteUserIds;
	public $created;
	public $updated;
	public $autoLoad;

	function __construct($id, $userId, $title, $body=NULL, $views=NULL, $comments=NULL, $voteCount=NULL, $voteAverage=NULL, $voteTotal=NULL, $voteUserIds=NULL, $created=NULL, $updated=NULL, $autoLoad=array()) {
		$this->id 			= $id;
		$this->userId		= $userId;
		$this->title 		= stripslashes($title);
		$this->body 		= stripslashes($body);
		$this->views		= $views;
		$this->comments		= $comments;
		$this->voteCount 	= $voteCount;
		$this->voteAverage	= $voteAverage;
		$this->voteTotal	= $voteTotal;
		$this->voteUserIds	= $voteUserIds;
		$this->created 		= $created;
		$this->updated		= $updated;
		$this->autoLoad		= $autoLoad;
		$this->AutoLoad($this->autoLoad);
	}


	public function AutoLoad($autoLoad) {

		if(is_array($autoLoad)) {
			foreach($autoLoad as $load):
				switch($load):
					case 'comments' :
						$this->LoadComments();
					break;
					case 'tags' :
						$this->LoadTags();
					break;
				endswitch;
			endforeach;
		} else if ($autoLoad === true) {
			$this->LoadComments();
			$this->LoadTags();
		}
	}


	public static function Load($id, $autoLoad=array()) {

		try {
			$db = Database::GetInstance();
			$result = $db->query("SELECT * FROM Blog WHERE id = ".$id);

				if($result && $result->num_rows > 0) {
					$q = $result->fetch_object();
						if($Object = new self($q->id, $q->user_id, $q->title, $q->body, $q->views, $q->comments, $q->vote_count, $q->vote_average, $q->vote_total, $q->vote_user_ids, $q->created, $q->updated, $autoLoad)) {
							return $Object;
						}
					} else {
						throw new ApplicationException('Could not load blogId '.$id);
					}

		} catch(DatabaseException $e) {
			throw new ApplicationException($e->getMessage(), $e->getCode());
		}
	}


	public function LoadComments() {
		$this->Comments = Comment_Blog::LoadByBlogId($this->id);
	}


	public function LoadTags() {
		$this->Tags = Tag_Blog::LoadTagsByBlogId($this->id);
	}



	public function AddView() {

		try {
			$db = Database::GetInstance();
			$result = $db->query("UPDATE Blog SET views = views + 1 WHERE id = ".$this->id);

				if(!$result) {
					return false;
				} else if ($db->affected_rows >= 0) {
					return true;
				} else {
					return false;

				}

		} catch(DatabaseException $e) {
			throw new ApplicationException($e->getMessage(), $e->getCode());
		}		
	}


	public function HasVoted($userId) {
		$items = explode(',', $this->voteUserIds);
		return in_array($userId, $items) ? true : false;
	}

	public function TagsToString() {

			if(!empty($this->Tags)):
				$result = NULL;
					foreach($this->Tags as $tag):
						$result .= ', '.$tag->title;
					endforeach;
				return substr($result, 2);
			endif;
		return false;
	}


	public function Vote($rating) {
	global $User;

		try {
			$db = Database::GetInstance();

			if($User->id == $this->userId) {//my blog, cant vote
				return false;
			} else if ($this->HasVoted($User->id) == true) {//already voted
				return false;
			}

			$this->voteUserIds = $this->voteUserIds.",".$User->id;

			if($this->voteCount > 1) {
				$this->voteTotal 	= $this->voteTotal + $rating;
				$this->voteCount 	= $this->voteCount + 1;
				$this->voteAverage 	=  $this->voteTotal / $this->voteCount + 1;
			} else {
				$this->voteAverage = $rating;
			}

			$result = $db->query("UPDATE Blog SET vote_count = vote_count + 1, vote_average = '".$this->voteAverage."', vote_user_ids = '".$this->voteUserIds."', vote_total = vote_total + $rating WHERE id = ".$this->id);

				if(!$result) {
					return false;
				} else if ($db->affected_rows >= 0) {
					return true;
				} else {
					return false;

				}

		} catch(DatabaseException $e) {
			throw new ApplicationException($e->getMessage(), $e->getCode());
		}		
	}


	public function AddComment($blogId) {

		try {
			$db = Database::GetInstance();
			$result = $db->query("UPDATE Blog SET comments = comments + 1 WHERE id = ".$blogId);

				if(!$result) {
					return false;
				} else if ($db->affected_rows >= 0) {
					return true;
				} else {
					return false;

				}

		} catch(DatabaseException $e) {
			throw new ApplicationException($e->getMessage(), $e->getCode());
		}		
	}


	public function RemoveComment($blogId) {

		try {
			$db = Database::GetInstance();
			$result = $db->query("UPDATE Blog SET comments = comments - 1 WHERE id = ".$blogId);

				if(!$result) {
					return false;
				} else if ($db->affected_rows >= 0) {
					return true;
				} else {
					return false;

				}

		} catch(DatabaseException $e) {
			throw new ApplicationException($e->getMessage(), $e->getCode());
		}		
	}


	public function Save() {

		try {
			$db = Database::GetInstance();
			$result = $db->query("UPDATE Blog SET title = ".$db->safe($this->title).", body = ".$db->safe($this->body).", updated = ".time()." WHERE id = ".$this->id);

				if(!$result) {
					return false;
				} else if ($db->affected_rows >= 0) {
					return true;
				} else {
					return false;
				}

		} catch(DatabaseException $e) {
			throw new ApplicationException($e->getMessage(), $e->getCode());
		}		
	}


	public static function LoadAllByType($from, $to, $type=NULL, $extra=NULL, $count=0, $autoLoad=array()) {
	global $User;

		try {
			$db = Database::GetInstance();

			if($type == 'by_user') {
				$arg = " AND b.user_id = $extra ";
				$join = NULL;
			} else if ($type == 'by_tag') {
				$arg = ' AND t.title = '.$db->safe($extra);
				$join = "LEFT JOIN Tag_Blog tb ON (tb.blog_id = b.id) LEFT JOIN Tag t ON (tb.tag_id = t.id) ";
			} else if ($type == 'by_friends') {
				$arg = " AND b.user_id IN($extra) ";
				$join = NULL;
			} else {
				$arg = NULL;
				$join = NULL;
			}

			$sql = "SELECT b.*, u.username as username, ud.id as ud_id, ud.key, ud.value 
			FROM Blog b 
			JOIN User u ON (b.user_id = u.id) 
			LEFT OUTER JOIN User_Data ud ON (u.id = ud.user_id AND ud.key = 'Avatar') 
			$join 
			WHERE b.id > 0 
			$arg 
			ORDER BY b.created DESC
			LIMIT $from, $to";
			$query = $db->query($sql) or die($db->error." $sql");

				if($count == 1) {
					return $query->num_rows;
				}

				if($query && $query->num_rows > 0):
					$blogs = array();
						while ($q = $query->fetch_object()):
							$Object = new self($q->id, $q->user_id, $q->title, $q->body, $q->views, $q->comments, $q->vote_count, $q->vote_average, $q->vote_total, $q->vote_user_ids, $q->created, $q->updated, $autoLoad);
							$Object->User = new User($q->user_id, $q->username);
							if(!empty($q->key)):
								$Object->User->Avatar = new User_Data($q->ud_id, $q->user_id, $q->key, $q->value);
							endif;
							$blogs[] = $Object;
						endwhile;
					return $blogs;
				endif;
			return false;

		} catch(DatabaseException $e) {
			throw new ApplicationException($e->getMessage(), $e->getCode());
		}		
	}


	public static function Create($userId, $title, $body) {

		try {
			$db = Database::GetInstance();
			$time = time();
			$db->query("INSERT INTO Blog (user_id, title, body, created, updated) VALUES ($userId, ".$db->safe($title).", ".$db->safe($body).", $time, $time) ");
			$id = $db->insert_id;

				if($db->affected_rows > 0) {
					return self::Load($id);
				} else { 
					return false;
				}

		} catch(DatabaseException $e) {
			throw new ApplicationException($e->getMessage(), $e->getCode());
		}		
	}


	public function Delete() {

		try {
			Comment_Blog::DeleteByBlogId($this->id);
			$db = Database::GetInstance();
			return $db->query("DELETE FROM Blog WHERE id = ".$this->id);

		} catch(DatabaseException $e) {
			throw new ApplicationException($e->getMessage(), $e->getCode());
		}		
	}


}

?>

  • 0

PHP code obfuscator:

<?php
set_time_limit(0);

$web=isset($_POST['w']) ? 1 : 0;
$no_change=Array();
$no_change_funcs=Array();

if($web)
{
  $tmparr=isset($_POST['vrepl']) ? trim($_POST['vrepl']) : '';

  if($tmparr)
  {
	$tmparr=explode("\n",$tmparr);
	foreach($tmparr as $vname)
	{
	  $vname=str_replace("\r","",$vname);
	  if(!preg_match("/^\\$([a-zA-Z_\x7f-\xff]{1}[a-zA-Z0-9_\x7f-\xff]*)$/i",$vname))
		errpr("Error in non-replaceable variable list");

	  $no_change[]=$vname;
	}
  }



  $tmparr=isset($_POST['frepl']) ? trim($_POST['frepl']) : '';

  if($tmparr)
  {
	$tmparr=explode("\n",$tmparr);
	foreach($tmparr as $fname)
	{
	  $fname=str_replace("\r","",$fname);
	  if(!preg_match("/^([a-zA-Z0-9_]+)$/i",$fname))
		errpr("Error in non-replaceable function list");

	  $no_change_funcs[]=$fname;
	}
  }


  $tmparr=isset($_POST['ffrepl']) ? trim($_POST['ffrepl']) : '';

  if($tmparr)
  {
	$tmparr=explode("\n",$tmparr);
	foreach($tmparr as $fname)
	{
	  $fname=str_replace("\r","",$fname);
	  if(!preg_match("/^([a-zA-Z0-9_]+)$/i",$fname))
		errpr("Error in function list witn non-replaceable variables");

	  $no_str_repl[]=$fname;
	}
  }

  $sfuncname=isset($_POST['sfunc']) ? $_POST['sfunc'] : '';
  if($sfuncname)
  {
	if(!preg_match("/^([a-zA-Z0-9_]+)$/i",$sfuncname))
	  errpr("Wrong function name for crypt");
  }
}
else
{
print <<<HERE
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>PHP Obfuscator by DX 1.0</title>
<style>
td
{
border-width:1px 1px 1px 1px;
border-style:solid;
border-color:black;
}
INPUT
{
BORDER-RIGHT: rgb(50,50,50) 1px outset;
BORDER-TOP: rgb(50,50,50) 1px outset;
FONT-SIZE: 11px;
font-family:Arial;
BORDER-LEFT: rgb(50,50,50) 1px outset;
BORDER-BOTTOM: rgb(50,50,50) 1px outset;
}
button
{
BORDER-RIGHT: rgb(50,50,50) 1px outset;
BORDER-TOP: rgb(50,50,50) 1px outset;
FONT-SIZE: 10px;
BORDER-LEFT: rgb(50,50,50) 1px outset;
BORDER-BOTTOM: rgb(50,50,50) 1px outset;
width:50px;
}
textarea
{
BORDER-RIGHT: rgb(50,50,50) 1px outset;
BORDER-TOP: rgb(50,50,50) 1px outset;
BORDER-LEFT: rgb(50,50,50) 1px outset;
BORDER-BOTTOM: rgb(50,50,50) 1px outset;
FONT-SIZE: 13px;
font-family:Arial;
}
select
{
FONT-SIZE: 10px;
background-color:#f4f4ff;
}
a,a:active,a:visited
{
background: transparent;
color: #34498B;
text-decoration: none;
font-weight:700;
font-size:10;
font-family:Arial;
background-color:wheat;
}
a:hover
{
background: transparent;
color: blue;
font-weight:700;
font-family:Arial;
font-size:10;
text-decoration: none;
background-color:yellow;
}
</style>
</head>
<body>
<form action="?" method="post">
<input type="hidden" name="w" value="1">
<table style="border-width:1px 1px 1px 1px; border-style:solid; border-collapse:collapse; border-color:black; width:100%; height:100%">
<tr><td colspan=2 align=center style="font-size:18;height:10">PHP Obfuscator by DX 1.0</td></tr>
<tr valign=top><td>Source code (With <? and ?>)<hr>
<textarea style="width:99%;font-family:Lucida Console;" rows=35 name="src"></textarea>
<br><br><center><input type="submit" value="Obfuscate!"></center>
<hr><b>Important!</b><br>Please, don't use \$\$var_name and eval.<br>
</td><td style="width:350;font-face:Arial;font-size:12;">Obfuscation options<hr>
Function name for obfuscation (optional): <input type="text" name="sfunc" value=""><hr>
<input type="checkbox" name="obvars" checked> Replace variables<br>
<input type="radio" value="0" name="vtype" checked> Give short names to variables<br>
<input type="radio" value="1" name="vtype"> Give long names to variables<br>
<hr>
<input type="checkbox" name="obstrs" checked> Static strings obfuscation<br>(speed will decrease)<br>
<input type="radio" value="0" name="stype"> Simple obfuscation<br>
<input type="radio" value="1" name="stype" checked> Encode in base64<br>
<hr>
<input type="checkbox" name="obfuncs" checked> Replace functions<br>
<input type="radio" value="0" name="ftype" checked> Functions short names<br>
<input type="radio" value="1" name="ftype"> Functions long names<br>
<hr>
<input type="checkbox" name="cmpr" checked>Maximum compression<hr>
Non-replaceable variables:<br>
<textarea style="width:340;font-family:Lucida Console;" rows=10 name="vrepl">\$_GET
\$_POST
\$_COOKIE
\$_SERVER
\$_FILE
\$HTTP_GET_VARS
\$HTTP_POST_VARS
\$HTTP_COOIE_VARS
\$GLOBALS
\$HTTP_SERVER_VARS
\$HTTP_POST_FILES
\$_REQUEST
\$_SESSION
\$HTTP_SESSION_VARS
\$_ENV
\$HTTP_ENV_VARS
\$php_errormsg
\$HTTP_RAW_POST_DATA
\$http_response_header
\$argc
\$argv
\$this</textarea>
<br>Non-replaceable functions:<br>
<textarea style="width:340;font-family:Lucida Console;" rows=10 name="frepl">__destruct
__construct
__get
__set
__call
__callStatic
__isset
__unset
__sleep
__wakeup
__toString
__set_state
__clone</textarea>
<br>Functions with non-replaceable parameters:<br>
<textarea style="width:340;font-family:Lucida Console;" rows=10 name="ffrepl">set_error_handler
ob_gzhandler
ibase_set_event_handler
session_set_save_handler
set_exception_handler
xml_set_character_data_handler
xml_set_default_handler
xml_set_element_handler
xml_set_end_namespace_decl_handler
xml_set_external_entity_ref_handler
xml_set_notation_decl_handler
xml_set_processing_instruction_handler
xml_set_start_namespace_decl_handler
xml_set_unparsed_entity_decl_handler
xslt_set_error_handler
readline_callback_handler_install
runkit_sandbox_output_handler
sybase_set_message_handler</textarea>
</td>
</tr></table></body></html>
HERE;
  exit();
}


$replace_vars=isset($_POST['obvars']) ? 1 : 0;
$obf_strings=isset($_POST['obstrs']) ? 1 : 0;
$obf_funcs=isset($_POST['obfuncs']) ? 1 : 0;
$compress_file=isset($_POST['cmpr']) ? 1 : 0;

$vars_mode=isset($_POST['vtype']) ? $_POST['vtype'] : 0;
if($vars_mode!=="1" && $vars_mode!=="0")
  $vars_mode=0;

$string_mode=isset($_POST['stype']) ? $_POST['stype'] : 0;
if($string_mode!=="1" && $string_mode!=="0")
  $string_mode=0;

$func_mode=isset($_POST['ftype']) ? $_POST['ftype'] : 0;
if($func_mode!=="1" && $func_mode!=="0")
  $func_mode=0;

$f=isset($_POST['src']) ? $_POST['src'] : '';

if(ini_get('magic_quotes_gpc')==1)
  $f=stripslashes($f);

if(!$f)
  errpr("Enter php-file code");

$obfuscated=get_obf_code($f,$replace_vars,$vars_mode,$obf_strings,$string_mode,$obf_funcs,$func_mode,$sfuncname);


if($compress_file) $obfuscated=compress_php_src($obfuscated);

$obfuscated=htmlspecialchars($obfuscated);

print <<<HERE
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>PHP Obfuscator by DX 1.0</title>
</head>
<body>
<center><h3>Obfuskated code</h3></center><hr>
<textarea style="width:99%;font-family:Lucida Console;" rows=35>
$obfuscated
</textarea>
&lt;br&gt;&lt;a href="#" onclick="java script:history.go(-1)">Again</a>;/body&gt;&lt;/html&gt;
HERE;
exit();



function errpr($txt)
{
print &lt;&lt;&lt;HERE
&lt;html&gt;&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=utf-8"&gt;
&lt;title&gt;PHP Obfuscator by DX 1.0&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h3&gt;$txt&lt;/h3&gt;&lt;hr&gt;
&lt;a href="#" onclick="java script:history.go(-1)">Back</a>;/body&gt;&lt;/html&gt;
HERE;
exit();
}



function compress_php_src($src)
{
  static $IW=array();

  $tokens=@token_get_all($src);

  $new="";
  $c=sizeof($tokens);
  $iw=false;
  $ih=false;
  $ls="";
  $ot=null;
  for($i=0;$i&lt;$c;$i++)
  {
	$token=$tokens[$i];
	  if(is_array($token))
	  {
		list($tn,$ts)=$token;
		$tname=token_name($tn);
		if($tn==T_INLINE_HTML)
		{
		  $new.=$ts;
		  $iw=false;
		}
		else
		{
		  if($tn==T_OPEN_TAG)
		  {
			if(strpos($ts," ") || strpos($ts,"\n") || strpos($ts,"\t") || strpos($ts,"\r"))
			{
			  $ts=rtrim($ts);
			}

			$ts.=" ";
			$new.=$ts;
			$ot=T_OPEN_TAG;
			$iw = true;
		  }
		  elseif($tn==T_OPEN_TAG_WITH_ECHO)
		  {
			$new.=$ts;
			$ot=T_OPEN_TAG_WITH_ECHO;
			$iw=true;
		  }
		  elseif($tn==T_CLOSE_TAG)
		  {
			if($ot==T_OPEN_TAG_WITH_ECHO)
			{
			  $new=rtrim($new,"; ");
			}
			else
			{
			  $ts=" ".$ts;
			}

			$new.=$ts;
			$ot=null;
			$iw=false;
		  }
		  elseif(in_array($tn,$IW))
		  {
			$new.=$ts;
			$iw=true;
		  }
		  elseif($tn==T_CONSTANT_ENCAPSED_STRING || $tn==T_ENCAPSED_AND_WHITESPACE)
		  {
			if($ts[0]=='"')
			{
			  $ts=addcslashes($ts,"\n\t\r");
			}

			$new.=$ts;
			$iw=true;
		  }
		  elseif($tn==T_WHITESPACE)
		  {
			$nt=@$tokens[$i+1];
			if(!$iw &amp;&amp; (!is_string($nt) || $nt=='$') &amp;&amp; !in_array($nt[0],$IW))
			{
			  $new.=" ";
			}

			$iw = false;
		  }
		  elseif($tn==T_START_HEREDOC)
		  {
			$new.="&lt;&lt;&lt;S\n";
			$iw=false;
			$ih=true;
		  }
		  elseif($tn==T_END_HEREDOC)
		  {
			$new.="S;\n";
			$iw=true;
			$ih=false;

			for($j=$i+1;$j&lt;$c;$j++)
			{
			  if(is_string($tokens[$j]) &amp;&amp; $tokens[$j]==";")
			  {
				$i=$j;
				break;
			  }
			  else if($tokens[$j][0]==T_CLOSE_TAG)
			  {
				break;
			  }
			}
		  }
		  elseif($tn==T_COMMENT || $tn==T_DOC_COMMENT || $tn==T_ML_COMMENT)
		  {
			$iw = true;
		  }
		  else
		  {
			$new.=$ts;
			$iw = false;
		  }
		}

		$ls = "";
	  }
	  else
	  {
		if(($token!=";" &amp;&amp; $token!=":") || $ls!=$token)
		{
		  $new.=$token;
		  $ls=$token;
		}

		$iw=true;

	  }
  }

  return $new;
}



function get_obf_code($src,$obfvars,$varmode,$obfstrings,$strmode,$obffuncs,$funcmode,$sfuncname='')
{
  global $no_change;
  global $allvars;
  global $no_change_funcs;
  global $no_str_repl;

  $tokens=@token_get_all($src);
  $c=sizeof($tokens);

  $allvars[0]=Array();
  $allvars[1]=Array();
  $currvar=0;

  $allfuncs[0]=Array();
  $allfuncs[1]=Array();
  $currfunc=0;

  $lastconstr='';

  $classsk=0;

  $prev=0;

  $currstr=0;

  $ot=0;

  $newcode="";
  $bfr='';
  $addcode1="";
  $sfname=$sfuncname ? $sfuncname : '_'.mt_rand();


  $isstr=0;
  $ineval=0;
  $isfunc=0;

  for($i=0;$i&lt;$c;$i++)
  {
	$token=$tokens[$i];

	if(is_array($token))
	{
	  list($tn,$ts)=$token;

	  if(($tn==T_OPEN_TAG || $tn==T_OPEN_TAG_WITH_ECHO) &amp;&amp; !$ot)
		$ot=1;

	  if($tn==T_CLOSE_TAG &amp;&amp; $ot)
		$ot=0;


	  if($ot)
	  {
		if($tn==T_VAR || $tn==T_PROTECTED || $tn==T_PUBLIC || $tn==T_PRIVATE || $tn==T_CONST)
		  $classsk=1;

		if($tn==T_EVAL)
		  $ineval=1;


		if($isstr==1 &amp;&amp; $tn==T_END_HEREDOC)
		  $isstr=0;


		if($tn==T_START_HEREDOC)
		  $isstr=1;


		if($ineval) {$newcode.=$ts;continue;}


		if($obfvars &amp;&amp; $tn==T_VARIABLE &amp;&amp; !in_array($ts,$no_change))
		{
		  if(!in_array($ts,$allvars[0]))
		  {
			$tmp=$ts;
			$allvars[0][$tmp]=$ts;
			$ts=$varmode==0 ? '$_'.$currvar : '$_'.md5($ts);
			$allvars[1][$tmp]=$ts;
			$currvar++;
		  }
		  else
		  {
			$ts=$allvars[1][$ts];
		  }
		}


		if($tn==T_STRING &amp;&amp; $prev==T_OBJECT_OPERATOR)
		{
		  $ttt=$i+1;
		  $wbfunc=0;
		  while(isset($tokens[$ttt]))
		  {
			$nxt=$tokens[$ttt];

			if($nxt=='(' &amp;&amp; !$isstr)
			{
			  $wbfunc=1;
			  break;
			}

			if(($nxt==';' || $nxt=='=' || $nxt==')'  || is_array($nxt)) &amp;&amp; !$isstr)
			{
			  break;
			}
			$ttt++;
		  }
		}


		if($obfvars &amp;&amp; !$wbfunc &amp;&amp; $tn==T_STRING &amp;&amp; $prev==T_OBJECT_OPERATOR &amp;&amp; !in_array('$'.$ts,$no_change))
		{
		  if(!in_array('$'.$ts,$allvars[0]))
		  {
			$tmp='$'.$ts;
			$allvars[0][$tmp]='$'.$ts;
			$ts=$varmode==0 ? '_'.$currvar : '_'.md5('$'.$ts);
			$allvars[1][$tmp]='$'.$ts;
			$currvar++;
		  }
		  else
		  {
			$ts=substr($allvars[1]['$'.$ts],1);
		  }
		}


		if($tn==T_FUNCTION)
		  $isfunc=1;

		$prev= $tn==T_WHITESPACE ? $prev : $tn;


		if($obffuncs &amp;&amp; $isfunc &amp;&amp; !$fname &amp;&amp; $tn==T_STRING &amp;&amp; strtolower($ts)!='true' &amp;&amp; strtolower($ts)!='false' &amp;&amp; !in_array($ts,$no_change_funcs))
		{
		  if(!in_array($ts,$allfuncs[0]))
		  {
			$tmp=$ts;
			$allfuncs[0][$tmp]=$ts;
			$ts=$funcmode==0 ? '__'.$currfunc : '__'.md5($ts);
			$allfuncs[1][$tmp]=$ts;
			$currfunc++;
		  }
		  else
		  {
			$ts=$allfuncs[1][$ts];
		  }
		}


		if($classsk==0 &amp;&amp; $obfstrings &amp;&amp; !in_array($lastconstr,$no_str_repl) &amp;&amp; $tn==T_CONSTANT_ENCAPSED_STRING &amp;&amp; !$isfunc)
		{
		  if($strmode==0)
		  {
			$addcode1.=$ts.',';
			$ts=$sfname.'('.$currstr.')';
			$currstr++;
		  }
		  else
		  {
			eval('$tmp='.$ts.';');
			$addcode1.="'".base64_encode($tmp)."',";
			$ts=$sfname.'('.$currstr.')';
			$currstr++;
		  }
		}
	  }

	  if($tn==T_STRING)
		$lastconstr=$ts;


	  if($tn==T_END_HEREDOC)
		$ts.="\n";

	  $newcode.=$ts;
	  $bfr=$tn;
	}
	else
	{
	  $newcode.=$token;

	  if($isfunc &amp;&amp; $ot)
	  {
		if($token==')')
		  $isfunc=0;
	  }

	  if($ot)
	  {
		if($isstr==2 &amp;&amp; $token=="'")
		{
		  $isstr=0;
		  continue;
		}

		if($token=="'")
		  $isstr=2;

		if($isstr==3 &amp;&amp; $token=='"')
		{
		  $isstr=0;
		  continue;
		}

		if($token=='"')
		  $isstr=3;

		if($classsk==1)
		{
		  if($token==';')
			$classsk=0;
		}

		if($ineval &amp;&amp; $token==';')
		  $ineval=0;

		if($lastconstr &amp;&amp; $token==';')
		  $lastconstr='';
	  }

	}
  }



  if($obfstrings)
  {
	$addcode1=substr($addcode1,0,strlen($addcode1)-1);

	if($strmode==0)
	  $addcode1="&lt;? function $sfname(\$i)".'{'."\$a=Array($addcode1);return \$a[\$i];".'}'." ?&gt;";
	else
	  $addcode1="&lt;? function $sfname(\$i)".'{'."\$a=Array($addcode1);return base64_decode(\$a[\$i]);".'}'." ?&gt;";
  }


  $newcode.=$addcode1;

  $tokens=token_get_all($newcode);
  $c=sizeof($tokens);
  $newcode="";

  $isstr=0;

  for($i=0;$i&lt;$c;$i++)
  {
	$token=$tokens[$i];

	if(is_array($token))
	{
	  list($tn,$ts)=$token;

	  if(($tn==T_OPEN_TAG || $tn==T_OPEN_TAG_WITH_ECHO) &amp;&amp; !$ot)
		$ot=1;

	  if($tn==T_CLOSE_TAG &amp;&amp; $ot)
		$ot=0;

	  if($ot)
	  {
		if($isstr==1 &amp;&amp; $tn==T_END_HEREDOC)
		  $isstr=0;

		if($tn==T_START_HEREDOC)
		  $isstr=1;


		if($obffuncs &amp;&amp; $isstr==0 &amp;&amp; $tn==T_STRING)
		{
		  if(isset($allfuncs[0][$ts]))
		  {
			$ts=$allfuncs[1][$ts];
		  }
		}
	  }

	  if($tn==T_END_HEREDOC)
		$ts.="\n";

	  $newcode.=$ts;
	}
	else
	{
	  $newcode.=$token;

	  if($ot)
	  {
		if($isstr==2 &amp;&amp; $token=="'")
		{
		  $isstr=0;
		  continue;
		}

		if($token=="'")
		  $isstr=2;

		if($isstr==3 &amp;&amp; $token=='"')
		{
		  $isstr=0;
		  continue;
		}

		if($token=='"')
		  $isstr=3;
	  }
	}
  }

  return $newcode;
}

print "Done!";
?&gt;

  • 0

Well in the case of using PHP with MySQL, there's no reason the whole process has to be complex at all. A set of db container functions or even a db class that are unique to different types of databases could be created that make connecting, executing queries, and fetching data simple. One thing I loved about what I had pieced together was that the following line would connect if needed, execute a query, and fetch the results:

$users = dbFetchAll('SELECT * FROM users ORDER BY username;');

I mention this because, again, it doesn't have to be complex, nor should it be.

  • 0

Most complicated code is not always the best code. In fact, the most cleverly written code is not always the best either if no one can be clever enough to figure it out. The best code is simple, straight to the point, and easy to understand.

This contest = fail.

  • Like 1
  • 0

Sure. It's a cleaned up version of the original and there are things I would change (such as the function names). It also uses mysql_pconnect for persistent connections. Included is even a method to automatically backup the database and prompt a download.

&lt;?php
global $DB_HOST, $DB_DB, $DB_USER, $DB_PASS, $DB_PORT;
$DB_HOST	= 'localhost';
$DB_DB		= 'database';
$DB_USER	= 'username';
$DB_PASS	= 'password';
$DB_PORT	= 3306;

function db_connect()
{
	global $DB_HOST, $DB_DB, $DB_USER, $DB_PASS;

	if(!function_exists('mysql_pconnect'))
		die('MySQL, a critical component for this site, is not accessible through PHP. Contact your system administrator or web host for more details.');

	$_SESSION['db'] = @mysql_pconnect($DB_HOST, $DB_USER, $DB_PASS);

	if(!$_SESSION['db'])
		die('Unable to establish a connection to the database. Contact your system administrator.');

	@mysql_select_db($DB_DB, $_SESSION['db']);
}

function db_backup()
{
	$filename = $_SERVER['HTTP_HOST'] . '_' . date('YmdHi') . '.sql.gz';
	$file = '/tmp/'.$filename;

	passthru("mysqldump --user=$DB_USER --password=$DB_PASS --host=$DB_HOST $DB_DB | gzip &gt; $file");

	$file_part = explode('/', $file);

	header('Content-Description: File Transfer');
	header('Content-Type: application/octet-stream');
	header('Content-Length: ' . (string)(filesize($file)));
	header('Content-Disposition: attachment; filename=' . $file_part[(count($file_part) - 1)]);

	readfile($file);
}

function db_escape($var)
{
	return @mysql_escape_string($var);
}

function db_write($q)
{
	$rs = db_query($q);
	return $rs ? 1 : 0;
}

function db_query($q)
{
	if(!isset($_SESSION['db']) || !$_SESSION['db'])
		db_connect();

	if(!@is_resource($_SESSION['db']))
		db_error('Not connected to a database. Cannot execute query.');

	if(isset($_SESSION['queries']))
		$_SESSION['queries'][] = $q;

	if(!$return = @mysql_query($q, $_SESSION['db']))
		db_error('Could not execute the following query&lt;br /&gt;' . "\n" . '&lt;pre id="query"&gt;' . $q . '&lt;/pre&gt;' . mysql_error($_SESSION['db']));

	return $return;
}

function db_fetch_all($q, $fetch = DB_ASSOC)
{
	$rs = db_query($q);

	switch($fetch)
	{
		case DB_ROW:
			$function = 'mysql_fetch_row';
			break;
		case DB_ARRAY:
			$function = 'mysql_fetch_array';
			break;
		case DB_ASSOC:
		default:
			$function = 'mysql_fetch_assoc';
			break;
	}

	$return = array();

	while($row = @$function($rs))
		$return[] = $row;

	return $return;
}

function db_fetch_one($q)
{
	$rs = db_query($q);
	$row = @mysql_fetch_assoc($rs);

	return count($row) ? $row : 0;
}

function db_count($q)
{
	$rs = db_query($q);
	$row = @mysql_fetch_row($rs);

	return count($row) ? $row[0] : 0;
}

function db_error($err)
{
	// included a file that would read $err inside of the site's content
	exit;
}
?&gt;

  • 0

Hi, I would like to post some of my codes.. This codes are from my site ^^

  Quote
function blogwrite($title, $author, $date, $content, $postnumber) {

echo "<center><div align=\"left\" style=\"width: 540\"><a href=\"index.php?p=comment&post=".$postnumberclass=\"title\" ><b class=\"title\">".$title."</b></center></a>";

echo "<div class='stamp'>Post: ".$postnumber;

echo " - ".$date;

echo " - Written by: ".$author."</div>";

echo "<br >       <p ><font color=\"white\">".$content."</font></p></div></center><br >";

echo "<div align='right'><a class='B' href=\"index.php?p=comment&post=".$postnumber><b>Comments(";

$sqldata = mysql_query("SELECT * FROM comment WHERE page=$postnumber") or die("Can't Retrieve Data");

$rows = mysql_num_rows($sqldata);

echo $rows.")</b></a></div></div>";

echo '<br ><center><div style="border-top: 2px double white;width: 500;"></div></center><br >';

}

The above code is a function.. It is the one that writes on the blog.. How it is order, where title will be positioned, and such...

  Quote
$sqldata = mysql_query("SELECT * FROM blogtable") or die("Can't Retrieve Data");

$rows = mysql_num_rows($sqldata);

$a = $rows;

if (isset($_GET['pages'])) {

$a = $a - (($_GET['pages'] - 1) * 10);

if ($a < 10) {

$b = 0;

} else {

$b = $a - 10;

}

while ($a != $b) {

$sqldata = mysql_query("SELECT * FROM blogtable WHERE postnumber=$a");

$data = mysql_fetch_array($sqldata);

blogwrite($data['title'], $data['author'], $data['date'], $data['content'], $data['postnumber']);

$a--;

}

} elseif ($a > 10) {

$b = $a - 10;

while ($a != $b) {

$sqldata = mysql_query("SELECT * FROM blogtable WHERE postnumber=$a");

$data = mysql_fetch_array($sqldata);

blogwrite($data['title'], $data['author'], $data['date'], $data['content'], $data['postnumber']);

$a--;

}

}

else {

while ($a != 0) {

$sqldata = mysql_query("SELECT * FROM blogtable WHERE postnumber=$a");

$data = mysql_fetch_array($sqldata);

blogwrite($data['title'], $data['author'], $data['date'], $data['content'], $data['postnumber']);

$a--;

}

}

$c = $rows;

$d = 0;

echo "<br ><b><font size=\"1\"><div><center>|</b>";

while ($c != 0) {

$d++;

if ($d == 1 and !isset($_GET['pages'])) {

echo "<b>".$d."| </b>";

} elseif ($d == $_GET['pages']) {

echo "<b>".$d."| </b>";

} else {

echo "<b><a href=\"index.php?pages=".$d>".$d."</a> | </b>";

}

if ($c < 10) {

$c = 0;

} else {

$c = $c - 10;

}

}

The code above organizes the blog entries from pages to pages ^^

See the result of this code in my site http://media6.site88.net

  • 0

This is a part of my Kubix cms.. its over 2 years old, havn't worked on it lately.

&lt;?PHP
////////////////////////////////////////////////////////
//		KUBIX CMS		//						 //
//	  Copyright (C)	  // KUBIX IS FREE SOFTWARE! //
//	  KUBIX PROJECT	  //	 DONT PAY FOR IT	 //
//   ALL RIGHTS RESERVED   //						 //
////////////////////////////////////////////////////////

// Include core files
include "Core/connect.php";
include "Core/functions.php";

// Connect
connect($server, $user, $password, $database);

// Get the options from the kbx_options table
$GetOpts = mysql_query("SELECT * FROM kbx_options");
$SiteName = mysql_result($GetOpts, 0, "SiteName");
$SiteURL = mysql_result($GetOpts, 0, "SiteURL");
$DefaultCat = mysql_result($GetOpts, 0, "DefaultCat");
$DefaultTheme = mysql_result($GetOpts, 0, "DefaultTheme");
$Announcement = mysql_result($GetOpts, 0, "Announcement");
$GuestMSG = mysql_result($GetOpts, 0, "GuestMSG");
$AdSection1 = mysql_result($GetOpts, 0, "AdSection1");
$AdSection2 = mysql_result($GetOpts, 0, "AdSection2");
$AdSection3 = mysql_result($GetOpts, 0, "AdSection3");
$AdSection4 = mysql_result($GetOpts, 0, "AdSection4");

// Get the links from the databse
$GetLinks = mysql_query("SELECT * FROM kbx_links");
$num = mysql_num_rows($GetLinks);

$Links = "";

for($i = 0; $i &lt; $num; $i++)
{
	$LinkTitle = mysql_result($GetLinks, $i, "Title");
	$LinkURL = mysql_result($GetLinks, $i, "URL");

	$Links .= '&lt;a href="' . $LinkURL . '"&gt;' . $LinkTitle . '&lt;/a&gt;&lt;br /&gt;';
}

// Get the categories from the database
$GetCats = mysql_query("SELECT * FROM kbx_cats WHERE Type = 'news'");
$num = mysql_num_rows($GetCats);

$Cats = "";

for($i = 0; $i &lt; $num; $i++)
{
	$CatID = mysql_result($GetCats, $i, "ID");
	$CatName = mysql_result($GetCats, $i, "Name");

	$Cats .= '&lt;a href="index.php?cat=' . $CatID . '"&gt;' . $CatName . '&lt;/a&gt;&lt;br /&gt;';
}

// Get the menu from the databse
$GetMenu = mysql_query("SELECT * FROM kbx_menu");
$num = mysql_num_rows($GetMenu);

$Menu = "";

for($i = 0; $i &lt; $num; $i++)
{
	$MenuTitle = mysql_result($GetMenu, $i, "Title");
	$MenuLinks = mysql_result($GetMenu, $i, "Links");

	$MenuLinks = str_replace('{MENULINKS}', $Links, $MenuLinks);
	$MenuLinks = str_replace('{MENUCATS}', $Cats, $MenuLinks);

	$Menu .= '&lt;div class="menutitle"&gt;' . $MenuTitle . '&lt;/div&gt;';
	$Menu .= '&lt;div class="menu"&gt;' . $MenuLinks . '&lt;/div&gt;';
}

// Handel Logout
if(isset($_GET['act']) &amp;&amp; $_GET['act'] == "Logout")
	header("Location:Core/LoginAuth.php?act=Logout");

// Get user information
if(isLoggedIn())
{
	$uID = $_COOKIE['member_id'];	
	$GetUserInfo = mysql_query("SELECT * FROM kbx_members WHERE id = $uID");
	$uName = mysql_result($GetUserInfo, 0, 'Name');
	$uEmail = mysql_result($GetUserInfo, 0, 'Email');
	$uMSN = mysql_result($GetUserInfo, 0, 'MSN');
	$uYahoo = mysql_result($GetUserInfo, 0, 'Yahoo');
	$uAIM = mysql_result($GetUserInfo, 0, 'AIM');
	$uOtherIM = mysql_result($GetUserInfo, 0, 'OtherIM');
	$uJoined = mysql_result($GetUserInfo, 0, 'Joined');
	$uHomePage = mysql_result($GetUserInfo, 0, 'HomePage');
	$uLevel = mysql_result($GetUserInfo, 0, 'Level');

	if($uHomePage != 0 || $uHomePage != NULL)
		$DefaultCat = $uHomePage;

	// Prepare user level
	$getlev = mysql_query("SELECT * FROM kbx_levels WHERE ID = $uLevel");

	$userLevel = mysql_result($getlev, 0, "Title");
	$uViewSite = mysql_result($getlev, 0, "ViewSite");
	$uComment = mysql_result($getlev, 0, "Comment");
	$uAddNews = mysql_result($getlev, 0, "AddNews");
	$uEditNews = mysql_result($getlev, 0, "EditNews");
	$uEditOwnProfile = mysql_result($getlev, 0, "EditOwnProfile");
	$uEditOtherProfile = mysql_result($getlev, 0, "EditOtherProfile");
}

// Prepare guest message
if(!isLoggedIn())
{
	if($GuestMSG != "")
	{
		$WelcomeGuest = '&lt;div id="GuestMSG"&gt;' . $GuestMSG . '&lt;/div&gt;' . "\n";
	}
	else
		$WelcomeGuest = '';
}
else
	$WelcomeGuest = '';

// Prepare announcement
if($Announcement != "")
{
	if(isAdm())
		$AnnouncementAdm = '&lt;div class="fright"&gt;[&lt;a href="admin.php?mod=opts">Edit</a>;/div&gt;';
	else
		$AnnouncementAdm = '';

	$Announcement = '&lt;div class="alert"&gt;' . $AnnouncementAdm . $Announcement . '&lt;/div&gt;' . "\n";
}
else
	$Announcement = '';

// Prepare userbar
if(isLoggedIn())
{
	if(isMod())
		$UserBarLinks = '&lt;a href="cp/"&gt;Control Panel&lt;/a&gt; · ';
	else
		$UserBarLinks = '';

	$UserBar = '&lt;div class="fright"&gt;' . $UserBarLinks . '&lt;a href="index.php?act=Logout">Logout</a></div>Welcome;a href="profile.php">$uName . '&lt;/a&gt;';
}
else
	$UserBar = 'Welcome: Guest (&lt;a href="login.php">Login</a>lt;a href="register.php">Register</a>
include "Themes/$DefaultTheme/header.php";
?&gt;

  • 0
  Mathachew said:
Well in the case of using PHP with MySQL, there's no reason the whole process has to be complex at all. A set of db container functions or even a db class that are unique to different types of databases could be created that make connecting, executing queries, and fetching data simple. One thing I loved about what I had pieced together was that the following line would connect if needed, execute a query, and fetch the results:

$users = dbFetchAll('SELECT * FROM users ORDER BY username;');

I mention this because, again, it doesn't have to be complex, nor should it be.

Exactly... sometimes the complexity of the code and the skill level of the programmer is found in the simplicity of their code.

Amatuers always tend to find the most difficult way of doing things that are usually very simple. Why write 50 lines of code for something that can be done with 10?

  • 0

howdy.

Firstly hello.

Saw this contest was closed, but though a late entrant may be allowed.

The following is not my code, but is the most complex code I have seen. I've tried to decipher it line by line a few times but never had any success.

I stumbled across it whilst looking at latent semantic indexing. Something used by search engines.

Basically, you take a term/document matrix and calculate the singular value decomposition. You can then use the matrices calculated to identify similar documents -e.g. google's similar pages link.

This php version is only useful for small matrices, so wasn't useful for what I needed it for. Anyhow it works, is complex and fits on two pages if you remove comments and change the font size to about 4 :).

hope you like

&lt;?php
/**
* @package JAMA
*
* For an m-by-n matrix A with m &gt;= n, the singular value decomposition is
* an m-by-n orthogonal matrix U, an n-by-n diagonal matrix S, and
* an n-by-n orthogonal matrix V so that A = U*S*V'.
*
* The singular values, sigma[$k] = S[$k][$k], are ordered so that
* sigma[0] &gt;= sigma[1] &gt;= ... &gt;= sigma[n-1].
*
* The singular value decompostion always exists, so the constructor will
* never fail.  The matrix condition number and the effective numerical
* rank can be computed from this decomposition.
*
* @author  Paul Meagher
* @license PHP v3.0
* @version 1.1
*/
class SingularValueDecomposition  {

  /**
  * Internal storage of U.
  * @var array
  */
  var $U = array();

  /**
  * Internal storage of V.
  * @var array
  */
  var $V = array();

  /**
  * Internal storage of singular values.
  * @var array
  */
  var $s = array();

  /**
  * Row dimension.
  * @var int
  */
  var $m;

  /**
  * Column dimension.
  * @var int
  */
  var $n;

  /**
  * Construct the singular value decomposition
  *
  * Derived from LINPACK code.
  *
  * @param $A Rectangular matrix
  * @return Structure to access U, S and V.
  */
  function SingularValueDecomposition ($Arg) {

	// Initialize.

	$A = $Arg-&gt;getArrayCopy();
	$this-&gt;m = $Arg-&gt;getRowDimension();
	$this-&gt;n = $Arg-&gt;getColumnDimension();
	$nu	  = min($this-&gt;m, $this-&gt;n);
	$e	   = array();
	$work	= array();
	$wantu   = true;
	$wantv   = true;	  
	$nct = min($this-&gt;m - 1, $this-&gt;n);
	$nrt = max(0, min($this-&gt;n - 2, $this-&gt;m));   

	// Reduce A to bidiagonal form, storing the diagonal elements
	// in s and the super-diagonal elements in e.

	for ($k = 0; $k &lt; max($nct,$nrt); $k++) {

	  if ($k &lt; $nct) {
		// Compute the transformation for the k-th column and
		// place the k-th diagonal in s[$k].
		// Compute 2-norm of k-th column without under/overflow.
		$this-&gt;s[$k] = 0;
		for ($i = $k; $i &lt; $this-&gt;m; $i++)
		  $this-&gt;s[$k] = hypo($this-&gt;s[$k], $A[$i][$k]);
		if ($this-&gt;s[$k] != 0.0) {
		  if ($A[$k][$k] &lt; 0.0)
			$this-&gt;s[$k] = -$this-&gt;s[$k];
		  for ($i = $k; $i &lt; $this-&gt;m; $i++)
			$A[$i][$k] /= $this-&gt;s[$k];
		  $A[$k][$k] += 1.0;
		}
		$this-&gt;s[$k] = -$this-&gt;s[$k];
	  }		   

	  for ($j = $k + 1; $j &lt; $this-&gt;n; $j++) {
		if (($k &lt; $nct) &amp; ($this-&gt;s[$k] != 0.0)) {
		  // Apply the transformation.
		  $t = 0;
		  for ($i = $k; $i &lt; $this-&gt;m; $i++)
			$t += $A[$i][$k] * $A[$i][$j];
		  $t = -$t / $A[$k][$k];
		  for ($i = $k; $i &lt; $this-&gt;m; $i++)
			$A[$i][$j] += $t * $A[$i][$k];
		  // Place the k-th row of A into e for the
		  // subsequent calculation of the row transformation.
		  $e[$j] = $A[$k][$j];
		}
	  }

	  if ($wantu AND ($k &lt; $nct)) {
		// Place the transformation in U for subsequent back
		// multiplication.
		for ($i = $k; $i &lt; $this-&gt;m; $i++)
		  $this-&gt;U[$i][$k] = $A[$i][$k];
	  }

	  if ($k &lt; $nrt) {
		// Compute the k-th row transformation and place the
		// k-th super-diagonal in e[$k].
		// Compute 2-norm without under/overflow.
		$e[$k] = 0;
		for ($i = $k + 1; $i &lt; $this-&gt;n; $i++)
		  $e[$k] = hypo($e[$k], $e[$i]);
		if ($e[$k] != 0.0) {
		  if ($e[$k+1] &lt; 0.0)
			$e[$k] = -$e[$k];
		  for ($i = $k + 1; $i &lt; $this-&gt;n; $i++)
			$e[$i] /= $e[$k];
		  $e[$k+1] += 1.0;
		}
		$e[$k] = -$e[$k];
		if (($k+1 &lt; $this-&gt;m) AND ($e[$k] != 0.0)) {
		  // Apply the transformation.
		  for ($i = $k+1; $i &lt; $this-&gt;m; $i++)
			$work[$i] = 0.0;
		  for ($j = $k+1; $j &lt; $this-&gt;n; $j++)
			for ($i = $k+1; $i &lt; $this-&gt;m; $i++)
			  $work[$i] += $e[$j] * $A[$i][$j];
		  for ($j = $k + 1; $j &lt; $this-&gt;n; $j++) {
			$t = -$e[$j] / $e[$k+1];
			for ($i = $k + 1; $i &lt; $this-&gt;m; $i++)
			  $A[$i][$j] += $t * $work[$i];
		  }
		}
		if ($wantv) {
		  // Place the transformation in V for subsequent
		  // back multiplication.
		  for ($i = $k + 1; $i &lt; $this-&gt;n; $i++)
			$this-&gt;V[$i][$k] = $e[$i];
		}		
	  }
	} 

	// Set up the final bidiagonal matrix or order p.
	$p = min($this-&gt;n, $this-&gt;m + 1);
	if ($nct &lt; $this-&gt;n)
	  $this-&gt;s[$nct] = $A[$nct][$nct];
	if ($this-&gt;m &lt; $p)
	  $this-&gt;s[$p-1] = 0.0;
	if ($nrt + 1 &lt; $p)
	  $e[$nrt] = $A[$nrt][$p-1];
	$e[$p-1] = 0.0;
	// If required, generate U.
	if ($wantu) {
	  for ($j = $nct; $j &lt; $nu; $j++) {
		for ($i = 0; $i &lt; $this-&gt;m; $i++)
		  $this-&gt;U[$i][$j] = 0.0;
		$this-&gt;U[$j][$j] = 1.0;
	  }
	  for ($k = $nct - 1; $k &gt;= 0; $k--) {
		if ($this-&gt;s[$k] != 0.0) {
		  for ($j = $k + 1; $j &lt; $nu; $j++) {
			$t = 0;
			for ($i = $k; $i &lt; $this-&gt;m; $i++)
			  $t += $this-&gt;U[$i][$k] * $this-&gt;U[$i][$j];
			$t = -$t / $this-&gt;U[$k][$k];
			for ($i = $k; $i &lt; $this-&gt;m; $i++)
			  $this-&gt;U[$i][$j] += $t * $this-&gt;U[$i][$k];
		  }
		  for ($i = $k; $i &lt; $this-&gt;m; $i++ )
			$this-&gt;U[$i][$k] = -$this-&gt;U[$i][$k];
		  $this-&gt;U[$k][$k] = 1.0 + $this-&gt;U[$k][$k];
		  for ($i = 0; $i &lt; $k - 1; $i++)
			 $this-&gt;U[$i][$k] = 0.0;
		 } else {
		   for ($i = 0; $i &lt; $this-&gt;m; $i++)
			 $this-&gt;U[$i][$k] = 0.0;
		   $this-&gt;U[$k][$k] = 1.0;
		 }
	  }
	}

	// If required, generate V.
	if ($wantv) {
	  for ($k = $this-&gt;n - 1; $k &gt;= 0; $k--) {
		if (($k &lt; $nrt) AND ($e[$k] != 0.0)) {
		  for ($j = $k + 1; $j &lt; $nu; $j++) {
			$t = 0;
			for ($i = $k + 1; $i &lt; $this-&gt;n; $i++)
			  $t += $this-&gt;V[$i][$k]* $this-&gt;V[$i][$j];
			$t = -$t / $this-&gt;V[$k+1][$k];
			for ($i = $k + 1; $i &lt; $this-&gt;n; $i++)
			  $this-&gt;V[$i][$j] += $t * $this-&gt;V[$i][$k];
		  }
		}
		for ($i = 0; $i &lt; $this-&gt;n; $i++)
		   $this-&gt;V[$i][$k] = 0.0;
		$this-&gt;V[$k][$k] = 1.0;
	  }
	}

	// Main iteration loop for the singular values.
	$pp   = $p - 1;
	$iter = 0;
	$eps  = pow(2.0, -52.0);
	while ($p &gt; 0) {	  

	  // Here is where a test for too many iterations would go.
	  // This section of the program inspects for negligible
	  // elements in the s and e arrays.  On completion the
	  // variables kase and k are set as follows:
	  // kase = 1  if s(p) and e[k-1] are negligible and k&lt;p
	  // kase = 2  if s(k) is negligible and k&lt;p
	  // kase = 3  if e[k-1] is negligible, k&lt;p, and
	  //		   s(k), ..., s(p) are not negligible (qr step).
	  // kase = 4  if e(p-1) is negligible (convergence).

	  for ($k = $p - 2; $k &gt;= -1; $k--) {
		if ($k == -1)
		  break;
		if (abs($e[$k]) &lt;= $eps * (abs($this-&gt;s[$k]) + abs($this-&gt;s[$k+1]))) {
		  $e[$k] = 0.0;
		  break;
		}
	  }
	  if ($k == $p - 2)
		$kase = 4;
	  else {
		for ($ks = $p - 1; $ks &gt;= $k; $ks--) {
		  if ($ks == $k)
			break;
		  $t = ($ks != $p ? abs($e[$ks]) : 0.) + ($ks != $k + 1 ? abs($e[$ks-1]) : 0.);
		  if (abs($this-&gt;s[$ks]) &lt;= $eps * $t)  {
			$this-&gt;s[$ks] = 0.0;
			break;
		  }
		}
		if ($ks == $k)
		   $kase = 3;
		else if ($ks == $p-1)
		   $kase = 1;
		else {
		   $kase = 2;
		   $k = $ks;
		}
	  }
	  $k++;

	  // Perform the task indicated by kase.
	  switch ($kase) {
		 // Deflate negligible s(p).
		 case 1:
		   $f = $e[$p-2];
		   $e[$p-2] = 0.0;
		   for ($j = $p - 2; $j &gt;= $k; $j--) {
			 $t  = hypo($this-&gt;s[$j],$f);
			 $cs = $this-&gt;s[$j] / $t;
			 $sn = $f / $t;
			 $this-&gt;s[$j] = $t;
			 if ($j != $k) {
			   $f = -$sn * $e[$j-1];
			   $e[$j-1] = $cs * $e[$j-1];
			 }
			 if ($wantv) {
			   for ($i = 0; $i &lt; $this-&gt;n; $i++) {
				 $t = $cs * $this-&gt;V[$i][$j] + $sn * $this-&gt;V[$i][$p-1];
				 $this-&gt;V[$i][$p-1] = -$sn * $this-&gt;V[$i][$j] + $cs * $this-&gt;V[$i][$p-1];
				 $this-&gt;V[$i][$j] = $t;
			   }
			 }
		   }
		   break;
		 // Split at negligible s(k).
		 case 2:
		   $f = $e[$k-1];
		   $e[$k-1] = 0.0;
		   for ($j = $k; $j &lt; $p; $j++) {
			 $t = hypo($this-&gt;s[$j], $f);
			 $cs = $this-&gt;s[$j] / $t;
			 $sn = $f / $t;
			 $this-&gt;s[$j] = $t;
			 $f = -$sn * $e[$j];
			 $e[$j] = $cs * $e[$j];
			 if ($wantu) {
			   for ($i = 0; $i &lt; $this-&gt;m; $i++) {
				 $t = $cs * $this-&gt;U[$i][$j] + $sn * $this-&gt;U[$i][$k-1];
				 $this-&gt;U[$i][$k-1] = -$sn * $this-&gt;U[$i][$j] + $cs * $this-&gt;U[$i][$k-1];
				 $this-&gt;U[$i][$j] = $t;
			   }
			 }
		   }
		   break;		   
		 // Perform one qr step.
		 case 3:				  
		   // Calculate the shift.						  
		   $scale = max(max(max(max(
					abs($this-&gt;s[$p-1]),abs($this-&gt;s[$p-2])),abs($e[$p-2])),
					abs($this-&gt;s[$k])), abs($e[$k]));
		   $sp   = $this-&gt;s[$p-1] / $scale;
		   $spm1 = $this-&gt;s[$p-2] / $scale;
		   $epm1 = $e[$p-2] / $scale;
		   $sk   = $this-&gt;s[$k] / $scale;
		   $ek   = $e[$k] / $scale;
		   $b	= (($spm1 + $sp) * ($spm1 - $sp) + $epm1 * $epm1) / 2.0;
		   $c	= ($sp * $epm1) * ($sp * $epm1);
		   $shift = 0.0;
		   if (($b != 0.0) || ($c != 0.0)) {
			 $shift = sqrt($b * $b + $c);
			 if ($b &lt; 0.0)
			   $shift = -$shift;
			 $shift = $c / ($b + $shift);
		   }
		   $f = ($sk + $sp) * ($sk - $sp) + $shift;
		   $g = $sk * $ek;  
		   // Chase zeros.  
		   for ($j = $k; $j &lt; $p-1; $j++) {
			 $t  = hypo($f,$g);
			 $cs = $f/$t;
			 $sn = $g/$t;
			 if ($j != $k)
			   $e[$j-1] = $t;
			 $f = $cs * $this-&gt;s[$j] + $sn * $e[$j];
			 $e[$j] = $cs * $e[$j] - $sn * $this-&gt;s[$j];
			 $g = $sn * $this-&gt;s[$j+1];
			 $this-&gt;s[$j+1] = $cs * $this-&gt;s[$j+1];
			 if ($wantv) {
			   for ($i = 0; $i &lt; $this-&gt;n; $i++) {
				 $t = $cs * $this-&gt;V[$i][$j] + $sn * $this-&gt;V[$i][$j+1];
				 $this-&gt;V[$i][$j+1] = -$sn * $this-&gt;V[$i][$j] + $cs * $this-&gt;V[$i][$j+1];
				 $this-&gt;V[$i][$j] = $t;
			   }
			 }																	  
			 $t = hypo($f,$g);
			 $cs = $f/$t;
			 $sn = $g/$t;
			 $this-&gt;s[$j] = $t;
			 $f = $cs * $e[$j] + $sn * $this-&gt;s[$j+1];
			 $this-&gt;s[$j+1] = -$sn * $e[$j] + $cs * $this-&gt;s[$j+1];
			 $g = $sn * $e[$j+1];
			 $e[$j+1] = $cs * $e[$j+1];
			 if ($wantu &amp;&amp; ($j &lt; $this-&gt;m - 1)) {
			   for ($i = 0; $i &lt; $this-&gt;m; $i++) {
				 $t = $cs * $this-&gt;U[$i][$j] + $sn * $this-&gt;U[$i][$j+1];
				 $this-&gt;U[$i][$j+1] = -$sn * $this-&gt;U[$i][$j] + $cs * $this-&gt;U[$i][$j+1];
				 $this-&gt;U[$i][$j] = $t;
			   }
			 }				
		   }
		   $e[$p-2] = $f;
		   $iter = $iter + 1;
		   break;
		 // Convergence.
		 case 4:
		   // Make the singular values positive.
		   if ($this-&gt;s[$k] &lt;= 0.0) {
			 $this-&gt;s[$k] = ($this-&gt;s[$k] &lt; 0.0 ? -$this-&gt;s[$k] : 0.0);
			 if ($wantv) {
			   for ($i = 0; $i &lt;= $pp; $i++)
				 $this-&gt;V[$i][$k] = -$this-&gt;V[$i][$k];
			 }
		   }
		   // Order the singular values.  
		   while ($k &lt; $pp) {
			if ($this-&gt;s[$k] &gt;= $this-&gt;s[$k+1])
			  break;
			$t = $this-&gt;s[$k];
			$this-&gt;s[$k] = $this-&gt;s[$k+1];
			$this-&gt;s[$k+1] = $t;
			if ($wantv AND ($k &lt; $this-&gt;n - 1)) {
			  for ($i = 0; $i &lt; $this-&gt;n; $i++) {
				$t = $this-&gt;V[$i][$k+1];
				$this-&gt;V[$i][$k+1] = $this-&gt;V[$i][$k];
				$this-&gt;V[$i][$k] = $t;
			  }
			}
			if ($wantu AND ($k &lt; $this-&gt;m-1)) {
			  for ($i = 0; $i &lt; $this-&gt;m; $i++) {
				$t = $this-&gt;U[$i][$k+1];
				$this-&gt;U[$i][$k+1] = $this-&gt;U[$i][$k];
				$this-&gt;U[$i][$k] = $t;
			  }
			}
			$k++;
		   }
		   $iter = 0;
		   $p--;
		   break;								   
	  } // end switch	  
	} // end while

	/*
	echo "&lt;p&gt;Output A&lt;/p&gt;";   
	$A = new Matrix($A);		
	$A-&gt;toHTML();

	echo "&lt;p&gt;Matrix U&lt;/p&gt;";	
	echo "&lt;pre&gt;";
	print_r($this-&gt;U);		
	echo "&lt;/pre&gt;";

	echo "&lt;p&gt;Matrix V&lt;/p&gt;";	
	echo "&lt;pre&gt;";
	print_r($this-&gt;V);		
	echo "&lt;/pre&gt;";	

	echo "&lt;p&gt;Vector S&lt;/p&gt;";	
	echo "&lt;pre&gt;";
	print_r($this-&gt;s);		
	echo "&lt;/pre&gt;";	
	exit;
	*/

  } // end constructor

  /**
  * Return the left singular vectors
  * @access public
  * @return U
  */
  function getU() {
	return new Matrix($this-&gt;U, $this-&gt;m, min($this-&gt;m + 1, $this-&gt;n));
  }

  /**
  * Return the right singular vectors
  * @access public   
  * @return V
  */
  function getV() {
	return new Matrix($this-&gt;V);
  }

  /**
  * Return the one-dimensional array of singular values
  * @access public   
  * @return diagonal of S.
  */
  function getSingularValues() {
	return $this-&gt;s;
  }

  /**
  * Return the diagonal matrix of singular values
  * @access public   
  * @return S
  */
  function getS() {
	for ($i = 0; $i &lt; $this-&gt;n; $i++) {
	  for ($j = 0; $j &lt; $this-&gt;n; $j++)
		$S[$i][$j] = 0.0;
	  $S[$i][$i] = $this-&gt;s[$i];
	}
	return new Matrix($S);
  }

  /**
  * Two norm
  * @access public   
  * @return max(S)
  */
  function norm2() {
	return $this-&gt;s[0];
  }

  /**
  * Two norm condition number
  * @access public   
  * @return max(S)/min(S)
  */
  function cond() {
	return $this-&gt;s[0] / $this-&gt;s[min($this-&gt;m, $this-&gt;n) - 1];
  }

  /**
  * Effective numerical matrix rank
  * @access public   
  * @return Number of nonnegligible singular values.
  */
  function rank() {
	$eps = pow(2.0, -52.0);
	$tol = max($this-&gt;m, $this-&gt;n) * $this-&gt;s[0] * $eps;
	$r = 0;
	for ($i = 0; $i &lt; count($this-&gt;s); $i++) {
	  if ($this-&gt;s[$i] &gt; $tol)
		$r++;
	}
	return $r;
  }
}
?&gt;

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Stylish Samsung Galaxy S25 Edge gets 20% discount sending it to lowest price by Paul Hill If you’re in the market for a powerful, stylish phone, then you may be interested in the Galaxy S25 Edge, which is now reduced to $969.99, down 20% from the $1,219.99 list price. This is the lowest price that the device has been at on Amazon. You can get the device at this price if you go for the Titanium Icyblue or Titanium Silver editions. These models are the top-end S25 Edge variants with 512GB of storage. While this Samsung device may be about as thick as a pencil, it’s constructed from titanium and uses Corning Gorilla Glass Ceramic 2 on the display. This should ensure durability, despite its thin design. The thickness of this phone is just 5.8mm, and it weighs 163g. Camera capabilities and AI enhancements The Galaxy S25 Edge's camera system is impressive. It has a 200MP main camera with optical image stabilization and a 2x optical quality zoom. This feature magnifies the image using optical mechanisms in the camera lens so that the zoomed image retains its original clarity, detail, and resolution of the scene. On the back, there is also a 12MP ultrawide camera with autofocus and on the front, there’s a 12MP camera. Like many phones coming out now, there are AI-powered camera features such as Night Video, Best Face for group shots, Portrait Selfie, and Gallery Search by description. Notably, there is no dedicated telephoto lens like in the S25+ and S25 Ultra. This is a tradeoff that the company decided to make to achieve its ultrathin design. Telephoto lenses are camera lenses that are designed to make distant objects appear closer and larger in your photos and videos. The absence of this telephoto lens may be a deal breaker for those looking to use this camera for professional shots; otherwise, it’s still very impressive, especially with that 200MP main camera. Performance, display, and integrated AI features The S25 Edge is powered by the Snapdragon 8 Elite chipset, specifically the 3-nanometer Qualcomm SM8750-AB. It has an octa-core CPU (2x4.47 GHz Oryon V Phoenix L + 6x3.53 GHz Oryon V2 Phoenix M) and an Adreno 830 GPU. This model's display is a 6.7-inch QHD+ Dynamic AMOLED 2X with a 120Hz adaptive refresh rate and high brightness. This device has plenty of other AI features too, outside of the camera, including Cross App Action, Audio Eraser for videos, Now Brief/Now Bar for personalized information, and of course, Google Gemini. With 12GB of RAM, the specs on this phone are really very good. It should be capable of doing most tasks you throw at it, including gaming. You may wonder if it will handle games well, given that the thin design means it could overheat. Samsung has already thought about this and included a reconfigured vapor chamber that helps to keep the phone cool. Battery life and charging speed: The main compromise Aside from the removal of the telephoto lens, this phone also has a drawback in terms of battery life. Its 3,900 mAh battery capacity means it’s smaller than many other devices, even compared to budget phones. Another disappointing aspect is the charging, where the wired charging speed is limited to 25W—that’s lower than what you find on very affordable Xiaomi POCO devices. This battery limitation might make this device a bad choice if you’re away from a charger for long periods. One affordable way to mitigate this downside is by carrying a portable charger, but still, it’s ironic that you buy a thin phone to be lighter and then end up carrying a brick-sized charger around with you. You could also just bring your charger and plug it into an outlet. Is the Galaxy S25 Edge the smart buy for you? If you’re someone who wants a sleek, lightweight phone that has a premium build and can easily slice through tasks you throw at it, then the Galaxy S25 Edge is very likely for you. It’s also great for anyone looking for a standout camera that doesn’t need a telephoto lens. However, if you need a device with all-day battery life because you’re going camping or to the middle of nowhere, then you could probably find a better fit with a longer battery life. If this device is for you, check out the links below. Samsung Galaxy S25 Edge (Titanium Icyblue): $969.99 (Amazon US) / MSRP $1,219.99 Samsung Galaxy S25 Edge (Titanium Silver): $969.99 (Amazon US) / MSRP $1,219.99 This Amazon deal is US-specific and not available in other regions unless specified. If you don't like it or want to look at more options, check out the Amazon US deals page here. Get Prime (SNAP), Prime Video, Audible Plus or Kindle / Music Unlimited. Free for 30 days. As an Amazon Associate, we earn from qualifying purchases.
    • I got too many apps I use actively. Theres been too often I completely blank on the name of the application and had to manually look through the list for it. Now I'm using Start11 and got my apps sorted in the Start menu by categories so that if I'm looking for Krita i can find it under "Art editors". If MS are going to change it, they should consider making automated categories. Seen some Linux distros do that. But if they do, theres probably gonna be a lot of wrongly categorized apps though, unfortunately.
    • LAV Filters 0.80.0 by Razvan Serea LAVFSplitter is a multi-format media splitter that uses libavformat (the demuxing library from ffmpeg) to demux all sorts of media files. LAV Splitter is a Souce Filter/Splitter required to demux the files into their separate elementary streams. LAV Audio and Video Decoder are powerful decoders with a focus on quality and performance, without any compromises. Supported Formats: MKV/WebM, AVI, MP4/MOV, MPEG-TS/PS (including basic EVO support), FLV, OGG, and many more that are supported by ffmpeg! LAV Filters are based on ffmpeg and libbluray and is aimed to offer a all-around solution to perfect playback of file-based Media as well as Blu-rays. LAV Filters 0.80.0 changelog: LAV Splitter NEW: Introduced the IURLSourceFilterLAV interface to allow opening URLs with custom user agent and referrer NEW: Added support for WebP images Changed: Increased the length of the advanced subtitle selection field, so its no longer cut off after 255 characters Changed: Improved buffering behavior on badly interleaved video files Fixed: Audio streams with an unknown/unsupported codec are no longer selected for playback, as long as others are present Fixed: Improved accuracy of reported FPS from AviSynth scripts LAV Video NEW: D3D11 support for HEVC 4:2:2 and 4:4:4 hardware decoding NEW: Dolby Vision extension metadata is exported for renderers to use Changed: Added additional media types to support more video streams Changed: Updated dav1d for significant AV1 decoding improvements Fixed: Improved handling of H.264 4:4:4 files encoded by certain versions of x264 Fixed: VP9 DXVA2/D3D11 decoding could result in artifacts on some clips Fixed: Decoding ProRes reports more accurate color details LAV Audio Changed: Added support for additional ADPCM audio codecs Download: LAV Filters 0.80.0 | 15.5 MB (Open Source) View: LAV Filters Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Haven't really used it much for years, not specific to Windows 11.. it's there but I mostly ignore it. I do install StartAllBack though bust mostly for the other bits that it brings. I prefer the "alt-space" type launchers (KRunner in Plasma, Flow in Windows or the like), a lot less clutter and more smarts like bookmark/history searches and other useful plugins.
  • Recent Achievements

    • First Post
      emptyother earned a badge
      First Post
    • Week One Done
      Crunchy6 earned a badge
      Week One Done
    • One Month Later
      KynanSEIT earned a badge
      One Month Later
    • One Month Later
      gowtham07 earned a badge
      One Month Later
    • Collaborator
      lethalman went up a rank
      Collaborator
  • Popular Contributors

    1. 1
      +primortal
      675
    2. 2
      ATLien_0
      277
    3. 3
      Michael Scrip
      220
    4. 4
      +FloatingFatMan
      168
    5. 5
      Steven P.
      161
  • Tell a friend

    Love Neowin? Tell a friend!