Tuesday, May 23, 2017

Authentication Failed error on Laravel 5.4

Change db to database in database.php file for connecting with mongodb.

After than clear the cache for configurations
php artisan config:clear

Tuesday, April 4, 2017

Upgrading to laravel 5.4

List of things needed to upgrade to the latest laravel

- Change route files (Now it's included in routes folder -> web)
- use Jenssegers\Mongodb\Eloquent\Model as Eloquent; //Use MongoDB as a model for every Model
- Use latest Jssenger laravel-mongodb plugins
- Use PHP > 5.7
- Install PHP driver from http://pecl.php.net/package/mongodb/1.2.8/windows and also in the php.ini config (If you're using xampp for windows, you likely have to use 32bit version of php driver)

If you're upgrading from previous, use the following command to load the config file again
composer dump-autoload

MongoID class is not available now and have to use the ObjectID Class

use MongoDB\BSON\ObjectID as MongoID;

MongoDate class is not available now and have to use the UTCTime Class

The previous MongoDate is now used as UTCDateTime and hence little conversion is needed to store the right MongoDate now.

 function convert_to_mongo_date($date)  
 {  
   if($date == null || !isset($date))  
     return null;  
   $carbon_date = Carbon::createFromFormat('d/m/Y', $date);  
   try {  
     $mongo_date = new MongoDate(strtotime($carbon_date->toDateString()) * 1000);  
     return $mongo_date;  
   }  
   catch(Exception $e) {  
     Log::info('MongoDate conversion error '.$e);  
     return new MongoDate();  
   }  
 }  
 function convert_to_date_from_sec($date)  
 {  
   if($date == null || !isset($date))  
     return "01/01/1990";  
   try  
   {  
     $secs = $date->toDateTime()->format('U.u');  
     return date('d/m/Y', $secs);  
   }  
   catch(Exception $e)  
   {  
     return "01/01/1990";  
   }  
 }  

strtotime function changed to the following for filter dates


     $fromDate = new MongoDate( strtotime('-1 month' ));  
     $currentDate = new MongoDate( strtotime('+1 day' ));  

You need to put extra array while doing aggregations


  $user_signups_raw = DB::collection('users')->raw(function($collection) use($fromDate, $currentDate)  
     {  
       return $collection->aggregate  
       (  
         array  
         (  
           array  
           (  
             '$match' => array  
             (  
               'created_at' => array( '$gt' => $fromDate, '$lt' =>$currentDate)  
             )  
           ),  
           array  
           (  
             '$group' => array  
             (  
               '_id' => array(  
                 '$dayOfYear' => '$created_at',  
               ),  
               'count' => array  
               (  
                 '$sum' => 1  
               ),  
               'date' => array  
               (  
                 '$first' => '$created_at'  
               )  
             )  
           ),  
           array  
           (  
             '$sort' => array  
             (  
               '_id' => 1  
             ),  
           )  
         )  
       );  
     });  

And aggregate results is now with collections and you need the following snippets to convert it to usable format


    $user_signups = [];  
     foreach ($user_signups_raw as $doc)  
     {  
       $item = json_encode( $doc->getArrayCopy());  
       $item = $doc->getArrayCopy();  
       array_push($user_signups, $item);  
     }  

Sunday, December 25, 2016

Increasing upload size limit on PHP

open php.ini file
post_max_size = 225M
upload_max_size = 200M

save it and restart the server!
Note : post max size needs to be larger than upload max size limit!

Monday, October 10, 2016

Useful PHP Time functions

Create date string which adds 30 days from current date
strtotime('today' + '90 days')
date("Y-m-d", strtotime("+30 days")


Create DateTime object from date string
new_expiry_date = strtotime(date("Y-m-d", strtotime("+30 days")));

Convert DateTime to MongoDate
new MongoDate($new_expiry_date);

 //Adding days to mongodate  
 function add_days_mongodate($mongo_date, $days)  
 {  
   $expiry_date = strtotime(date("d-m-Y H:i:s", $mongo_date->sec));  
   $new_expiry_date = $expiry_date + ($days * 24 * 60 * 60); //Add 30 Days  
   return $new_expiry_date;  
 }  
 function convert_string_to_mongodate($date)  
 {  
   $carbon_date = Carbon::createFromFormat('d/m/Y', $date);  
   $mongo_date = new MongoDate(strtotime($carbon_date->toDateString()));  
   return $mongo_date;  
 }  
 // Calculate date from two datetime  
 function days_between($str_date1, $str_date2)  
 {  
   //Get 1 day in milliseconds  
   $one_day = 1000 * 60 * 60 * 24;  
   $date1 = strtotime($str_date1);  
   $date2 = strtotime($str_date2);  
   $difference = $date1 - $date2;  
   $days = $difference/$one_day;  
   return $days;  
 }  
 // Calculate hours from two datetime  
 function hours_between($str_date1, $str_date2)  
 {  
   $date1 = strtotime($str_date1);  
   $date2 = strtotime($str_date2);  
 //  Log::info($date1);  
 //  Log::info($date2);  
   $difference = $date1 - $date2;  
   $hours = $difference/3600;  
   Log::info($hours);  
   return $hours;  
 }  
 //Format mongo date to displayable date string  
 function parse_mongo_date($mongo_date)  
 {  
 //  $mongo_date == null  
   if(is_a($mongo_date, 'MongoDate'))  
     $new_date =date('d-m-Y H:i:s',$mongo_date->sec);  
   else  
     $new_date = $mongo_date;  
   return $new_date;  
 }  
 function convert_to_mongo_date($date)  
 {  
   return new MongoDate(strtotime(date(DATE_ISO8601, $date->sec)));  
 //  new MongoDate(strtotime(date(DATE_ISO8601, $mongo_date->sec) - "30 days"));  
 }  
 function get_mongo_date_from_string($str_date)  
 {  
   $mongo_date = new MongoDate();  
   if(isset($str_date)) {  
     $carbon_date = Carbon::createFromFormat('d/m/Y', $str_date);  
     $mongo_date = new MongoDate(strtotime($carbon_date->toDateString()));  
   }  
   return $mongo_date;  
 //  new MongoDate(strtotime(date(DATE_ISO8601, $mongo_date->sec) - "30 days"));  
 }  

Sunday, October 9, 2016

Backing up database to amazon s3

Go to the following address to download s3tools for linux
http://s3tools.org/usage

apt-get install unzip to install zip for Linux if the downloaded folder needs to unzip

apt-get install s3cmd to install s3tools from command line

Configure the s3
s3cmd --configure to configure the tool for the first time

Access Key: xxxxxxxxxxxxxxxx
Secret Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: your_password
Path to GPG program [/usr/bin/gpg]:

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP and can't be used if you're behind a proxy
Use HTTPS protocol [No]: NO

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't conect to S3 directly
HTTP Proxy server name:

New settings:
  Access Key: AKIAJWMP76CEGCZYJJJA
  Secret Key: oxDlDDsXMgYQ+W7ZvmdPKEsjKXoAfZ1DF2J7vK6k
  Encryption password: whitecat
  Path to GPG program: /usr/bin/gpg
  Use HTTPS protocol: False
  HTTP Proxy server name:
  HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] Y
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Success. Encryption and decryption worked fine :-)

Save settings? [y/N] y

Configuration saved to '/root/.s3cfg'

Now you can upload the file to s3 using the following commands

s3cmd put /your/path/server/$FILE_NAME.tar.gz s3://backups.joydash.com/path/$FILE_NAME.tar.gz








Thursday, September 22, 2016

Allowed memory size of 268435456 bytes exhausted

This is due to default memory limit in PHP

Locate PHP.ini file
php --ini

find memory_limit and set to 2048M

Tuesday, September 6, 2016

Generating PDF file from html

You need to download and install wkhtmltopdf exe file
http://wkhtmltopdf.org/downloads.html#stable

then use laravel wrapper
Add the following line in the required
"barryvdh/laravel-snappy": "0.2.*"

After updating composer, add the ServiceProvider to the providers array in app/config/app.php
Barryvdh\Snappy\ServiceProvider::class,
You can optionally use the facade for shorter code. Add this to your facades:
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
Using the wrapper:
$pdf = App::make('snappy.pdf.wrapper');
$pdf->loadHTML('<h1>Test</h1>');
return $pdf->inline();
Or use the facade:
$pdf = PDF::loadView('pdf.invoice', $data);
return $pdf->download('invoice.pdf');
Important : You can publish the config-file to change some settings (default paper etc).
php artisan vendor:publish