Thursday, 14 May 2020

Git: How to fix Error Pulling is not possible because you have unmerged files



If you try to pull new code while some local files have been changed without commit, you will get this error.

Error Pulling is not possible because you have unmerged files.
or
Error: Your local changes to the following files would be overwritten by merge
To fix it you have 2 options:

* Method 1: Commit the changes, then pull the new code
- Add new files if available
git add filename1.xyz folder/filename2.xyz  
or (add all new file)
git add -A    
- Commit new changes

git commit -m "Add new file or something need to noted"
* Method 2: Remove all local changes to update new code
(We often encounter this situation on the server)
To do so, run the following command:

git reset --hard origin/master
- note: 'master' is the name of the branch you want to update new code from that.

Done ! Now we can update new code by git pull command.

git pull




Friday, 8 May 2020

MongoDB: Error Unsupported mechanism SCRAM-SHA-256


Studio 3T Fix Error 2 "Unsupported mechanism SCRAM-SHA-256" when try to connect to server.

Cause: 
MongoDB only supports SCRAM-SHA-256 for authenticating users with passwords from MongoDB version 4.0. So if you encounter this error, you can try to switch back to the SCRAM-SHA-1 method.

More about MongoDB SCRAM supports :
MongoDB >= 4.0 Support SCRAM-SHA-1 and SCRAM-SHA-256
MongoDB 3.x Support only MONGODB-CR and SCRAM-SHA-1
MongoDB <3.0 Support only MONGODB-CR

Thursday, 7 May 2020

Composer: How to fix error "Fork failed errors" in Linux server


In many cases we encounter lack of memory errors when running "composer install" or "composer update" command to update packages in our PHP project.
Some of the error messages you may receive:

  • - proc_open(): fork failed errors - Cannot allocate memory
  • - exception is caused by a lack of memory
  • - Killed

The cause of all these errors is because our server does not have enough RAM to allocate to Composer. Increasing packages in the project, the larger the size, so this error is also becoming more and more common. To fix them you can increase the server's physical RAM but the cost will be quite expensive.

There is another solution simpler and completely free to fix Composer memory error. That is we can enable swap space for the server. This is quite easy to implement and will thoroughly fix the error we encounter. For each operating system, there will be different ways to initialize swap partitions. You can refer to one of the instructions below:

Enable Swap to fix Composer memory error for Centos, Ubuntu ...:

Step 1: Create a new Swap file (1GB to 3Gb)
sudo fallocate -l 3G /swapfile
Step 2: Add Write permission for Swap file
sudo chmod 600 /swapfile
* If your server is running under SELinux, after chmod command you must run the following command
sudo chcon -t swapfile_t /swapfile 
Step 3: set up a Linux swap area
sudo mkswap /swapfile
Step 4: Active Swap for server
sudo swapon /swapfile
opening the "/etc/fstab" file
vi /etc/fstab
then add the following line at end of file.
/swapfile swap swap defaults 0 0

Done ! If there are no errors, you have successfully enabled the swap for your server. You can try checking the swap partition with one of the following commands:
sudo swapon --show
or
top
or
sudo free -h

Now it's time to try running the composer commands again. Hopefully the bug has been fixed. Good luck.

*Note:
- /swapfile  - is file name for swap file, you can use another name or put it in another folder.
- In addition to using swap files, you can also try to use swap partitions.
- Some problems with PHP modules can also cause errors because Composer runs on PHP

*Refer: https://getcomposer.org/doc/articles/troubleshooting.md

Saturday, 2 November 2019

[zero-exception] The announcement of Website domain name changed

Dear friends,
Today we officially announce that the website domain name has been changed.



Domain name https://zero-exception.blogspost.com will now be changed to https://www.codesiri.com
All previous data and articles will be reserved.

This change aims to orient the development of website expansion in a more professional way. Hopefully, in the coming time, the website will have more useful articles for you.

Sincerely thank you !


Monday, 16 October 2017

Wordpress: Change the title of any custom page dynamically

Sometime we want to custom the title for some page eg: 404, contact, search .... It is very simple, follow these instructions.

in file "your_theme/function.php" add the following code at the end.

function setTitle($title) {
    add_filter( 'wp_title', function() use ($title) {return $title;}, 10000 );
}

Done ! From now on, which page should be customized so that you just call the function like this:

setTitle('Hello, this is my custom title');

It does not affect the pages you do not use. Have fun!

Sunday, 12 March 2017

Yii2: PHP Warning - Unable to allocate memory for pool

Yii2 error:

PHP Warning – yii\base\ErrorException

include(): Unable to allocate memory for pool.


* Reason : You have not allocated enough memory for APC cache (file cache or opcode cache)

* Solution 1: Disable APC, If you do not need it (apc.enabled=0)
* Solution 2: Increased memory for APC (apc.shm_size="64")

To do one of the two. Find php.ini or apc.ini on your server. If you do not have admin rights to the server try to use htacess file: php_flag display_errors on


Wednesday, 11 November 2015

Yii2: Get raw SQL Query from an Activerecord or a query builder

This tutorial show you how to dump the Sql Query from an Activerecord and more.
It can help us to debug Sql query in some case when yii debug is not work.

Example:
$listBooks = Books::find()->where('author=2')->all();

To get raw SQL query with all parameters included try:
$query = Books::find()->where('author=2');
echo $query->createCommand()->sql;
echo $query->createCommand()->getRawSql();

It not only works with Activerecord .
Refer : http://chris-backhouse.com/Yii2-Output-the-SQL-from-a-query-builder/1027

Monday, 22 June 2015

Yii2: Unknown Property Exception after adding column to table

Unknown Property – yii\base\UnknownPropertyException
Getting unknown property: app\models

What happens when you get an error Exception "Getting unknown property", after just added a field to the table in the database ?
  1. Check your property name, was it correct?
  2. Clear cache if you using cache. Yii2 will cache the table schema so if you change the table you need to clear the cache

Thursday, 29 January 2015

Yii2: Validate unique if attribute is not empty

Yii2 unique validator, empty string and null is treated the same and ignored. It not the same as mysql when only null value ignored in unique check.
But this is not a bug, not all database management systemare the same with mysql.

So if you want to validate an attribute only when it not empty. Try the following rules :

['phone', 'filter', 'filter' => 'trim'], //trim string
['phone', 'default'], //set null if empty string
['phone', 'unique'],

Refer :
http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.html

Tuesday, 27 January 2015

Yii2: Using csrf token

First, if you do not understand what is the CSRF token? and why should we use it, please refer to the following link :
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

One of the new features of Yii2 is CSRF validation enabled by default.
If you use ajax or basic form as follows :

<form action='#' method='POST'>
    ...........
</form>

You will get an error exception :

Bad Request (#400): Unable to verify your data submission

That is because you do not submit csrf token. The easiest way if you dont care about csrf just disable it in main config :

'components' => [
     'request' => [
          ....
          'enableCsrfValidation'=>false,
      ],
      .....
],

Or in Controller :

public function beforeAction($action) {
    $this->enableCsrfValidation = false;
    return parent::beforeAction($action);
}

So how to use Csrf Validation for your strong security website:

* With basic form:
- Create form with yii\widgets\ActiveForm or yii\bootstrap\ActiveForm
ActiveForm will automatically add a token in the form

Can use like this

<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
    <?= $form->field($model, 'username') ?>
    <?= $form->field($model, 'password')->passwordInput() ?>
    ....
<?php ActiveForm::end(); ?>

Or

<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
      <input type='text' name='name'/>
      .........
<?php ActiveForm::end(); ?>

* With manual form:
you must manually add CSRF token in the form

<form action='#' method='POST'>
   <input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />
   ....
</form>

* With Ajax
- In main layout add csrfMetaTags :
<head>
   .......
   <?= Html::csrfMetaTags() ?>
</head>

- And in javascript ajax code add csrf param like this:

var csrfToken = $('meta[name="csrf-token"]').attr("content");
$.ajax({
         url: 'request',
         type: 'post',
         dataType: 'json',
         data: {param1: param1, _csrf : csrfToken},
});