Sunday, 9 September 2012

Joomla 2.5 versions issues while upgrade. Joomla include/framework.php line 42 or line 35 error.


2.5.1 Installation Parse error: syntax error .. on line 35
Had the same error after using jUpgrade to move a 1.5.x site to 2.5.1. which is hosted by 1and1. Everything tested fine after the install and when I moved the jUpgrade folder to the correct folder to make the site live I got a similar error.

Fixed it by changing the htaccess.txt file to .htaccess and adding the following line
//Code:
# Line added to force register_globals OFF
AddType x-mapp-php5 .php
Source: Read More

Thursday, 6 September 2012

PHP Function To List Months Names and Years


/**
 * Return the List of all the 12 months name as per requested.
 * @param char $monthType The month format type you want month to be display.
 * @return array:string Return the list of months.
 */
function get_all_months($monthType = 'F')
{
 $months = array();
 
 for ( $m=1; $m<=12; $m++ )
 {
  $months[$m] = date($monthType, mktime(0,0,0,$m,1,2000));;
 }
 
 return $months;
}

/**
 * Return the List of all the year name as per requested.
 * @param char $yearType The Year format type you want year to be display.
 * @return array:string Return the list of month for upto 2020 years which you can change as per your needs.
 */
function get_all_years($yearType = 'Y')
{
 $months = array();
 $yearLength = 20; // This is the limit for year to be display for next 20 years.
 
 for ( $y=11; $y<=$yearLength; $y++ )
 {
  $months[$y] = date($yearType, mktime(0,0,0,1,1,$y));;
 }

 return $months;
}

Wednesday, 5 September 2012

Set variables which could cause the TCPDF to generate PDF correctly


// These below are variables which could cause the TCPDF to generate PDF correctly. // So, please check the tcpdf configuration and set the below variables if necessary.
/* Increase the memory limit for the PDF. */
ini_set('memory_limit', '256M'); 
ini_set('safe_mode', 0);
ini_set('allow_url_fopen', 1);

Wednesday, 15 August 2012

Create Zip File for Multiple files to be downloadable in Codeigniter

define('ROOT_DOWNLOAD_FOLDER_PATH', $_SERVER['DOCUMENT_ROOT']."_files/_downloads/");

function CreateZipFile($zip_folder_name)
{
 $directoryToZip = ROOT_DOWNLOAD_FOLDER_PATH; // This will zip all the file(s) in this present working directory
 $outputDir = ROOT_DOWNLOAD_FOLDER_PATH; //Replace "/" with the name of the desired output directory.
 $this->load->library('ZipFile');
  
 //$this->createzipfile->get_files_from_folder($outputDir, $zip_folder_name.'-');
 $this->zipfile->get_files_from_folder($directoryToZip, '');
 
 //Code toZip a directory and all its files/subdirectories
 $this->zipfile->zipDirectory($directoryToZip, $outputDir);
 
 $fileName = $outputDir.$zip_folder_name.'.zip';

 $fd = fopen ($fileName, 'wb');
 $out = fwrite ($fd, $this->zipfile->getZippedfile());
  
 $this->zipfile->forceDownload($fileName);
 
 @unlink($fileName);
 fclose($fd);
 
 /* Empty directory and remove directory. */
 $directoryToZipPath = $directoryToZip.$zip_folder_name;
 unlinkFolderFiles($directoryToZipPath);
 removeDir($directoryToZipPath);

 exit;
}

$timestamp = date('Y.m.d.h.i.s');
$timestamp = '2012.08.15.12.45.46';
$zip_folder_name = 'Flubit.Inv.All.'.$timestamp;
// For the ZipFile.php, save the below ZipFile.php file content into application/libaries/ZipFile.php
/**
 * Class to dynamically create a zip file (archive) of file(s) and/or directory
 *
 * @author Rochak Chauhan  www.rochakchauhan.com
 * @package CreateZipFile
 * @see Distributed under "General Public License"
 * 
 * @version 1.0
 */

class ZipFile {

 public $compressedData = array();
 public $centralDirectory = array(); // central directory
 public $endOfCentralDirectory = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
 public $oldOffset = 0;
 
 function get_files_from_folder($directory, $put_into) {
  if ($handle = opendir($directory)) {
   while (false !== ($file = readdir($handle))) {
    if (is_file($directory.$file)) {
     $fileContents = file_get_contents($directory.$file);
     $this->addFile($fileContents, $put_into.$file);
    } elseif ($file != '.' and $file != '..' and is_dir($directory.$file)) {
     $this->addDirectory($put_into.$file.'/');
     $this->get_files_from_folder($directory.$file.'/', $put_into.$file.'/');
    }
   }
  }
  closedir($handle);
 }
 
 /**
  * Function to create the directory where the file(s) will be unzipped
  *
  * @param string $directoryName
  * @access public
  * @return void
  */ 
 public function addDirectory($directoryName) {
  $directoryName = str_replace("\\", "/", $directoryName);
  $feedArrayRow = "\x50\x4b\x03\x04";
  $feedArrayRow .= "\x0a\x00";
  $feedArrayRow .= "\x00\x00";
  $feedArrayRow .= "\x00\x00";
  $feedArrayRow .= "\x00\x00\x00\x00";
  $feedArrayRow .= pack("V",0);
  $feedArrayRow .= pack("V",0);
  $feedArrayRow .= pack("V",0);
  $feedArrayRow .= pack("v", strlen($directoryName) );
  $feedArrayRow .= pack("v", 0 );
  $feedArrayRow .= $directoryName;
  $feedArrayRow .= pack("V",0);
  $feedArrayRow .= pack("V",0);
  $feedArrayRow .= pack("V",0);
  $this->compressedData[] = $feedArrayRow;
  $newOffset = strlen(implode("", $this->compressedData));
  $addCentralRecord = "\x50\x4b\x01\x02";
  $addCentralRecord .="\x00\x00";
  $addCentralRecord .="\x0a\x00";
  $addCentralRecord .="\x00\x00";
  $addCentralRecord .="\x00\x00";
  $addCentralRecord .="\x00\x00\x00\x00";
  $addCentralRecord .= pack("V",0);
  $addCentralRecord .= pack("V",0);
  $addCentralRecord .= pack("V",0);
  $addCentralRecord .= pack("v", strlen($directoryName) );
  $addCentralRecord .= pack("v", 0 );
  $addCentralRecord .= pack("v", 0 );
  $addCentralRecord .= pack("v", 0 );
  $addCentralRecord .= pack("v", 0 );
  $addCentralRecord .= pack("V", 16 );
  $addCentralRecord .= pack("V", $this->oldOffset );
  $this->oldOffset = $newOffset;
  $addCentralRecord .= $directoryName;
  $this->centralDirectory[] = $addCentralRecord;
 }

 /**
  * Function to add file(s) to the specified directory in the archive 
  *
  * @param string $directoryName
  * @param string $data
  * @return void
  * @access public
  */ 
 public function addFile($data, $directoryName)   {
  $directoryName = str_replace("\\", "/", $directoryName);
  $feedArrayRow = "\x50\x4b\x03\x04";
  $feedArrayRow .= "\x14\x00";
  $feedArrayRow .= "\x00\x00";
  $feedArrayRow .= "\x08\x00";
  $feedArrayRow .= "\x00\x00\x00\x00";
  $uncompressedLength = strlen($data);
  $compression = crc32($data);
  $gzCompressedData = gzcompress($data);
  $gzCompressedData = substr( substr($gzCompressedData, 0, strlen($gzCompressedData) - 4), 2);
  $compressedLength = strlen($gzCompressedData);
  $feedArrayRow .= pack("V",$compression);
  $feedArrayRow .= pack("V",$compressedLength);
  $feedArrayRow .= pack("V",$uncompressedLength);
  $feedArrayRow .= pack("v", strlen($directoryName) );
  $feedArrayRow .= pack("v", 0 );
  $feedArrayRow .= $directoryName;
  $feedArrayRow .= $gzCompressedData;
  $feedArrayRow .= pack("V",$compression);
  $feedArrayRow .= pack("V",$compressedLength);
  $feedArrayRow .= pack("V",$uncompressedLength);
  $this->compressedData[] = $feedArrayRow;
  $newOffset = strlen(implode("", $this->compressedData));
  $addCentralRecord = "\x50\x4b\x01\x02";
  $addCentralRecord .="\x00\x00";
  $addCentralRecord .="\x14\x00";
  $addCentralRecord .="\x00\x00";
  $addCentralRecord .="\x08\x00";
  $addCentralRecord .="\x00\x00\x00\x00";
  $addCentralRecord .= pack("V",$compression);
  $addCentralRecord .= pack("V",$compressedLength);
  $addCentralRecord .= pack("V",$uncompressedLength);
  $addCentralRecord .= pack("v", strlen($directoryName) );
  $addCentralRecord .= pack("v", 0 );
  $addCentralRecord .= pack("v", 0 );
  $addCentralRecord .= pack("v", 0 );
  $addCentralRecord .= pack("v", 0 );
  $addCentralRecord .= pack("V", 32 );
  $addCentralRecord .= pack("V", $this->oldOffset );
  $this->oldOffset = $newOffset;
  $addCentralRecord .= $directoryName;
  $this->centralDirectory[] = $addCentralRecord;
 }

 /**
  * Function to return the zip file
  *
  * @return zipfile (archive)
  * @access public
  * @return void
  */
 public function getZippedfile() {
  $data = implode("", $this->compressedData);
  $controlDirectory = implode("", $this->centralDirectory);
  return
  $data.
  $controlDirectory.
  $this->endOfCentralDirectory.
  pack("v", sizeof($this->centralDirectory)).
  pack("v", sizeof($this->centralDirectory)).
  pack("V", strlen($controlDirectory)).
  pack("V", strlen($data)).
  "\x00\x00";
 }

 /**
  *
  * Function to force the download of the archive as soon as it is created
  *
  * @param archiveName string - name of the created archive file
  * @access public
  * @return ZipFile via Header
  */
 public function forceDownload($archiveName) {
  if(ini_get('zlib.output_compression')) {
   ini_set('zlib.output_compression', 'Off');
  }

  // Security checks
  if( $archiveName == "" ) {
   echo "Public Photo Directory - Download 
ERROR: The download file was NOT SPECIFIED."; exit; } elseif ( ! file_exists( $archiveName ) ) { echo "Public Photo Directory - Download
ERROR: File not found."; exit; } header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); header("Content-Type: application/zip"); header("Content-Disposition: attachment; filename=".basename($archiveName).";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($archiveName)); readfile("$archiveName"); } /** * Function to parse a directory to return all its files and sub directories as array * * @param string $dir * @access protected * @return array */ protected function parseDirectory($rootPath, $seperator="/"){ $fileArray=array(); $handle = opendir($rootPath); while( ($file = @readdir($handle))!==false) { if($file !='.' && $file !='..'){ if (is_dir($rootPath.$seperator.$file)){ $array=$this->parseDirectory($rootPath.$seperator.$file); $fileArray=array_merge($array,$fileArray); } else { $fileArray[]=$rootPath.$seperator.$file; } } } return $fileArray; } /** * Function to Zip entire directory with all its files and subdirectories * * @param string $dirName * @access public * @return void */ public function zipDirectory($dirName, $outputDir) { if (!is_dir($dirName)){ trigger_error("CreateZipFile FATAL ERROR: Could not locate the specified directory $dirName", E_USER_ERROR); } $tmp=$this->parseDirectory($dirName); $count=count($tmp); $this->addDirectory($outputDir); for ($i=0;$i<$count;$i++){ $fileToZip=trim($tmp[$i]); $newOutputDir=substr($fileToZip,0,(strrpos($fileToZip,'/')+1)); $outputDir=$outputDir.$newOutputDir; $fileContents=file_get_contents($fileToZip); $this->addFile($fileContents,$fileToZip); } } }
// The below are the basic File and Directory Related functions.
function createFile($filePath='')
{
 try {
  if (!empty($filePath))
  { 
   $ourFileHandle = fopen($filePath, 'w');
   fclose($ourFileHandle);
  }
  return true;
 }
 Catch(Exception $e){ return false; }
}

function unlinkFolderFiles($dir)
{
 $files = getFolderFiles($dir);

 foreach ($files as $file)
 {
  if(file_exists($dir.'/'.$file)) @unlink($dir.'/'.$file);
 }

 return true;
}

function getFolderFiles($dir)
{
 $files = '';
 $ffs = scandir($dir);

 foreach($ffs as $ff)
 {
  if($ff != '.' && $ff != '..')
  {
   $files[] = $ff;
  }
 }

 return $files;
}

function createDir($dir)
{
 if (!is_dir($dir)) {
  mkdir($dir);
 }

 return true;
}

function removeDir($dir)
{
 if (is_dir($dir)) {
  rmdir($dir);
 }
 
 return true;
}

Monday, 6 August 2012

Convert the date time to timestamp and Compare the two datetime (dates) functions in Javascript.

Convert the date time to timestamp in Javascript. similar to strototime() function in php.
// Convert the date time to timestamp in Javascript. similar to strototime() function in php.
function convert_datetime_to_timestamp(date)
{
 var datetime = date.split(" ");
 date = datetime[0];
 time = datetime[1];

 d1 = date.split("-");
 y = d1[0];
 m = d1[1];
 d = d1[2];

 t1 = time.split(":");
 h = t1[0];
 i = t1[1];
 s = t1[2];

 //datetime = m + ' ' + d + ',' + y + ' ' + h + ':' + i + ':'+s;
var date = new Date(y, m, d, h, i, s, '0'); (works both on FireFox and Chrome Browers).
 
 return date.getTime();
}
// Compare the two datetime (dates) in Javascript.
/*  This below function compares two dates with a gap time as 6 Hours.
 @param date1 = '2012-08-06 14:9:19'
 @param date2 = '2012-08-06 20:9:19' 
 @return If errors found, return errors else null (if no errors) found. 
*/
function compare_two_dates(date1, date2)
{
 var error = '';
 
 if ( (date1 != "") || (date2 != "") )
 {
  // Check the dates time here;
  var minutes=1000*60;
  var hours=minutes*60;
  var days=hours*24;
  var years=days*365;
  
  now = new Date();
  current_time= now.getTime();
  
  // Check the dates time here;
  start_time= convert_datetime_to_timestamp(date1);
  expiry_time= convert_datetime_to_timestamp(date2);
  
  gap_hr = 6; // Minimum Gap between two dates is set as 6 Hrs. 
  gap_time= gap_hr*hours;
  diff_time= expiry_time - start_time;
  diff_mm= (diff_time)/minutes;
  diff_hr= Math.round(diff_time/hours);
  
  if ( (current_time >= start_time) && (current_time >= expiry_time))
   error = 'Date Available AND/OR Expiry time should be greater than current time.';

  else if ( (diff_time == 0) || (gap_time > diff_time) )
   error = 'Date Expires should be at least ' + gap_hr + ' hours greater than Date Available time.';
  
  //error = error + ' NowT: '+current_time+' DS: ' + start_time + ' DE: '+ expiry_time+' Diff: ' +diff_time+ ' DMM: ' + diff_mm+ ' DHR: '+diff_hr+' TG: '+gap_time;  
 }
 else {
  error =  'Enter both dates';
 }
 
 return error;
}

For more information about dates, please, check: JavaScript Date Object, JavaScript setDate() Method

Friday, 27 July 2012

Increase Memory Limit to resolve Server error while generating PDF using third party library like TCPDF

When generating a PDF using TCPDF or any of the third party PDF libraries, and if you find the following issues while generating pdf;

------------------------------------------------------------------------------
Server error The website encountered an error while retrieving http://admincentre.flubstage.info/fcc/reporting/download_pdf_chain_report/01. It may be down for maintenance or configured incorrectly. Here are some suggestions: Reload this web page later. HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfil the request.
------------------------------------------------------------------------------

Solution: In that case, most probably, it would be memory limitation issue. So, you should increase the memory limit by adding the following code before the pdf generate code(the very beginning of the code).
/* Set the memory limit for the PDF. */
ini_set('memory_limit', '256M'); 

Tuesday, 24 July 2012

Calculating the Standard Deviation using PHP

// Calculating the Standard Deviation.
private function standard_deviation($aValues, $bSample = false)
{
 $fMean = array_sum($aValues) / count($aValues);
 $fVariance = 0.0;
 foreach ($aValues as $i)
 {
  $fVariance += pow($i - $fMean, 2);
 }
 $fVariance /= ( $bSample ? count($aValues) - 1 : count($aValues) );
 return (float) sqrt($fVariance);
}