How to install SSH2 extension for PHP 7.4

If You have an error like: Call to undefined function ssh2_connect() that’s mean that in your PHP not installed ssh2 extension.

Install this extension is very simple, in Ubuntu Linux or other Debian based distribution just use the command:

sudo apt install php7.4-ssh2

This command will install ssh2 extension to Your PHP 7.4. If you use other PHP version, just change number in this command to Your version.

Create first program “Hello World” on Assembler in Linux

To create program on Assembler in Linux operating system we need compiler for x86 architecture named nasm

sudo apt install nasm

To compile program in file hello.asm use commands:

nasm -felf64 hello.asm
ld hello.o

To start compiled program use command:

./a.out

Nov let’s create our program in file hello.asm using text editor vim

vim hello.asm

Here is the full code of program:

message:
	db	"Hello World!", 10

_start:
	mov	rax, 1
	mov	rdi, 1
	mov	rsi, message
	mov	rdx, 14
	syscall

	mov	rax, 60
	syscall

	section .data

global _start

section .text

In first two lines we create some label which contains some directive db width string “Hello World!“, and last symbol 10line feed. Directive is like variables in high level programming languages.

Directive db can use 1 byte for writing information and can write constants from -128 to 255 and can write symbols and strings.

Next create label _start: and width command mov we write some data in processor address (register):

mov rax, 1 – move 1 in register rax – in this string we call data recording.
mov rdi, 1 – This register response for input and output stream. When we send 1 in register rdi we say processor to work width standard output stream.
mov rsi, message – we write address of our string in register rsi.
mov rdx, 14 – we write count bytes of our string in register rdx.

Next we make system call width command syscall.

mov rax, 60 – we put number 60 in register rax – this is system call for exit.

And again make system call width command syscall.

At the end of program we run command section .data

Width command global _start we run our program from label _start.

Width command section .text we declare text part of our code

How to use Match in PHP 8

In PHP 8, the match expression was introduced as a more concise and powerful alternative to the switch statement. The match expression allows you to perform pattern matching against a value and execute code based on the matched pattern.

Here’s the basic syntax of the match expression:

match ($value) {
    pattern_1 => expression_1,
    pattern_2 => expression_2,
    // more patterns and expressions...
    pattern_n => expression_n,
    default => expression_default
};

Here’s how it works:

  • The $value is the expression that you want to match against.
  • pattern_1, pattern_2, and pattern_n are the patterns you want to match against the value. These can be literal values, constants, or expressions.
  • expression_1, expression_2, and expression_n are the expressions that will be executed if the corresponding pattern matches.
  • default is an optional keyword that specifies the default case when none of the patterns match. expression_default is the expression executed in the default case.

The match expression evaluates the value and compares it against each pattern in order. If a pattern matches, the corresponding expression is executed, and the match expression completes. If none of the patterns match, the default case (if provided) is executed. If no default case is provided and no pattern matches, a MatchError is thrown.

Here’s an example to illustrate the usage of the match expression:

$result = match ($value) {
    0 => 'Zero',
    1 => 'One',
    2, 3 => 'Two or Three',
    4, 5, 6 => 'Four, Five, or Six',
    default => 'Other'
};

In this example, the value of $value is matched against different patterns, and the corresponding expressions are executed based on the match. The result is assigned to the variable $result.

The match expression in PHP 8 provides a more expressive and concise way to perform pattern matching, making your code easier to read and maintain.

Disable exec, shell_exec, system, popen and Other PHP Functions To Improve Security

PHP has a lot of functions which can be used to crack your server if not used properly. You can set list of functions in php.ini using disable_functions directive. This directive allows you to disable certain functions for security reasons. It takes on a comma-delimited list of function names.

Open a terminal application or login to your server over the ssh session using ssh command. Open php.ini file using a text editor such as vim command or nano command:

sudo nano /etc/php/8.0/fpm/php.ini

Find disable_functions and set new list as follows:

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

We also recommend to disable allow_url_include and allow_url_fopen for security reasons:

allow_url_fopen=Off
allow_url_include=Off

Restart PHP with command:

systemctl restart php8.0-fpm

Node.js – Lesson 5: Create Web-server application

First create file app.js:

const express = require("express");
const app = express();
const port = 8000;

app.listen(port, () => {
    console.log("Server work on "+port); 
});

In this code we require Express framework that provides a robust set of features for web and mobile applications. Define class app – our main application class and port – default server port.

We can start our server using command:

npm run start

But now our server can not do nothing, ot only write in console text: “Server work on port 8000“. Let’s create routing and say our server how to work with Url and write text to Web-browser.

First create folder “routes” and file “routes/index.js” with code:

const mainRoutes = require('./main');

module.exports = function(app) {
    mainRoutes(app);
}

Now create file “routes/main.js“:

module.exports = function(app) {
    app.get('/', (req, res) => {
        res.end('main');
    });
}

And the last – in file “app.js” require our routes – before app.listen insert this command: require(“./routes”)(app);

const express = require("express");
const app = express();
const port = 8000;

require("./routes")(app); // require /routes/index.js 

app.listen(port, () => {
    console.log("Server work on "+port); 
});

Start program in development mode:

npm run dev

Run Web-browser and open http://localhost:8000:

Similarly you can create /about, /contact or any other route on your NodeJS Web-site.

Apache Error .htaccess: RewriteEngine not allowed here

When you try to enable option RewriteEngine on in .htaccess file you can get error:

/var/www/html/.htaccess: RewriteEngine not allowed here

In this way you need to enable AllowOverride All option.

Go to /etc/apache2/sites-available and edit 000-default.conf (or other conf file of your website):

sudo nano /etc/apache2/sites-available/000-default.conf

Add next block to this file:

<Directory />
        AllowOverride All
</Directory>

Your config file will be look’s like this:

<VirtualHost *:80>
        DocumentRoot /var/www/html

        <Directory />
            AllowOverride All
        </Directory>
</VirtualHost>

Save configuration file and restart apache2

sudo systemctl restart apache2

Python Lesson 2 (Variables and types)

Python is completely object oriented, and not “statically typed”. You do not need to declare variables before using them, or declare their type. Every variable in Python is an object.

Numbers

Python supports two types of numbers – integers(whole numbers) and floating point numbers(decimals).

myint = 7
print(myint) # Print integer 7

myfloat = 7.0
print(myfloat) # Print float 7.0

myfloat = float(7)
print(myfloat) # Print float 7.0

Strings

Strings are defined either with a single quote or a double quotes.

mystring = 'hello'
print(mystring)

mystring = "hello"
print(mystring)

Assignment of variables

first = sec = third = 1 # All three variables will be assigned 1
first, sec, third = "Hi", 75, 23.1 # Variables will be assigned in turn

To assign variable value from keyboard use command:

# String from keyboard will be assigned to variable first_var
first_var = input("Enter text: ") 

Change type of variable:

int_var = int(input("Enter integer number: "))
float_var = float(input("Enter float number: "))
str_var = str(input("Enter integer number: "))

float_var = float(int_var) # Convert int to float
int_var = int(float_var) + int(float_var) # Convert float to int
str_var = str(25) # Convert number 25 to string

If you try to convert string to number you will get error.

You can do arithmetic operations width variables

# Assign integer value 10 to variable int_var
int_var = int(5.0) + int(5.0) 

# Add 2 to int_var
int_var += 2

# Multiply string
str_var = 'Test'
str_var *= 5 # assing string 'TestTestTestTestTest'

Python Lesson 1 (Hello World):

Python is a very simple language, and has a very straightforward syntax. The simplest directive in Python is the “print” directive. In our first lesson we create script hello.py that write phrase “Hello World“.

print("Hello World\n")

Symbol \n used to set cursor on new line. That’s all it is let’s start our script:

python3 hello.py

And we will see phrase “Hello World” on our display.

Install Composer and Laravel

First install Composer package manager on on your project:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

php composer-setup.php

php -r "unlink('composer-setup.php');"

Now install Composer global:

php composer.phar global require laravel/installer

Install Composer to your project (change site-name to your project name):

php composer.phar create-project --prefer-dist laravel/laravel site-name "8.*"

Javascript: Closures, callback, context

A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function’s scope from an inner function. In JavaScript, closures are created every time a function is created, at function creation time.

window.onload = function(){
    var item = document.querySelector(".items .item");
    item onClick = activeItem;

    function activeItem() {
        console.log(item);
    }
}

In this example inner function activeItem() have access to global variable item. This called closure – when inner function have access to all variables, defined in global function.