function genMySQLErr($out, $query = '') { global $site; $aBackTrace = debug_backtrace(); unset($aBackTrace[0]); if ($query) { //try help to find error $aFoundError = array(); foreach ($aBackTrace as $aCall) { foreach ($aCall['args'] as $argNum => $argVal) { if (is_string($argVal) and strcmp($argVal, $query) == 0) { $aFoundError['file'] = $aCall['file']; $aFoundError['line'] = $aCall['line']; $aFoundError['function'] = $aCall['function']; $aFoundError['arg'] = $argNum; } } } if ($aFoundError) { $sFoundError = <<<EOJ <b>Found error</b> in file <b>{$aFoundError['file']}</b><br /> at line <b>{$aFoundError['line']}</b>. Called <b>{$aFoundError['function']}</b> function with erroneous argument #<b>{$aFoundError['arg']}</b><br /> <br /> EOJ; } } if (DB_FULL_VISUAL_PROCESSING) { ?> <div style="border:2px solid red;padding:4px;width:600px;margin:0px auto;"> <div style="text-align:center;background-color:red;color:white;font-weight:bold;">Error</div> <div style="text-align:center;"><?php echo $out; ?> </div> <?php if (DB_FULL_DEBUG_MODE) { if (strlen($query)) { echo "<div><b>Query:</b><br />{$query}</div>"; } echo '<div><b>Mysql error:</b><br />' . mysql_error() . '</div>'; echo '<div style="overflow:scroll;height:300px;border:1px solid gray;">'; echo $sFoundError; echo "<b>Debug backtrace:</b><br />"; echoDbg($aBackTrace); echo "<b>Called script:</b> {$_SERVER['PHP_SELF']}<br />"; echo "<b>Request parameters:</b><br />"; echoDbg($_REQUEST); echo '</div>'; } ?> </div> <?php } else { echo $out; } if (DB_DO_EMAIL_ERROR_REPORT) { $sMailBody = "Database error in <SiteName>\n"; if (strlen($query)) { $sMailBody .= "Query:\n{$query}\n\n"; } $sMailBody .= "Mysql error:\n" . mysql_error() . "\n\n"; $sMailBody .= strip_tags($sFoundError); $sMailBody .= "Debug backtrace:\n" . print_r($aBackTrace, true) . "\n\n"; $sMailBody .= "Called script: {$_SERVER['PHP_SELF']}\n\n"; $sMailBody .= "Request parameters:\n" . print_r($_REQUEST, true) . "\n\n"; $sMailBody .= "--\nAuto-report system\n"; sendMail($site['bugReportMail'], "Database error in <SiteName>", $sMailBody); } exit; }
protected function verboseErrorOutput($query, $sFoundError, &$aBackTrace, $sParamsOutput) { ob_start(); if (!empty($query)) { echo "<div><b>Query:</b><br />{$query}</div>"; } if ($this->_rLink) { echo '<div><b>Mysql error:</b><br />' . $this->getErrorMessage() . '</div>'; } echo '<div style="overflow:scroll;height:300px;border:1px solid gray;">'; echo $sFoundError; echo "<b>Debug backtrace:</b><br />"; $sBackTrace = print_r($aBackTrace, true); $sBackTrace = str_replace('[password] => ' . BX_DATABASE_PASS, '[password] => *****', $sBackTrace); $sBackTrace = str_replace('[user] => ' . BX_DATABASE_USER, '[user] => *****', $sBackTrace); echo '<pre>' . htmlspecialchars_adv($sBackTrace) . '</pre>'; if ($sParamsOutput) { echo '<hr />'; echo "<b>Settings:</b><br />"; echo '<pre>' . htmlspecialchars_adv($sParamsOutput) . '</pre>'; } echo "<b>Called script:</b> " . $_SERVER['PHP_SELF'] . "<br />"; echo "<b>Request parameters:</b><br />"; echoDbg($_REQUEST); echo '</div>'; return ob_get_clean(); }
function genMySQLErr($sOutput, $query = '') { $sParamsOutput = false; $sFoundError = ''; $aBackTrace = debug_backtrace(); unset($aBackTrace[0]); if ($query) { //try help to find error $aFoundError = array(); foreach ($aBackTrace as $aCall) { // truncating global settings since it repeated many times and output it separately if (isset($aCall['object']) && property_exists($aCall['object'], '_aParams')) { if (false === $sParamsOutput) { $sParamsOutput = var_export($aCall['object']->_aParams, true); } $aCall['object']->_aParams = '[truncated]'; } if (isset($aCall['args']) && is_array($aCall['args'])) { foreach ($aCall['args'] as $argNum => $argVal) { if (is_string($argVal) and strcmp($argVal, $query) == 0) { $aFoundError['file'] = isset($aCall['file']) ? $aCall['file'] : (isset($aCall['class']) ? 'class: ' . $aCall['class'] : 'undefined'); $aFoundError['line'] = isset($aCall['line']) ? $aCall['line'] : 'undefined'; $aFoundError['function'] = $aCall['function']; $aFoundError['arg'] = $argNum; } } } } if ($aFoundError) { $sFoundError = <<<EOJ Found error in the file '<b>{$aFoundError['file']}</b>' at line <b>{$aFoundError['line']}</b>.<br /> Called '<b>{$aFoundError['function']}</b>' function with erroneous argument #<b>{$aFoundError['arg']}</b>.<br /><br /> EOJ; } } bx_import('BxDolConfig'); if (defined('BX_DB_FULL_VISUAL_PROCESSING') && BX_DB_FULL_VISUAL_PROCESSING) { ob_start(); ?> <div style="border:2px solid red;padding:4px;width:600px;margin:0px auto;"> <div style="text-align:center;background-color:red;color:white;font-weight:bold;">Error</div> <div style="text-align:center;"><?php echo $sOutput; ?> </div> <?php if (defined('BX_DB_FULL_DEBUG_MODE') && BX_DB_FULL_DEBUG_MODE) { if (!empty($query)) { echo "<div><b>Query:</b><br />{$query}</div>"; } if ($this->_rLink) { echo '<div><b>Mysql error:</b><br />' . $this->getErrorMessage() . '</div>'; } echo '<div style="overflow:scroll;height:300px;border:1px solid gray;">'; echo $sFoundError; echo "<b>Debug backtrace:</b><br />"; $sBackTrace = print_r($aBackTrace, true); $sBackTrace = str_replace('[password] => ' . BX_DATABASE_PASS, '[password] => *****', $sBackTrace); $sBackTrace = str_replace('[user] => ' . BX_DATABASE_USER, '[user] => *****', $sBackTrace); echo '<pre>' . $sBackTrace . '</pre>'; if ($sParamsOutput) { echo '<hr />'; echo "<b>Settings:</b><br />"; echo '<pre>' . htmlspecialchars_adv($sParamsOutput) . '</pre>'; } echo "<b>Called script:</b> " . $_SERVER['PHP_SELF'] . "<br />"; echo "<b>Request parameters:</b><br />"; echoDbg($_REQUEST); echo '</div>'; } ?> </div> <?php $sOutput = ob_get_clean(); } if (defined('BX_DB_DO_EMAIL_ERROR_REPORT') && BX_DB_DO_EMAIL_ERROR_REPORT) { $sSiteTitle = $this->getParam('site_title'); $sMailBody = "Database error in " . $sSiteTitle . "<br /><br /> \n"; if (strlen($query)) { $sMailBody .= "Query: <pre>" . htmlspecialchars_adv($query) . "</pre> "; } if ($this->_rLink) { $sMailBody .= "Mysql error: " . $this->getErrorMessage() . "<br /><br /> "; } $sMailBody .= $sFoundError . '<br /> '; $sBackTrace = print_r($aBackTrace, true); $sBackTrace = str_replace('[password] => ' . BX_DATABASE_PASS, '[password] => *****', $sBackTrace); $sBackTrace = str_replace('[user] => ' . BX_DATABASE_USER, '[user] => *****', $sBackTrace); $sMailBody .= "Debug backtrace:\n <pre>" . htmlspecialchars_adv($sBackTrace) . "</pre> "; if ($sParamsOutput) { $sMailBody .= "<hr />Settings:\n <pre>" . htmlspecialchars_adv($sParamsOutput) . "</pre> "; } $sMailBody .= "<hr />Called script: " . $_SERVER['PHP_SELF'] . "<br /> "; $sMailBody .= "<hr />Request parameters: <pre>" . print_r($_REQUEST, true) . " </pre>"; $sMailBody .= "--\nAuto-report system\n"; sendMail($this->getParam('site_email'), "Database error in " . $sSiteTitle, $sMailBody, 0, array(), BX_EMAIL_SYSTEM, 'html', true); } bx_show_service_unavailable_error_and_exit($sOutput); }
function genMySQLErr($out, $query = '') { global $site; $aBackTrace = debug_backtrace(); unset($aBackTrace[0]); if ($query) { //try help to find error $aFoundError = array(); foreach ($aBackTrace as $aCall) { foreach ($aCall['args'] as $argNum => $argVal) { if (is_string($argVal) and strcmp($argVal, $query) == 0) { $aFoundError['file'] = $aCall['file']; $aFoundError['line'] = $aCall['line']; $aFoundError['function'] = $aCall['function']; $aFoundError['arg'] = $argNum; } } } if ($aFoundError) { $sFoundError = <<<EOJ Found error in the file '<b>{$aFoundError['file']}</b>' at line <b>{$aFoundError['line']}</b>.<br /> Called '<b>{$aFoundError['function']}</b>' function with erroneous argument #<b>{$aFoundError['arg']}</b>.<br /><br /> EOJ; } } if (BX_UPGRADE_DB_FULL_VISUAL_PROCESSING) { ?> <div style="border:2px solid red;padding:4px;width:600px;margin:0px auto;"> <div style="text-align:center;background-color:red;color:white;font-weight:bold;">Error</div> <div style="text-align:center;"><?php echo $out; ?> </div> <?php if (BX_UPGRADE_DB_FULL_DEBUG_MODE) { if (strlen($query)) { echo "<div><b>Query:</b><br />{$query}</div>"; } echo '<div><b>Mysql error:</b><br />' . mysql_error($this->link) . '</div>'; echo '<div style="overflow:scroll;height:300px;border:1px solid gray;">'; echo $sFoundError; echo "<b>Debug backtrace:</b><br />"; echoDbg($aBackTrace); echo "<b>Called script:</b> {$_SERVER['PHP_SELF']}<br />"; echo "<b>Request parameters:</b><br />"; echoDbg($_REQUEST); echo '</div>'; } ?> </div> <?php } else { echo $out; } exit; }
/** * page code function */ function PageCompMainCode() { $oDb = BxDolDb::getInstance(); // config: for data generation $iMutual = 2; // around 2 mutual connections for each profile $iOneWay = 1; // around 1 one-way connections for each profile $sTable = "`sys_profiles_conn_connections`"; // to clean table before inserting genrated data // config: for displaying and data generation $sType = 'bx_persons'; // profiles type $sObject = 'sys_profiles_friends'; // connections object if ('gen' == bx_get('action') || isset($_SERVER['argv'][1]) && 'gen' == $_SERVER['argv'][1]) { echo "\nConnections Generation: <br />\n"; GenerateData($iMutual, $iOneWay, $sTable, $sType, $sObject); echo "\nData has been generated"; exit; } ob_start(); $sMethod = bx_get('method'); $iProfileId = bx_get('id'); if (!$iProfileId) { $sQueryOrig = "SELECT `id` FROM `sys_profiles` WHERE `type` = ? AND `status` = 'active' ORDER BY RAND() LIMIT 1"; $sQueryPrepared = $oDb->prepare($sQueryOrig, $sType); $iProfileId = $oDb->getOne($sQueryPrepared); } $iProfileId2 = bx_get('id2'); if (!$iProfileId2) { $sQueryOrig = "SELECT `id` FROM `sys_profiles` WHERE `type` = ? AND `status` = 'active' AND `id` != ? ORDER BY RAND() LIMIT 1"; $sQueryPrepared = $oDb->prepare($sQueryOrig, $sType, $iProfileId); $iProfileId2 = $oDb->getOne($sQueryPrepared); } bx_import('BxDolConnection'); $oConnection = BxDolConnection::getObjectInstance($sObject); if (!$oConnection) { die("'{$sObject}' object is not defined."); } echo "<h1>Profile: {$iProfileId} / another one: {$iProfileId2} </h1>"; echo '<hr class="bx-def-hr" />'; switch ($sMethod) { default: case 'array': echo "<h2>Common Content (like mutual Friends between two initiators)</h2>"; echoDbg($oConnection->getCommonContent($iProfileId, $iProfileId2, 1)); echo "<h2>Mutual Content (like Friends)</h2>"; echoDbg($oConnection->getConnectedContent($iProfileId, 1)); echo "<h2>Connected Content</h2>"; echoDbg($oConnection->getConnectedContent($iProfileId)); echo "<h2>Connected Initiators</h2>"; echoDbg($oConnection->getConnectedInitiators($iProfileId)); echo "<h2>Connected Content without mutual content (like Friend Requests sent)</h2>"; echoDbg($oConnection->getConnectedContent($iProfileId, 0)); echo "<h2>Connected Initiators without mutual content (like Friend Requests received)</h2>"; echoDbg($oConnection->getConnectedInitiators($iProfileId, 0)); break; case 'sql': $f = function ($aSQLParts) use($oDb, $sType) { $sQueryOrig = "\n SELECT `p`.`id`, `d`.`fullname`\n FROM `bx_persons_data` AS `d`\n INNER JOIN `sys_profiles` AS `p` ON (`p`.`content_id` = `d`.`id` AND `p`.`type` = ?)\n {$aSQLParts['join']}\n "; $sQueryPrepared = $oDb->prepare($sQueryOrig, $sType); $a = $oDb->getAll($sQueryPrepared); foreach ($a as $r) { echo "{$r['id']} - {$r['fullname']} <br />\n"; } }; echo "<h2>Common Content (like mutual Friends between two initiators)</h2>"; $f($oConnection->getCommonContentAsSQLParts('p', 'id', $iProfileId, $iProfileId2, 1)); echo "<h2>Mutual Content (like Friends)</h2>"; $f($oConnection->getConnectedContentAsSQLParts('p', 'id', $iProfileId, 1)); echo "<h2>Connected Content</h2>"; $f($oConnection->getConnectedContentAsSQLParts('p', 'id', $iProfileId)); echo "<h2>Connected Initiators</h2>"; $f($oConnection->getConnectedInitiatorsAsSQLParts('p', 'id', $iProfileId)); echo "<h2>Connected Content without mutual content (like Friend Requests sent)</h2>"; $f($oConnection->getConnectedContentAsSQLParts('p', 'id', $iProfileId, 0)); echo "<h2>Connected Initiators without mutual content (like Friend Requests received)</h2>"; $f($oConnection->getConnectedInitiatorsAsSQLParts('p', 'id', $iProfileId, 0)); break; case 'search-results': echo "<h2>Common Content (like mutual Friends between two initiators)</h2>"; echo BxDolService::call('bx_persons', 'browse_connections', array($iProfileId, 'sys_profiles_friends', 'common', 1, BX_DB_CONTENT_ONLY, $iProfileId2)); echo "<h2>Mutual Content (like Friends)</h2>"; echo BxDolService::call('bx_persons', 'browse_connections', array($iProfileId, 'sys_profiles_friends', 'content', 1, BX_DB_CONTENT_ONLY)); echo "<h2>Connected Content</h2>"; echo BxDolService::call('bx_persons', 'browse_connections', array($iProfileId, 'sys_profiles_friends', 'content', false, BX_DB_CONTENT_ONLY)); echo "<h2>Connected Initiators</h2>"; echo BxDolService::call('bx_persons', 'browse_connections', array($iProfileId, 'sys_profiles_friends', 'initiators', false, BX_DB_CONTENT_ONLY)); echo "<h2>Connected Content without mutual content (like Friend Requests sent)</h2>"; echo BxDolService::call('bx_persons', 'browse_connections', array($iProfileId, 'sys_profiles_friends', 'content', 0, BX_DB_CONTENT_ONLY)); echo "<h2>Connected Initiators without mutual content (like Friend Requests received)</h2>"; echo BxDolService::call('bx_persons', 'browse_connections', array($iProfileId, 'sys_profiles_friends', 'initiators', 0, BX_DB_CONTENT_ONLY)); break; } $s = ob_get_clean(); return DesignBoxContent("Connections", $s, BX_DB_PADDING_DEF); }
function genGroupInviteForm() { global $groupID; global $memberID; $sFriendsQuery = "SELECT\r\n\t\t/*`FriendList`.*,*/\r\n\t\tIF(`FriendList`.`ID`={$memberID}, `FriendList`.`Profile`, `FriendList`.`ID`) AS `ID`,\r\n\t\t`Profiles`.`NickName`\r\n\tFROM `FriendList`\r\n\tLEFT JOIN `Profiles`\r\n\tON (IF(`FriendList`.`ID`={$memberID}, `FriendList`.`Profile`, `FriendList`.`ID`) = `Profiles`.`ID`)\r\n\tWHERE\r\n\t\t(`FriendList`.`ID`={$memberID} OR `FriendList`.`Profile`={$memberID}) AND `check` =1\r\n\t"; $rFriends = db_res($sFriendsQuery); $aFriends = array(); while ($aFriend = mysql_fetch_assoc($rFriends)) { $aFriends[$aFriend['ID']] = $aFriend['NickName']; } ob_start(); echoDbg($_REQUEST['invites']); ?> <form name="group_invite_form" id="group_invite_form" action="<?php echo $_SERVER['PHP_SELF']; ?> " method="GET" onsubmit="return checkThrowerForm();"> <input type="hidden" name="a" value="invite" /> <input type="hidden" name="ID" value="<?php echo $groupID; ?> " /> <div class="group_invite_wrapper"> <div class="group_invite_desc"><?php echo _t('_Group invite_desc'); ?> </div> <table class="group_invite_table"> <tr class="group_invite_tr1"> <td class="group_invite_td1"> <div class="group_invite_head"><?php echo _t('_Your friends'); ?> </div> <select name="friends[]" id="friends" class="group_friends_list" size="10" multiple="multiple"> <?php foreach ($aFriends as $friendID => $friendNick) { echo "<option value=\"{$friendID}\">" . htmlspecialchars($friendNick) . "</option>\n"; } ?> </select> </td> <td class="group_invite_td2"> <div><input type="button" value="<?php echo _t('_Add ->'); ?> " onclick="throwMembersFromTo();" /></div> <div><input type="button" value="<?php echo _t('_<- Remove'); ?> " onclick="unthrowMembersFromTo();" /></div> <div><input type="button" value="<?php echo _t('_Find more...'); ?> " onclick="findMoreMembers();" /></div> </td> <td class="group_invite_td3"> <div class="group_invite_head"><?php echo _t('_Invite list'); ?> </div> <select name="invites[]" id="invites" class="group_invites_list" size="10" multiple="multiple"> </select> </td> </tr> <tr class="group_invite_tr2"> <td colspan="3" class="group_invite_td4"> <input type="submit" name="do_submit" value="<?php echo _t('_Send invites'); ?> " /> </td> </tr> </table> </div> </form> <?php return ob_get_clean(); }
/** * Log a message at the error level. * * @param $message The message to log. */ function error($message, $object = NULL) { echoDbg($message); global $GLOBAL_YAHOO_LOGGER_DEBUG_DESTINATION; if($GLOBAL_YAHOO_LOGGER_DEBUG_DESTINATION == "CONSOLE") { print("ERROR - $message\n"); if(!is_null($object)) { print("ERROR OBJECT - " . print_r($object, true) . "\n"); } } else if($GLOBAL_YAHOO_LOGGER_DEBUG_DESTINATION == "LOG") { error_log("ERROR - $message"); if(!is_null($object)) { error_log("ERROR OBJECT - " . print_r($object, true)); } } }
function GenMainParamsTable() { $sNameC = _t('_adm_admtools_Name'); $sValueC = _t('_adm_admtools_Value'); $sRecommendedC = _t('_adm_admtools_Recommended'); $sDifferentSettingsC = _t('_adm_admtools_Different_settings'); $sInstalledApacheModulesC = _t('_adm_admtools_Installed_apache_modules'); $sRegGlobal = ini_get('register_globals'); $sRegGlobal = $sRegGlobal == 0 ? '<font color="green">Off</font>' : '<font color="red">On (warning, you should have this param in Off state, or your site will unsafe)</font>'; $sSafeMode = ini_get('safe_mode'); $sSafeMode = $sSafeMode == 0 ? '<font color="green">Off</font>' : '<font color="red">On (warning)</font>'; $sDisabledFunc = ini_get('disable_functions'); $sMemLimit = ini_get('memory_limit'); $sMaxExecTime = ini_get('max_execution_time'); $sPostMaxSize = ini_get('post_max_size'); $sUploadMaxSize = ini_get('upload_max_filesize'); $sAllowUrlFopen = ini_get('allow_url_fopen'); $sAllowUrlFopen = $sAllowUrlFopen == 0 ? 'Off (warning, better keep this parameter in On to able register Dolphin' : '<font color="green">On</font>'; $sSQLClientInfo = mysql_get_client_info(); $sPhpVersion = phpversion(); $sMbstring = '<font color="green">mbstring extension installed</font>'; //check mbstring if (!extension_loaded('mbstring')) { $sMbstring = '<font color="red">mbstring extension not installed. <b>Warning!</b> Dolphin cannot work without <b>mbstring</b> extension.</font>'; } $sAllowUrlInclude = $this->isAllowUrlInclude() == true ? '<font color="red">On (warning, disable it, or your site will unsafe)</font>' : '<font color="green">Off</font>'; $sInstalledModules = ''; if (function_exists('apache_get_modules')) { $aInstalledModules = apache_get_modules(); ob_start(); echoDbg($aInstalledModules); $sInstalledModules = ob_get_contents(); ob_end_clean(); } else { $sInstalledModules = 'Can`t evaluate installed modules'; } $sOperationSystem = @php_uname(); $sFfmpeg = realpath(BX_DIRECTORY_PATH_ROOT . "flash/modules/global/app/ffmpeg.exe"); $sFfmpegOutput = `{$sFfmpeg} -version 2>&1`; $sRet = <<<EOF <table width="100%" cellspacing="1" cellpadding="0" class="install_table"> \t<tr class="head troubled"> \t\t<td>{$sNameC}</td> \t\t<td class="left_aligned">{$sValueC}</td> \t\t<td class="left_aligned">{$sRecommendedC}</td> \t</tr> \t<tr class="head troubled"> \t\t<td colspan="3" style="text-align:center;">{$sDifferentSettingsC}</td> \t</tr> \t<tr class="head troubled"> \t\t<td>register globals</td> \t\t<td class="left_aligned">{$sRegGlobal}</td> \t\t<td class="left_aligned">Off</td> \t</tr> \t<tr class="head troubled"> \t\t<td>safe mode</td> \t\t<td class="left_aligned">{$sSafeMode}</td> \t\t<td class="left_aligned">Off</td> \t</tr> \t<tr class="head troubled"> \t\t<td>disabled functions</td> \t\t<td class="left_aligned">{$sDisabledFunc}</td> \t\t<td class="left_aligned"></td> \t</tr> \t<tr class="head troubled"> \t\t<td>memory limit</td> \t\t<td class="left_aligned">{$sMemLimit}</td> \t\t<td class="left_aligned">128M</td> \t</tr> \t<tr class="head troubled"> \t\t<td>max execution time</td> \t\t<td class="left_aligned">{$sMaxExecTime}</td> \t\t<td class="left_aligned">300</td> \t</tr> \t<tr class="head troubled"> \t\t<td>post_max_size</td> \t\t<td class="left_aligned">{$sPostMaxSize}</td> \t\t<td class="left_aligned">128M or more</td> \t</tr> \t<tr class="head troubled"> \t\t<td>upload max filesize</td> \t\t<td class="left_aligned">{$sUploadMaxSize}</td> \t\t<td class="left_aligned">128M or more</td> \t</tr> \t<tr class="head troubled"> \t\t<td>allow_url_fopen</td> \t\t<td class="left_aligned">{$sAllowUrlFopen}</td> \t\t<td class="left_aligned">On</td> \t</tr> \t<tr class="head troubled"> \t\t<td>allow_url_include (for php > 5.2)</td> \t\t<td class="left_aligned">{$sAllowUrlInclude}</td> \t\t<td class="left_aligned">Off</td> \t</tr> \t<tr class="head troubled"> \t\t<td>mbstring installation</td> \t\t<td class="left_aligned">{$sMbstring}</td> \t\t<td class="left_aligned">Installed</td> \t</tr> \t<tr class="head troubled"> \t\t<td>PHP version</td> \t\t<td class="left_aligned">{$sPhpVersion}</td> \t\t<td class="left_aligned">4.4.0/5.1.0 and higher</td> \t</tr> \t<tr class="head troubled"> \t\t<td>SQL Client library version</td> \t\t<td class="left_aligned">{$sSQLClientInfo}</td> \t\t<td class="left_aligned">4.1.2 and higher</td> \t</tr> \t<tr class="head troubled"> \t\t<td>{$sInstalledApacheModulesC}</td> \t\t<td class="left_aligned">{$sInstalledModules}</td> \t\t<td class="left_aligned"></td> \t</tr> \t<tr class="head troubled"> \t\t<td>Operating system</td> \t\t<td class="left_aligned">{$sOperationSystem}</td> \t\t<td class="left_aligned">Unix / Linux / Windows</td> \t</tr> \t<tr class="head troubled"> \t\t<td colspan="3" style="text-align:center;">Flash ffmpeg settings</td> \t</tr> \t<tr class="head troubled"> \t\t<td>ffmpeg output</td> \t\t<td class="left_aligned">{$sFfmpegOutput}</td> \t\t<td class="left_aligned"></td> \t</tr> </table> EOF; return $sRet; }