<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Haseeb A. Basil</title>
    <description>The latest articles on Forem by Haseeb A. Basil (@mega6382).</description>
    <link>https://forem.com/mega6382</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F75242%2F4a1daff3-8b7a-4f9e-8ab2-e5535c02e7ba.gif</url>
      <title>Forem: Haseeb A. Basil</title>
      <link>https://forem.com/mega6382</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mega6382"/>
    <language>en</language>
    <item>
      <title>A Basic Guide on How to Deploy An Application to Alibaba Cloud Container Service from Bitbucket…</title>
      <dc:creator>Haseeb A. Basil</dc:creator>
      <pubDate>Mon, 11 Mar 2019 04:58:27 +0000</pubDate>
      <link>https://forem.com/mega6382/a-basic-guide-on-how-to-deploy-an-application-to-alibaba-cloud-container-service-from-bitbucket-1llb</link>
      <guid>https://forem.com/mega6382/a-basic-guide-on-how-to-deploy-an-application-to-alibaba-cloud-container-service-from-bitbucket-1llb</guid>
      <description>&lt;h3&gt;
  
  
  A Basic Guide on How to Deploy An Application to Alibaba Cloud Container Service from Bitbucket and Securing it with Let’s Encrypt SSL/ &lt;strong&gt;TLS&lt;/strong&gt;  2019
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gTcGBqF_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/669/1%2AHEg99iZqEL4rvyA7Wf5zVw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gTcGBqF_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/669/1%2AHEg99iZqEL4rvyA7Wf5zVw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you are working with micro-services, you always want to make sure that all instances of the same service are always the same and all the micro-services can easily communicate with each other, and that’s where containerization comes in, and Docker is one of the most popular containerization technology out there. And in this article we will learn how to deploy a simple Node.js Application to Alibaba Cloud Container Service from our Bitbucket Repo, and then we will secure the domain we will be using for it with Let’s Encrypt SSL/TLS.&lt;/p&gt;

&lt;p&gt;So, here is a list of services that we will be using:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Bitbucket&lt;/li&gt;
&lt;li&gt;Alibaba Cloud Container Registry&lt;/li&gt;
&lt;li&gt;Alibaba Cloud Container Service&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Let’s Encrypt SSL/TLS&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Docker is an open source software designed to create, deploy, and run applications by using containers. Containers allow a developer to package up an application with all of the parts it needs, such as libraries and other dependencies, and ship it all out as one package. By doing so, thanks to the container, the developer can rest assured that the application will run on any other Linux machine regardless of any customized settings that machine might have that could differ from the machine used for writing and testing the code.&lt;br&gt;&lt;br&gt;
Containers are a bit like a virtual machines. But unlike a virtual machine, rather than creating a whole virtual operating system, Docker allows applications to use the same Linux kernel as the system that they’re running on and only requires applications be shipped with things not already running on the host computer. This gives a significant performance boost and reduces the size of the application. &lt;a href="https://www.docker.com/"&gt;Learn More &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial we will be using Docker to containerize our Application, so we can deploy and run it on Alibaba Cloud Container Service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bitbucket&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bitbucket is a Git version control repository management solution designed for professional teams. It gives you a central place to manage git repositories, collaborate on your source code and guide you through the development flow. It allows you to create unlimited private free Repositories with up to 5 collaborators. Which makes it an optimal place to host proprietary code. &lt;a href="https://bitbucket.org"&gt;Learn More&amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of its main features are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Access control&lt;/strong&gt; to restrict access to your source code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow control&lt;/strong&gt; to enforce a project or team workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pull requests&lt;/strong&gt; with in-line commenting for collaboration on code review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jira integration&lt;/strong&gt; for full development traceability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full Rest API&lt;/strong&gt; to build features custom to your workflow if they are not already available from their Marketplace&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this tutorial we will be using Bitbucket to host the Repository for our Application’s code and we will be creating a CI/CD pipeline through it to deploy the application to Alibaba Cloud Container Service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alibaba Cloud Container Registry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alibaba Cloud Container Registry (ACR) is a secure image hosting platform that provides containerized image lifecycle management. With ACR, you have full control over your stored images. ACR has a number of features, including integration with GitHub, Bitbucket etc. It can also automatically build new images after the compile and test from source code to applications. This service simplifies the creation and maintenance of the image registry and supports image management in multiple regions. Combined with other cloud services such as Container Service, Container Registry provides an optimized solution for using Docker in the cloud. &lt;a href="https://www.alibabacloud.com/help/doc-detail/60743.htm?spm=a3c0i.11159930.1160647.1.6a407ff9UHRqwk"&gt;Learn More&amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, we will be using ACR for hosting our Docker images, which we can later use to deploy our Application on Alibaba Cloud Container Service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alibaba Cloud Container Service&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alibaba Cloud Container Service(ACS) is a high-performance and scalable container application management service that enables you to use Docker and Kubernetes to manage the lifecycle of containerized applications.&lt;br&gt;&lt;br&gt;
Container Service offers a variety of application publishing methods and continuous delivery capabilities and supports micro-service architectures.&lt;br&gt;&lt;br&gt;
Container Service simplifies establishment of container management clusters and integrates Alibaba Cloud virtualization, storage, network, and security capabilities to create the optimal container running environment on the cloud. &lt;a href="https://www.alibabacloud.com/help/product/25972.htm?spm=a3c0i.87853.1090990.1.1066784ftqHAe2"&gt;Learn More &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, we will be using Alibaba Cloud Container Service to host and deploy our micro-services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Node.js is an asynchronous event driven JavaScript runtime environment. It is designed to build scalable network applications. The Node run-time environment includes everything you need to execute a program written in JavaScript on your machine as a standalone application. Node.js run on the V8 JavaScript runtime engine. This engine takes your JavaScript code and converts it into a faster machine code. Machine code is low-level code which the computer can run without needing to first interpret it. &lt;a href="https://nodejs.org"&gt;Learn More &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, we will be using Node.js to create a simple “Hello World” application that we will try to deploy ACS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let’s Encrypt SSL/TLS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s Encrypt is a global Certificate Authority (CA). They let people and organizations around the world obtain, renew, and manage SSL/TLS certificates. These certificates can be used by websites to enable secure HTTPS connections. Let’s Encrypt only offers Domain Validation (DV) certificates. They do not charge a fee for these certificates. Let’s Encrypt is a nonprofit, with a mission to create a more secure and privacy-respecting Web by promoting the widespread adoption of HTTPS. Their services are free and easy to use so that any website can deploy HTTPS. &lt;a href="https://letsencrypt.org/"&gt;Learn More &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, we will be using Let’s Encrypt SSL/TLS to secure our application.&lt;/p&gt;
&lt;h3&gt;
  
  
  Now Lets Get Started
&lt;/h3&gt;

&lt;p&gt;To begin with, we will be creating a private repository for our Application’s code on Bitbucket, so for that you must have a Bitbucket account, if you don’t have one then you can sign up for an account. Then we will be using Alibaba Cloud Services to create Docker images and deploy our Containerized Application. So, you must also have an Alibaba Cloud account set up. If you don’t have one, you can sign up for an account.&lt;/p&gt;
&lt;h3&gt;
  
  
  Part I: Creating the Bitbucket Git Repository And Adding our Application and Docker Configurations in it
&lt;/h3&gt;

&lt;p&gt;Step 1: Creating the Bitbucket Repository&lt;/p&gt;

&lt;p&gt;First, login to your Bitbucket account and click on the “+” button located in the left menu bar, and then from the options select “Repository”, and then in the “Create a new repository” form, provide the name for the Repository. And then press the “Create Repository button”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A73mUooR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1002/1%2AkuxLk2JZa2PwXJ6N2CCXww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A73mUooR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1002/1%2AkuxLk2JZa2PwXJ6N2CCXww.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Adding the Application and Docker files into the Repository&lt;/p&gt;

&lt;p&gt;Now that we have successfully created the Repository, we start by adding the files for our Application and Docker into that Repository.&lt;/p&gt;

&lt;p&gt;So, to start, we will initialize git in a local directory. First, create an empty directory on your local machine, lets call it “sample-app-for-alibaba-cloud” and open it in “Git Bash” or your preferred CLI. And run the git init command inside it.&lt;/p&gt;

&lt;p&gt;Now, we will add the files in that directory. First we will add our Application file “app.js”, with the following contents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) =&amp;gt; {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () =&amp;gt; {
  console.log(`Server running at [http://${hostname}:${port}/`](http://%24%7Bhostname%7D:%24%7Bport%7D/%60));
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a simple “Hello World” Application that will run on Node.js’ built’in server on port 3000.&lt;/p&gt;

&lt;p&gt;Now, we will be adding the Docker configuration file “Dockerfile”, with the following contents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Use Node version 10.15.1
FROM node:10.15.1

# Create a directory where our app will be placed
RUN mkdir -p /usr/src/app

# Change directory so that our commands run inside this new directory
WORKDIR /usr/src/app

# Get all the code needed to run the app
COPY . /usr/src/app

# Expose the port the app runs in
EXPOSE 3000

# Serve the app
CMD node app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The comments in the file should explain what each line does. The configurations inside this file will be used to determine how the container image for our Application will be created.&lt;/p&gt;

&lt;p&gt;Now, you should be ready to push these files to the Bitbucket repository we created earlier, it can be done using these git commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add .

git commit -m "app.js and dockerfile added"

git remote add origin https://your-username@bitbucket.org/your-username/the-repo-name.git

git push -u origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Part II: Integrating Bitbucket with ACR
&lt;/h3&gt;

&lt;p&gt;The first thing you need to do is to activate the Alibaba Cloud Container Registry. It can be found under the “Elastic Computing” section on your Alibaba Cloud Console.&lt;br&gt;&lt;br&gt;
It will take you to the Container Registry Console where you can configure and deploy the service. At that time It might ask you to enter the Password for the docker client, and remember “When logging into docker, use your Alibaba Cloud account for the user name and password you set just now”.&lt;/p&gt;

&lt;p&gt;Now, we will Create a new ACR Namespace. Usually the containers are used to create micro-services. Although we are using only single service in our application, this will not usually be the case in the real world. So, that is where ACR Namespaces comes in, a Namespace is a collection of Repositories and Repository is a collection of images. It is recommended to create one Namespace for each Application and one Repository for each service image.&lt;/p&gt;

&lt;p&gt;So, to create a new Namespace, go to the Namespaces tab in the ACR console and then click on “Create Namespace” button on the top right corner. Then enter the name for the Namespace and click the “Confirm” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yz4np3jA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ALOr--uRjLItQgU54YRSvRA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yz4np3jA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ALOr--uRjLItQgU54YRSvRA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we will bind our Bitbucket account with the ACR. To do that go to the “Code Source” tab on the main ACR console, from there you should click on the “Bind Account” button next to Bitbucket, which will prompt a little dialog and now you should click on “Go to the source code repository to bind account” link.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vWYJ6JMn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ao6GGlKmaFVLLoSLephjnFw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vWYJ6JMn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ao6GGlKmaFVLLoSLephjnFw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which will take you to Bitbucket, requesting you to grant access to Alibaba Cloud. There you should click on “Grant Access” button to continue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LRpRljs0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AWlTfDdcxEM2iG3-vgePAfg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LRpRljs0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AWlTfDdcxEM2iG3-vgePAfg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you should be ready to create an ACR Repository, to do that, just go to the “Repositories” tab on the ACR console and click on the “Create Repository” button on the top right corner. It will present you with a form where you will have to enter the details for the Repository, such as Region, Namespace, Repository Name, Summary etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fLIl9gD---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A_bhu1yFgPzKetOXENij7uQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fLIl9gD---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A_bhu1yFgPzKetOXENij7uQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After filling that part out click on the “Next” button. ON the next page it will present you with a form to select the “Code Source” options. And on this page, we will be integrating our &lt;strong&gt;Bitbucket&lt;/strong&gt; Repository with our ACR Repository. From the “Code Source” tabs select “Bitbucket” and click on the the Bitbucket Repository we created earlier.&lt;/p&gt;

&lt;p&gt;To help configure continuous Integration be sure to check the “Automatically Build Image”. With this selected the image can be automatically built after you submit the code, without requiring you to manually trigger the build. Now finally click on the “Create Repository” button to create the ACR Repository and Integrating the Bitbucket Repository with it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lEdmSBAK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AEhIPO9kyLdnxM6QJAPJVDA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lEdmSBAK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AEhIPO9kyLdnxM6QJAPJVDA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Part III: Deploying The Application
&lt;/h3&gt;

&lt;p&gt;To begin, we will need to create a VPC, to do that simply navigate to the Virtual Private Cloud under Networking. This will take you to the VPC console, where you click on the “Create VPC” button to create the VPC and VSwitch. After clicking the button you will be presented with a small form to select the options for your new VPC, we will use the default settings for the most part and just enter names, and then click “OK” button to continue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nX3Yt10B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AG44fLR9VXBZcqx-1Yhtj3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nX3Yt10B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AG44fLR9VXBZcqx-1Yhtj3g.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To get started with the Alibaba Cloud Cloud Service, the first thing we need to do is navigate to the Container Service dashboard. This dashboard can be found under the Elastic Computing section on your Alibaba Cloud Console.&lt;/p&gt;

&lt;p&gt;On first try, it might present you with a warning “Container service needs to create default roles”. That is because once you request a cluster, Alibaba Cloud will go about provisioning the resources necessary to run it. This includes load balancers, virtual machines, routers etc. Basically everything required to run your own Docker cluster. And the load balancer requires the Resource Access Management (RAM) service to be set up before it will work.. To deal with that just click on the “Go to RAM console” button, and once redirected, click on the “Confirm Authorization Policy” button.&lt;/p&gt;

&lt;p&gt;This will finally take you to the Container Service Overview page, from there select the “Container Service-Swarm” on the top left corner and then click on the “Create Cluster” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5mdr6p3u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AZEyNO7pxkwDLAZTTX37Dyg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5mdr6p3u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AZEyNO7pxkwDLAZTTX37Dyg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will take you to the Cluster Creation Wizard. It will present you with all the options required to configure the Cluster e.g. Name, Region, Zone, VPC etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Aacy65LR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AMCg_lcPqqBmAQi1BHyv5rg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Aacy65LR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AMCg_lcPqqBmAQi1BHyv5rg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will be using the default values for the most part, but we will be changing “Instance Type” under “Instance Configuration” to “ 1 Core(s) 1 G ( ecs.n1.tiny )” for the purpose of this demo. We will also need to setup login for the ECS instances that will be created for this cluster, you will have 2 options “Key Pair” or “Password”, choose whichever you prefer. After configuring this click on the “Create” button to continue. Then you will be prompted with a dialog with all the details of the cluster that was just created, make sure everything is correct and click on “OK” button to continue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jEpN-LO8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1003/1%2AziQMwqjZJ-FkcLpkglY3mw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jEpN-LO8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1003/1%2AziQMwqjZJ-FkcLpkglY3mw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we will create a Tag(release) for our source code on Bitbucket, this will automatically build an image in ACR. To do this, first navigate to the commits page of the Bitbucket Repository we created earlier and select the latest commit we pushed into it. On that page you will see a “Tags” option on the right side of the page with “+” button next to it, click it to open the dialog to create a new tag, in the dialog there will be two fields Name and Description, enter the name in the format of “ release-v*” e.g. “ release-v1.0.0” and then click the “Create Tag” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6DbZ3fqA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AxbVvnU7R2Ed7Xc9PPyReqQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6DbZ3fqA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AxbVvnU7R2Ed7Xc9PPyReqQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, navigate back to the Repositories on the ACR console and click on the “manage” button next to the ACR Repository that we created earlier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VRdHaHLN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AAd6o3vmH5QN4X2xtgaZyvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VRdHaHLN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AAd6o3vmH5QN4X2xtgaZyvw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will take you to the Details page for that Repository, there you will find all the details for your repository e.g. Name, Region, Type, Code Repository Link, Internet Address, VPC Address etc. From there navigate to the “Build” tab, there under the “Build Log” you will find the build for the tag that we created earlier. Once the status for the build is “Successful”, click on the “Deploy Application” button on the top right corner, it will present you with a small dialog where you can configure the deployment options like “Repository Address” and “Container Cluster”. For the “Container Cluster” option select “Swarm” and then click on the “Deploy” Button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QiTudqxi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A5XfeFaC3mz9hUreEbW2Krg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QiTudqxi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A5XfeFaC3mz9hUreEbW2Krg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will take you to the ACS Application creation wizard. There, on the “ Basic Information” tab, you will be provided with the options like Name, Version, Cluster, Update and Description etc. Enter the name and select the cluster we created earlier, then check the “Pull Docker Image” and click “Next” button to continue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GPX3ftGi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AszM4Dn1KheZxRZzkiSaFSQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GPX3ftGi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AszM4Dn1KheZxRZzkiSaFSQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will take you to the “Configuration” tab of the creation wizard. There you should select the “Image Name” and “Image Version”of our Docker container and use “3000” as the “host Port” under “Port Mapping”. Then proceed to add Port and Domain under “Web routing”. You will also find a lot of other configuration options on that page, but we will use their default values for the purposes of this article. Now click on the “Create” button to finally create the Application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GrX-KnjI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2APrXNCsvPHG-1A-jloUTn4w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GrX-KnjI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2APrXNCsvPHG-1A-jloUTn4w.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then on the Done page click on the “View Application List” link to continue to to the Applications List page, there you will find the application that we just created, click on it to go to the Application’s overview page. Then click on the “Routes” tab to get the Access Endpoint for our Application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Vpu6p6dG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ADpF_vumOkMGHP-3BK_S1Gg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Vpu6p6dG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ADpF_vumOkMGHP-3BK_S1Gg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And there you go, we have successfully deployed our Containerized Application. Now, on to the final part.&lt;/p&gt;

&lt;h3&gt;
  
  
  Part IV: Securing our Application with Let’s Encrypt SSL/TLS
&lt;/h3&gt;

&lt;p&gt;To get Started with this, you should first go through this guide by John Hanley on configuring &lt;a href="https://www.alibabacloud.com/blog/let%27s-encrypt-acme-on-alibaba-cloud-%E2%80%93-part-1_593777?spm=a2c65.11461447.0.0.63f55dd7z2KNy2"&gt;Let’s Encrypt ACME on Alibaba Cloud&lt;/a&gt;. Now once you have configured everything and have created the Certificate files, proceed to follow the aforementioned steps.&lt;/p&gt;

&lt;p&gt;As HTTPS is supported at the Server Load Balancer layer. To support HTTPS, we will need to create a Server Load Balancer certificate. To do that navigate to the Server Load Balancer console under Networking, and then proceed onto the “Certificates” page by clicking the “Certificates” link in the left panel. Once there then click on “Create Certificate” button and then select the “ Upload Third-Party Certificate” option and click the “Next” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1knzXQeb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AK4yQ1dnQEHaaRKtovDZelQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1knzXQeb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AK4yQ1dnQEHaaRKtovDZelQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That will take you to “Upload Third-Party Certificate”, fill in the information required and click the “Next” button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pZGnbdbn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/621/1%2A5Ja48qvMROK1GO_UQ0dkLA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pZGnbdbn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/621/1%2A5Ja48qvMROK1GO_UQ0dkLA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the certificate is successfully created, Navigate to the Server Load Balancer page and locate and click on the Server Load Balancer instance that was assigned during cluster creation. Once in, click on the “Add Listener” button under the “Listeners” tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--llOAHXbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ac6JKrKf11x4rF_WtCbHlIw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--llOAHXbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ac6JKrKf11x4rF_WtCbHlIw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That will open the Wizard for adding Listeners, from there you should follow this guide changing &lt;a href="https://www.alibabacloud.com/help/doc-detail/25987.htm"&gt;HTTP to HTTPS&lt;/a&gt; to fill out the wizard. Once done with that you are all set with your Containerized Application that is secured with Let’s Encrypt SSL/TLS.&lt;/p&gt;

</description>
      <category>letsencrypt</category>
      <category>node</category>
      <category>alibabacloud</category>
      <category>docker</category>
    </item>
    <item>
      <title>LambdaTest Selenium Testing Tool Tutorial with Examples in 2022</title>
      <dc:creator>Haseeb A. Basil</dc:creator>
      <pubDate>Thu, 07 Mar 2019 14:57:14 +0000</pubDate>
      <link>https://forem.com/mega6382/lambdatest-selenium-testing-tool-tutorial-with-examples-in-2019-17ma</link>
      <guid>https://forem.com/mega6382/lambdatest-selenium-testing-tool-tutorial-with-examples-in-2019-17ma</guid>
      <description>&lt;h3&gt;
  
  
  What is Website Test Automation and Why is it Necessary?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  2. What is Selenium Grid and How it Works with LambdaTest?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  3. Why use Selenium Grid and What Are the Benefits of cloud-based Solution?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  4. LambdaTest Features And Services
&lt;/h3&gt;

&lt;h3&gt;
  
  
  5. LambdaTest Languages and Frameworks Support
&lt;/h3&gt;

&lt;h3&gt;
  
  
  6. Usage
&lt;/h3&gt;

&lt;h3&gt;
  
  
  7. How Can I Use Lambda Test’s Selenium Grid for Free?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sb-UyYUz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AIVfOXbzYXXLaZJ0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sb-UyYUz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AIVfOXbzYXXLaZJ0o.png" alt="" width="600" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. What is Website Test Automation and Why is it Necessary?
&lt;/h3&gt;

&lt;p&gt;Tests help identifying whether a particular application communicates effectively and is able to access its functions correctly.&lt;/p&gt;

&lt;p&gt;Tests also help in confirming how a particular application behaves in different situations. In other words, tests are an effective way to verify whether the application meets the terms of business logic and also deliver the desired output at the user’s end.&lt;/p&gt;

&lt;p&gt;And test automation is the best way to increase the effectiveness, efficiency and coverage of your software testing.&lt;/p&gt;

&lt;p&gt;Manually testing requires a person sitting in front of a computer carefully going through application’s screens, trying various usage and input combinations, comparing the results to the expected behavior and recording their observations.&lt;/p&gt;

&lt;p&gt;Manual tests are repeated often during development cycles for source code changes and other situations like multiple operating environments and hardware configurations.&lt;/p&gt;

&lt;p&gt;But by using a test automation tool you can prerecord and predefine those actions and compare the results of these tests to the expected behavior and report the success or failure status of these tests.&lt;/p&gt;

&lt;p&gt;These automated tests can easily be extended according to needs to perform tasks that would be impossible with manual testing. And with the increasing need to provide a product with least defects as possible, it is easy to see why automated software testing is an essential component of successful development projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What is Selenium Grid and How it Works with LambdaTest?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.phpclasses.org/blog/post/793/link/123/name/LambdaTestSeleniumGrid"&gt;LambdaTest Selenium Grid&lt;/a&gt; is a scalable, secure, and reliable cloud based Selenium grid. It lets you perform automated cross browser testing across all major browsers and various browser versions, latest and legacy and across operating systems.&lt;/p&gt;

&lt;p&gt;It also lets you run your multiple selenium automated tests in parallel which allows you to cut down on your build time. It also provides you with screenshots from over 2000 mobile and desktop browsers, so you can perform visual cross browser compatibility testing and there is no need to test for each browser manually as you get full paged screenshots by just selecting the configurations.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Why use Selenium Grid and What Are the Benefits of cloud-based Solution?
&lt;/h3&gt;

&lt;p&gt;Selenium Grid helps you run your tests in parallel on multiple different nodes which are to be registered to central hub.&lt;/p&gt;

&lt;p&gt;You create your driver object by sending the request to the hub which finds a matching node based on the desired capability you have set, and executes the test on that node. A node can be any device running any particular browser and operating system.&lt;br&gt;&lt;br&gt;
The main reasons to use Selenium Grid is to be able to run your tests:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Against various browsers, operating systems, and devices. This ensures compatibility of the application under test across multiple combinations of web browsers, operating system, and hardware architecture.&lt;/li&gt;
&lt;li&gt;In parallel. For example, if you have 10 nodes and need to execute a test suite of 50 tests, then it will be able to run those tests in parallel on all 10 of those nodes.&lt;/li&gt;
&lt;li&gt;Which will help minimize the test execution time, as it is going to take 5 times as less time than a single machine that runs this test suit without Selenium Grid.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This provides you with an all around idea of how your application will behave on various browsers on various machines, which can help you enhance and improve your application accordingly, if need be.&lt;/p&gt;
&lt;h3&gt;
  
  
  Benefits of cloud-based Selenium Grid
&lt;/h3&gt;

&lt;p&gt;The thing about Selenium Grid is that it can be expensive to setup additional machines as Nodes, and this is where an Online Selenium Grid (SaaS) can truly shine. They offer various packages from entry level pricing to enterprise packages.&lt;/p&gt;

&lt;p&gt;And usually the price for cloud solutions often scale linear with the number of tests and the concurrency of tests. Which means that you can scale according to your needs and can keep the cost under control accordingly as well.&lt;/p&gt;

&lt;p&gt;Another thing about Selenium Grid is that it is terribly difficult to set them up. To setup Selenium Grid on virtual machines(VMs), Here is a list of things you would need to do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download the operating systems and install them on different VMs&lt;/li&gt;
&lt;li&gt;Set up their network configuration, install Java and Selenium&lt;/li&gt;
&lt;li&gt;Download and install the browsers you need&lt;/li&gt;
&lt;li&gt;Make Selenium automatically start on boot&lt;/li&gt;
&lt;li&gt;Configure the grid to accept the nodes together with timeout settings and other settings&lt;/li&gt;
&lt;li&gt;Create a mechanism to automatically start and destroy VMs for each test, since you want clean VMs for every single test run&lt;/li&gt;
&lt;li&gt;Install a screenshot program depending on the OS and platform&lt;/li&gt;
&lt;li&gt;Upload the screenshots and store them so you can view them later&lt;/li&gt;
&lt;li&gt;Keep your VMs up to date: install OS updates, update your browser versions, install patches etc&lt;/li&gt;
&lt;li&gt;Debug flaky connections to the VMs, issues with browsers failing to start&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, the benefit of using such a cloud service is that the provider takes care of all this time consuming development and maintenance of the Selenium Grid infrastructure. Cloud providers boast a large range of browser / OS / combinations and support mobile testing.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. LambdaTest Features And Services
&lt;/h3&gt;
&lt;h3&gt;
  
  
  Scalable Selenium Grid
&lt;/h3&gt;

&lt;p&gt;LambdaTest provides a scalable Selenium Grid that is specifically built for speed, it drastically reduces your build times and speed up your goto market.&lt;/p&gt;

&lt;p&gt;Run your selenium automated tests in parallel on their on-demand scalable selenium infrastructure and cut down on your build times multiple folds. Run tons of tests at once in parallel to speed up your testing time on their selenium grid.&lt;/p&gt;
&lt;h3&gt;
  
  
  Browser Compatibility Testing
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.phpclasses.org/blog/post/793/link/123/name/LambdaTestSeleniumGrid"&gt;LambdaTest Selenium Grid&lt;/a&gt; lets you perform browser compatibility testing with full flexibility to prepare a live interactive cross browser compatibility testing environment with your choice of desired desktop and mobile browsers, browser versions, operating systems, and resolutions.&lt;/p&gt;

&lt;p&gt;All remote browsers come with pre-installed RIA software and developer tools. You can also record testing session or take screenshots during your real time browser compatibility testing sessions on the go!&lt;/p&gt;
&lt;h3&gt;
  
  
  Automated Screenshots
&lt;/h3&gt;

&lt;p&gt;LambdaTest’s automated screenshots feature lets you perform visual cross browser compatibility testing across 2000+ mobile and desktop browsers by just selecting the configurations. There is no need to test for each combination manually as you get full paged screenshots within seconds.&lt;/p&gt;
&lt;h3&gt;
  
  
  Debug Test Cases in Details
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.phpclasses.org/blog/post/793/link/123/name/LambdaTestSeleniumGrid"&gt;LambdaTest Selenium Grid&lt;/a&gt; also lets you analyze and debug your Selenium tests with multiple types of test logs e.g. meta data logs, network logs, command logs, exception logs, visual logs, and raw selenium logs.&lt;/p&gt;

&lt;p&gt;You can also take automated video recording of the whole test run and take screenshots of pages at various entry points to analyze the visual bugs and check possible fixes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Test on Latest and Legacy Browsers
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.phpclasses.org/blog/post/793/link/123/name/LambdaTestSeleniumGrid"&gt;LambdaTest Selenium Grid&lt;/a&gt; comes with many different browsers to run your tests on. From ancient versions to latest beta versions, they provide all versions of Chrome, Safari, Firefox, Opera, Edge, and Internet Explorer, which give you the capability to cover your every edge test case.&lt;/p&gt;
&lt;h3&gt;
  
  
  Integrations
&lt;/h3&gt;

&lt;p&gt;LambdaTest provides support for continuous testing with Continuous Integration tools, through their plugins for Jenkins, Teamcity, Travis CI and Bamboo, you can configure selenium capabilities and run your automated scripts at LambdaTest’s Selenium grid.&lt;/p&gt;

&lt;p&gt;And it also provides integration support for One-click Bug logging, which lets you with just a single click, directly push Issues from LambdaTest to third party project management or communication tools e.g. JIRA, Asana, Slack, Trello, BitBucket, GitLab, GitHub, Clubhouse, VSTS, BugHerd, Mantis, and many more.&lt;/p&gt;
&lt;h3&gt;
  
  
  24*7 Support
&lt;/h3&gt;

&lt;p&gt;If you face any problem whilst using LambdaTest, they have you covered. Their tech experts are available on support 24*7.&lt;/p&gt;

&lt;p&gt;You can get in touch with them by filling up the contact form, messaging in-app, or through call. You can also write to them at &lt;a href="mailto:support@lambdatest.com"&gt;support@lambdatest.com&lt;/a&gt; and they’ll get back to you in no time.&lt;/p&gt;
&lt;h3&gt;
  
  
  Inbuilt Issue Tracker
&lt;/h3&gt;

&lt;p&gt;If you do not use any third part project management tool, then you can use LambdaTest’s inbuilt issue tracker, you can manage your bugs directly from LambdaTest platform while performing Selenium testing. You can assign, track, export to PDF, share bugs and take a complete control using their inbuilt issue tracker. It is easy and flexible to use.&lt;/p&gt;
&lt;h3&gt;
  
  
  5. LambdaTest Languages and Frameworks Support
&lt;/h3&gt;

&lt;p&gt;Here are all the frameworks with respect to languages supported by LambdaTest Selenium Grid.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  6. Usage
&lt;/h3&gt;

&lt;p&gt;In this part you will find out how to configure and use LambdaTest’s Selenium Automation Grid and how their services work and how the entire platform comes together. In this tutorial we will be setting up a simple PHP application which will utilize the PHPUnit Testing framework to run Selenium scripts.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to setup
&lt;/h3&gt;

&lt;p&gt;To run PHP scripts, you will need to have both PHP and Composer installed on your machine. If you don’t have PHP installed then you can get it from &lt;a href="http://php.net/manual/en/install.php"&gt;here&lt;/a&gt; or you can use a solution stack such as Xampp, Mamp, Wamp etc. And to get Composer you can simply follow the instructions from here &lt;a href="https://getcomposer.org/"&gt;https://getcomposer.org/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now that you have got that sorted out, you can start installing Selenium dependencies. To do that, first create a directory for your app and navigate into that directory from terminal and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require phpunit/phpunit-selenium facebook/webdriver
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or you may have to use “php composer.phar require phpunit/phpunit-selenium facebook/webdriver”, depending on how your Composer is configured.&lt;br&gt;&lt;br&gt;
Once you have installed and setup PHP and Selenium and its dependencies, you can now start running PHP automation scripts on LambdaTest Selenium Grid.&lt;/p&gt;

&lt;p&gt;You can fork this &lt;a href="https://github.com/LambdaTest/php-selenium-sample"&gt;sample code&lt;/a&gt; from their Github page. This is a simple PHP and Selenium automation script that opens up google.com, search LambdaTest in google search and outputs the title of the resulting google search page.&lt;/p&gt;

&lt;p&gt;This script will be using the node with these configurations by default, Chrome 63.0 on Windows 10. You can change these its capabilities as you desire, you can even use their &lt;a href="https://www.lambdatest.com/capabilities-generator/"&gt;Selenium Desired Capabilities Generator&lt;/a&gt;to generate configurations easily.&lt;/p&gt;

&lt;p&gt;Now in order to run that you will need to add your username which can be found at Automation Dashboard and AccessKey, which you can be generated from your Automation dashboard. As shown in screenshots below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cLsu050i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AsPbeNmBY_ShGDWjV.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cLsu050i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/800/0%2AsPbeNmBY_ShGDWjV.png" alt="" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have gotten your username and AccessKey, you should replace them with values of these variables in the code $LT_USERNAME and $LT_APPKEY respectively. After that you can save the file and execute the test from your terminal through this command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"./vendor/bin/phpunit" lambdatest.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the script has run, you will be able to see it in your Automation Dashboard under the title “Php Build”. You can click on it to get the details e.g. video recording, logs, metadata etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to use the built-in Issue Tracker
&lt;/h3&gt;

&lt;p&gt;Now, as I mentioned before that if you do not have a third-party issue tracker, you can easily use LambdaTest’s built-in Issue tracker.&lt;/p&gt;

&lt;p&gt;So, in order to do that just go to “Automation Logs” tab in your Automation Dashboard then select the test from the list on the left and then click on “Create Issue” button on the far right side of the screen. This will show a modal, from where you can add the details of the issue, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assignee: Who this issue should be assigned to.&lt;/li&gt;
&lt;li&gt;Issue Type: Whether its a bug or a task.&lt;/li&gt;
&lt;li&gt;Priority: How severe the importance of this issue is.&lt;/li&gt;
&lt;li&gt;Summary: A simple phrase to explain that explains the issue.&lt;/li&gt;
&lt;li&gt;Description: Details as to what this issue is about and what end result is required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you have added the data, just click on the “Create Issue” button that is below the form and the issue will be created, which you can check by going to the Issue Tracker page from the menu.&lt;/p&gt;

&lt;p&gt;There you will be able to view and change its status to e.g. “In Progress”, “Resolved”, “Rejected” etc, and even change the assignee, issue type and priority. You will also be able to view other details as Browser, OS, Resolution etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automation
&lt;/h3&gt;

&lt;p&gt;Here we will discuss all the options on the Automation Dashboard and what their purposes.&lt;/p&gt;

&lt;p&gt;In the Automation Dashboard you can view the Timelines, Analytics, and Automation Log of all the tests and builds you have ran on the LambdaTest’s Grid. In these you can use advance filters and get detailed information of all your tests.&lt;/p&gt;

&lt;h4&gt;
  
  
  Timeline
&lt;/h4&gt;

&lt;p&gt;In Timeline you can see the list of all the tests that you have ran on LambdaTest’s Grid, you can filter them based on Date, User, Build Name and Status. In Timeline there are 2 types of views:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build View(Default): All tests sharing common build name are merged into one, and you can click on any of the build to see all their tests under Automation Logs page.&lt;/li&gt;
&lt;li&gt;Test View: This shows all tests individually and you can click on any of the tests to go to its Automation Logs page, where you view all their details.&lt;/li&gt;
&lt;li&gt;Summary: This contains the most basic details of your tests, like video, status, date it ran on, name of the person who ran it, the node it ran on and its unique id.&lt;/li&gt;
&lt;li&gt;Exception: This shows the list of any and all exceptions that occurred during the execution of the tests.&lt;/li&gt;
&lt;li&gt;Command: This shows the list of commands that were ran in the execution of the test, and whether those commands were successful or not.&lt;/li&gt;
&lt;li&gt;Network: In this you can see the list of all the web resources that were loaded during the execution of the test e.g. JS, CSS, image files etc.&lt;/li&gt;
&lt;li&gt;Logs: In this you can see all the logs that you had configured to be captured when the selenium script would run e.g. Selenium Logs, Console Logs etc&lt;/li&gt;
&lt;li&gt;Metadata: This is where you can see all the details of test’s configuration e.g. Browser Config and Input Config etc. Also, you can download all the screenshots and the video from here.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Automation Logs
&lt;/h4&gt;

&lt;p&gt;In Automation Logs you can see the complete details of your tests, like:&lt;/p&gt;

&lt;h4&gt;
  
  
  Analytics
&lt;/h4&gt;

&lt;p&gt;This page will give you the in-depth understanding and analytics of all your builds and tests. Like timeline, this also provides both Build View and Test View.&lt;/p&gt;

&lt;p&gt;On this page you can see how many tests/builds ran and how much time it took, how many tests/builds passed and how many failed. You can also filter these results by, Browser, OS, User and Date(Day, Week and Month) and Status, which will provide you with more specific results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual UI Testing
&lt;/h3&gt;

&lt;p&gt;LambdaTest provides amazing some amazing features for Visual UI Testing, the main ones being:&lt;/p&gt;

&lt;h4&gt;
  
  
  Screenshot Test
&lt;/h4&gt;

&lt;p&gt;This provides you with a simple UI to select the Browsers you want to test on and the Operating Systems you want to test on, for both Mobile and Desktop. After your selection, simply add the URL for the page you want to test, it also provides you with some advance features, such as using Basic Authentication and configuration for the screenshots, which can be seen in screenshot below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u_It9IBy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/450/0%2AqZETwNaQBFzAzKg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u_It9IBy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/450/0%2AqZETwNaQBFzAzKg1.png" alt="" width="450" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you are done configuring your test, you can click on the “Capture” button to start the test. Which will take you the the results page, where you can view and download screenshot for each and every browser you selected. You can also download the zip archive of all the screenshots and you can even share those screenshots, via a shareable link.&lt;/p&gt;

&lt;p&gt;Now, if you find any bugs in any of the screenshots, you can use the following steps to record that into the issue tracker:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Above the screenshots you will find a camera icon, click that icon.&lt;/li&gt;
&lt;li&gt;Image editor will pop up where you can comment about the screenshot and then click the “Mark as Bug” button on the bottom right of the modal.&lt;/li&gt;
&lt;li&gt;Finally, click save and then fill in the “Create Issue” form on the pop up to record the issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Responsive Test
&lt;/h4&gt;

&lt;p&gt;This feature provides you the ability to perform Responsive screen testing across many devices and resolutions. This kind of testing helps a website to render its content in a flexible yet appropriate manner on the basis of the devices &amp;amp; OS you select. To use this feature, simply follow the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click ‘Responsive Test’ sub menu under Visual UI Testing menu in menu bar.&lt;/li&gt;
&lt;li&gt;Insert the URL for which you want to test responsiveness in the url input bar.&lt;/li&gt;
&lt;li&gt;Select your monitor size (diagonal length in inches).&lt;/li&gt;
&lt;li&gt;Click ‘Generate’ to generate screenshots.&lt;/li&gt;
&lt;li&gt;On right side of the page, you will find various mobile and desktop combinations. On clicking them you can test the responsiveness for those particular devices.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, if you find any bugs in any of the screenshots, you can use the following steps to record that into the issue tracker:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Above the screenshots you will find a camera icon, click that icon.&lt;/li&gt;
&lt;li&gt;Image editor will pop up where you can comment about the screenshot and then click the “Mark as Bug” button on the bottom right of the modal.&lt;/li&gt;
&lt;li&gt;Finally, click save and then fill in the “Create Issue” form on the pop up to record the issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Smart Testing
&lt;/h4&gt;

&lt;p&gt;Smart Visual Testing feature works by allowing you to test and compare two image layouts to quickly find out the differences between them. With that you will be able to view visual bugs easily such as Icon Size, Padding, Color, Layout, Text, Element Placement and much more. In order to use this feature, try the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First, you will have to upload a baseline image(s), to do that, you will have to:&lt;/li&gt;
&lt;li&gt;Click on the + icon next to Base Line Images header&lt;/li&gt;
&lt;li&gt;Select baseline image(s) from your computer. And upload them.&lt;/li&gt;
&lt;li&gt;Once uploaded and they can be viewed under the Baseline Image gallery&lt;/li&gt;
&lt;li&gt;Now, to be able to upload comparison images, you will first have to upload the baseline images, so, make sure you follow the above steps first. Now, in order to upload the comparison image(s), you will have to:&lt;/li&gt;
&lt;li&gt;Click on the baseline image you want to run comparison with.&lt;/li&gt;
&lt;li&gt;Then you will find Upload Comparison Image button on the right side of the page, click on it to upload image(s).&lt;/li&gt;
&lt;li&gt;Select the image you want to compare and upload it.&lt;/li&gt;
&lt;li&gt;Now, you should be able to see the thumbnails for the baseline and comparison image(s), and “Run” buttons on top of the comparison image(s). You should also see either a green tick mark or a red warning sign next to the comparison images, depending on whether they are similar or not.&lt;/li&gt;
&lt;li&gt;Now, to run comparison, simply click on the “Run” button atop the comparison image you want to compare or click on “Compare All” on the top left of the button to compare all images.&lt;/li&gt;
&lt;li&gt;Once the comparison has been ran, you can click on the “View Issues” button that should have now appeared atop the comparison images.&lt;/li&gt;
&lt;li&gt;This will open a new window with image comparison, where you can view and compare the differences and can zoom-in or Zoom out the images, change the image difference color, switch to slider mode, switch to side-by-side mode, or mark the image as bug.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Test Logs
&lt;/h3&gt;

&lt;p&gt;Test Logs is a feature that works as a library, where you can find all the tests that you have ran on LambdaTest’s platform. By clicking on a test on the Test Logs page, you can see all of its contents and details e.g. screenshots, name, date, tester’s name, the url that test was ran on etc.&lt;/p&gt;

&lt;p&gt;Also, on the left side of the page you can see a list of all your projects and a button for creating new projects, which you can use create a new project by simply adding the project name and version. You can also move tests from one project to another, which is great, because this way you can keep all the tests for the same project in that project, to do that, simply follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;From the Test Logs, select the project from where you want to move the test.&lt;/li&gt;
&lt;li&gt;Open the test you want to move.&lt;/li&gt;
&lt;li&gt;Click on the three-dots button in the test details.&lt;/li&gt;
&lt;li&gt;Select “Move to Project” and then the project and project version where you want to move the test.&lt;/li&gt;
&lt;li&gt;Once you select , the test is moved to your that project.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Supported Integrations
&lt;/h3&gt;

&lt;p&gt;This is the feature that you can use to setup One-click Bug logging. By integrating a third-party issue tracker with LambdaTest Platform. Here is the list of the supported third party tools and links to tutorials of how to integrate them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jira: &lt;a href="https://www.lambdatest.com/lambdatest-jira-documentation"&gt;https://www.lambdatest.com/lambdatest-jira-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Slack: &lt;a href="https://www.lambdatest.com/lambdatest-slack-documentation"&gt;https://www.lambdatest.com/lambdatest-slack-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Asana: &lt;a href="https://www.lambdatest.com/lambdatest-asana-documentation"&gt;https://www.lambdatest.com/lambdatest-asana-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Trello: &lt;a href="https://www.lambdatest.com/lambdatest-trello-documentation"&gt;https://www.lambdatest.com/lambdatest-trello-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://www.lambdatest.com/lambdatest-github-documentation"&gt;https://www.lambdatest.com/lambdatest-github-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitLab: &lt;a href="https://www.lambdatest.com/lambdatest-gitlab-documentation"&gt;https://www.lambdatest.com/lambdatest-gitlab-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bitbucket: &lt;a href="https://www.lambdatest.com/lambdatest-bitbucket-documentation"&gt;https://www.lambdatest.com/lambdatest-bitbucket-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;VSTS: &lt;a href="https://www.lambdatest.com/lambdatest-vsts-documentation"&gt;https://www.lambdatest.com/lambdatest-vsts-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Paymo: &lt;a href="https://www.lambdatest.com/lambdatest-paymo-documentation"&gt;https://www.lambdatest.com/lambdatest-paymo-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Teamwork: &lt;a href="https://www.lambdatest.com/lambdatest-teamwork-documentation"&gt;https://www.lambdatest.com/lambdatest-teamwork-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hive: &lt;a href="https://www.lambdatest.com/lambdatest-hive-documentation"&gt;https://www.lambdatest.com/lambdatest-hive-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Clubhouse: &lt;a href="https://www.lambdatest.com/lambdatest-clubhouse-documentation"&gt;https://www.lambdatest.com/lambdatest-clubhouse-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;BugHerd: &lt;a href="https://www.lambdatest.com/lambdatest-bugherd-documentation"&gt;https://www.lambdatest.com/lambdatest-bugherd-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Mantis: &lt;a href="https://www.lambdatest.com/lambdatest-mantis-documentation"&gt;https://www.lambdatest.com/lambdatest-mantis-documentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LambdaTest also provides a plugin for WordPress, which can be used to generate automated screenshots of your web pages, directly from your WordPress platform. The WordPress plugin can be found &lt;a href="https://www.lambdatest.com/wordpress-guide"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There is also a Chrome Extension that can be used to generate automated screenshots of your web pages directly from your browser. This Chrome Extension can be found &lt;a href="https://chrome.google.com/webstore/detail/lambdatest-screenshots/fjcjehbiabkhkdbpkenkhaahhopildlh/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. How Can I Use Lambda Test’s Selenium Grid for Free?
&lt;/h3&gt;

&lt;p&gt;As you can see from the examples above how easy it is to setup and run test suites on &lt;a href="https://www.phpclasses.org/blog/post/793/link/123/name/LambdaTestSeleniumGrid"&gt;LambdaTest Selenium Grid&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From the configuration of Grid to using the individual services and using the the platform overall.&lt;/p&gt;

&lt;p&gt;But you do not need to take my word for this as you can try &lt;a href="https://www.phpclasses.org/blog/post/793/link/123/name/LambdaTestSeleniumGrid"&gt;LambdaTest Selenium Grid&lt;/a&gt; for FREE here. Go ahead try &lt;a href="https://www.phpclasses.org/blog/post/793/link/123/name/LambdaTestSeleniumGrid"&gt;LambdaTest Selenium Grid&lt;/a&gt; and comeback here to tell your opinion about it. If you like it and want to upgrade to the paid version, you can use the discount coupon SOCIAL20 to get 20% discount on LambdaTest services.&lt;/p&gt;

</description>
      <category>lambdatest</category>
      <category>automation</category>
      <category>testing</category>
    </item>
    <item>
      <title>Agile &amp; Lean. A brief Comparison.</title>
      <dc:creator>Haseeb A. Basil</dc:creator>
      <pubDate>Thu, 07 Mar 2019 14:49:11 +0000</pubDate>
      <link>https://forem.com/mega6382/agile-lean-a-brief-introduction-87</link>
      <guid>https://forem.com/mega6382/agile-lean-a-brief-introduction-87</guid>
      <description>&lt;h3&gt;
  
  
  Lean
&lt;/h3&gt;

&lt;p&gt;Lean says to relentlessly eliminate &lt;em&gt;anything&lt;/em&gt; that isn’t adding value and only work on what we absolutely need to be doing at this moment in time. Eliminating waste means eliminating useless meetings, tasks and documentation. But it &lt;em&gt;also&lt;/em&gt; means eliminating time spent building what “we know” we’ll need in the future (things are constantly changing so we often end up &lt;em&gt;not&lt;/em&gt; needing them — or if we do, we have to rework them because conditions and our understanding has changed by then). It also means eliminating inefficient ways of working — like multitasking (!) — so we can deliver fast.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Organizations that are truly lean have a strong competitive advantage because they respond very rapidly and in a highly disciplined manner to market demand, rather than try to predict the future.”&lt;/em&gt; — Mary Poppendieck&lt;/p&gt;

&lt;h3&gt;
  
  
  Agile
&lt;/h3&gt;

&lt;p&gt;Agile is a time-focused, iterative philosophy that allows to build a product step-by-step (incrementally), delivering it by smaller pieces. One of its main benefits is the ability to adapt and change at any step (depending on feedback, market conditions, corporate obstacles, etc.) and to supply only relevant products to the market. &lt;strong&gt;Scrum&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A good agile team picks and choses the management &amp;amp; technical practices that best work for them. (a bad one just picks a couple of practices and falsely believes that somehow “makes them agile” — see: &lt;a href="https://hackerchick.com/are-we-agile-yet/"&gt;Are We Agile Yet?&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;So, what are the differences?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agile Philosophy&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Is aimed at executing tasks faster, adapting to changes easier&lt;br&gt;&lt;br&gt;
Makes the developing process flexible&lt;br&gt;&lt;br&gt;
Was initially designed for Software Development, then expanded to Marketing, and is currently applied in other areas&lt;br&gt;&lt;br&gt;
Action loop: product backlog — sprint backlog — iteration (sprints) — potentially shippable result&lt;br&gt;&lt;br&gt;
Method for demonstrating progress — definition of ‘done’&lt;br&gt;&lt;br&gt;
Methodologies: Scrum, XP, FDD, DSDM, Crystal Methods etc.&lt;br&gt;&lt;br&gt;
Toolkit: sprints, boards, Scrum Master, acceptance tests, user story mapping etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lean Philosophy&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Is about Smart development, when you improve virtually everything you do by eliminating anything that doesn’t bring value to the customer&lt;br&gt;&lt;br&gt;
Makes the developing process sustainable&lt;br&gt;&lt;br&gt;
Started from traditional manufacturing and expanded to all existing industries&lt;br&gt;&lt;br&gt;
Action loop: build-measure-learn&lt;br&gt;&lt;br&gt;
Method for demonstrating progress — validated learning&lt;br&gt;&lt;br&gt;
Methodologies: Kanban, Kaizen etc.&lt;br&gt;&lt;br&gt;
Toolkit: hypotheses, split (A/B) tests, customer interviews, funnel and cohort analysis, Customer Success Manager etc.&lt;/p&gt;

&lt;p&gt;The term Lean is wider than Agile because its smart approach influences all types of losses (not only time loss) such as money, labour, energy, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scrum
&lt;/h3&gt;

&lt;p&gt;Scrum is about Teams producing Results in an agile way. Scrum Teams achieve results anyway they can by using a simple set of rules to guide effort. We will describe Scrum as a simple applied model so that a central understanding of Scrum can be built. Other complexities of applied Scrum such as scaling, distribution, etc. will be explored elsewhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kanban
&lt;/h3&gt;

&lt;p&gt;Kanban is a scheduling system of visual management aimed at just-in-time delivery excluding team overloading. As a part of Lean, initially the methodology supported Japanese automotive industry. Similarly to Scrum, Kanban tracks ‘to do — in progress — done’ activities, but it limits them by the number of ‘work in progress’ activities (the number is defined by the team manager and cannot be exceeded).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dXh08cjj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AQv6C6FkpuvuHlZPD.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dXh08cjj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AQv6C6FkpuvuHlZPD.png" alt="" width="880" height="633"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ju4BMZVI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2A4wp0-m0F-F7W7-Fi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ju4BMZVI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2A4wp0-m0F-F7W7-Fi.png" alt="" width="880" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more info please visit:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://realtimeboard.com/blog/choose-between-agile-lean-scrum-kanban/#.WafkrLIjGM8"&gt;How to choose between Agile and Lean, Scrum and Kanban — which methodology is the best?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://leankit.com/learn/kanban/kanban-vs-scrum/"&gt;Kanban Vs Scrum&lt;/a&gt;&lt;/p&gt;

</description>
      <category>scrum</category>
      <category>kanban</category>
      <category>agile</category>
      <category>lean</category>
    </item>
    <item>
      <title>MySQL vs MySQLi vs PDO Performance Benchmark, Difference and Security Comparison - 2022</title>
      <dc:creator>Haseeb A. Basil</dc:creator>
      <pubDate>Thu, 07 Mar 2019 14:41:57 +0000</pubDate>
      <link>https://forem.com/mega6382/mysql-vs-mysqli-vs-pdo-performance-benchmark-difference-and-security-comparison-565o</link>
      <guid>https://forem.com/mega6382/mysql-vs-mysqli-vs-pdo-performance-benchmark-difference-and-security-comparison-565o</guid>
      <description>&lt;h3&gt;
  
  
  1. PDO vs MySQLi vs MySQL
&lt;/h3&gt;

&lt;h3&gt;
  
  
  2. Difference to Connect Using MySQLi and PDO
&lt;/h3&gt;

&lt;h3&gt;
  
  
  3. PDO vs MySQLi vs MySQL Performance Benchmark
&lt;/h3&gt;

&lt;h3&gt;
  
  
  4. PDO vs MysQLi Security using Prepared Statements
&lt;/h3&gt;

&lt;h3&gt;
  
  
  5. Comparison between PDO and MySQLi Terms of Usage
&lt;/h3&gt;

&lt;h3&gt;
  
  
  6. Converting MySQL Applications to Use PDO or MySQLi
&lt;/h3&gt;

&lt;h3&gt;
  
  
  7. Package Recommendations for use with PDO and MySQLi
&lt;/h3&gt;

&lt;h3&gt;
  
  
  8. What to Use in a New Project: PDO or MySQLi?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F600%2F0%2AN884HE7J-twKG4zq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F600%2F0%2AN884HE7J-twKG4zq.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. PDO vs MySQLi vs MySQL
&lt;/h3&gt;

&lt;p&gt;As we all know, MySQL is an Open Source Relational Database Management System (RDBMS) that uses Structured Query Language (SQL). MySQL is a central component of the LAMP Open Source Web application software stack (and other “AMP” stacks): Apache MySQL and PHP.&lt;/p&gt;

&lt;p&gt;MySQL is an essential part of almost every Open Source PHP application. Good examples for PHP and MySQL based scripts are phpBB, osCommerce and Joomla.&lt;/p&gt;

&lt;p&gt;PHP used to come with the original MySQL extension built-in which supports with older MySQL versions. However this extension was deprecated in favor of MySQLi (i for improved). At the same time PHP continued to evolve and the PDO (PHP Data Objects) extension was introduced to become a common interface for accessing many types of database.&lt;/p&gt;

&lt;p&gt;MySQLi is another one of three ways to access a MySQL database server. Like the MySQL extension, the new MySQLi was designed to take better advantage of more recent MySQL server features.&lt;/p&gt;

&lt;p&gt;The PHP Data Objects (PDO) extension defines a lightweight, common interface for accessing databases in PHP. Each database driver that is supported by PDO interface can expose database specific features, as well common functions.&lt;/p&gt;

&lt;p&gt;PDO provides a data access abstraction layer, which means that, regardless of which database type you use, the same functions are available to perform queries and fetch results. PDO does not provide a full database abstraction. i.e. it does not rewrite SQL queries or emulate missing features. You should use a full-blown abstraction layer package if you need that capability.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Difference to Connect Using MySQLi and PDO
&lt;/h3&gt;

&lt;p&gt;Either PDO and MySQLi offer an Object Oriented interface to the extension functions but MySQLi also offers a procedural API, which makes it easier for newcomers to understand. If you are familiar with the original PHP MySQL extension, you will find migration to the procedural MySQLi interface easier. Below is an example:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// PDO 
$pdo = new PDO( "mysql:" . "host=localhost;" . "dbname=database",
    'username', 'password');

// mysqli, procedural way 
$mysqli = mysqli_connect( 'localhost', 'username', 'password', 'database');

// mysqli, object oriented way 
$mysqli = new mysqli( 'localhost', 'username', 'password', 'database');


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The main advantage of PDO over MySQLi is in the database support. PDO supports 12 different database types, in opposition to MySQLi, which supports MySQL only.&lt;/p&gt;

&lt;p&gt;When you have to switch your project to use another database, PDO makes the process simpler. So all you have to do is change the connection string and at most a few queries if they use any syntax which is not supported by your new database.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. PDO vs MysQLi Security using Prepared Statements
&lt;/h3&gt;

&lt;p&gt;Both PDO and MySQLi provide support for prepared queries. This helps preventing SQL injection security issues, as long as you only use prepared queries to insert dynamic parameters in the queries.&lt;/p&gt;

&lt;p&gt;For example, consider a hacker that tries to inject malicious SQL passing a forged value to the parameter &lt;strong&gt;code&lt;/strong&gt; of a HTTP POST request that could be emulated like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$_POST['code'] = "'; DELETE FROM products; /*";


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you do not escape this value, it will be inserted in query as is, and so it would delete all rows from the products table.&lt;/p&gt;

&lt;p&gt;One way to make queries more secure avoiding SQL injection is to quote string parameter values to insert escape characters.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// PDO, “manual” escaping

$name = PDO::quote( $_POST['code'] );
$pdo-&amp;gt;query( "SELECT id, name FROM products WHERE code = $code" );

// mysqli, “manual” escaping

$name = mysqli_real_escape_string( $_POST['code'] );
$mysqli-&amp;gt;query( "SELECT id, name FROM products WHERE name = '$code'" );


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;PDO::quote() not only escapes the string, but it also adds quotes. mysqli_real_escape_string() will only escape the string, so you will need to add the quotes manually.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// PDO, prepared statement

$pdo-&amp;gt;prepare( 'SELECT id, name FROM products WHERE code = :code' );
$pdo-&amp;gt;execute( array( ':code' =&amp;gt; $_POST['code'] ) );

// mysqli, prepared statements

$query = $mysqli-&amp;gt;prepare('SELECT id, name FROM users WHERE code = ?');
$query-&amp;gt;bind_param('s', $_POST['code']);
$query-&amp;gt;execute();


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;PDO also supports client side queries. This means that when it prepares a query, it does not have to communicate with the server.&lt;/p&gt;

&lt;p&gt;Since MySQLi uses native prepared statements, it will may actually be faster to use mysqli_real_escape_string instead of using prepared statements, while it is still a secure solution.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. PDO vs MySQLi vs MySQL Performance Benchmark
&lt;/h3&gt;

&lt;p&gt;There were some PHP MySQL performance benchmark tests several years ago by &lt;a href="http://archive.jnrbsn.com/2010/06/mysqli-vs-pdo-benchmarks" rel="noopener noreferrer"&gt;Jonathan Robson&lt;/a&gt; as well by &lt;a href="http://wooptoo.com/blog/pdo-vs-mysqli-performance-comparison/" rel="noopener noreferrer"&gt;Radu Potop&lt;/a&gt;. Even though these tests were performed with PHP 5.3 and nowadays we are using PHP 7 or later, let’s consider these results as reference.&lt;/p&gt;

&lt;p&gt;Basically they show that for SELECT queries using prepared statements MySQLi runs a bit faster. Still it may not be significant depending on your purposes.&lt;/p&gt;

&lt;p&gt;Keep in mind that PDO by default uses client side prepared statements emulation. When using native prepared statements, there is an additional round trip to the server to prepare the statement, so the overall query execution time may be actually greater than when using native prepared statements for running a query only once.&lt;/p&gt;

&lt;p&gt;As mentioned above, you can use mysqli_real_escape_string function to quote dynamic parameters like you would do when using the original MySQL extension. This is like emulating prepared queries the way it is done with PDO because you would not need to perform an additional round trip to the server to prepare the statement.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Comparison between PDO and MySQLi Terms of Usage
&lt;/h3&gt;

&lt;p&gt;While MySQLi has its advantages accessing MySQL server features, PDO sometimes has a leg up and may be a better fit for the user, depending on personal preferences and convenience. Like most things, the option that works best depends on whom you ask and what situation you need MySQLi or PDO for.&lt;/p&gt;

&lt;p&gt;MySQLi only works with MySQL databases, whereas PDO is flexible and able to work with multiple database systems, including IBM, Oracle and MySQL. If you ever have to switch databases or provide a database independent solution, using MySQLi directly is not the best option. You may still use MySQLi in database independent solutions using an abstraction layer.&lt;/p&gt;

&lt;p&gt;Binding parameters with MySQLi is not as easy or flexible as with PDO. MySQLi uses a numbered parameter system and does no’t support named parameters like PDO. MySQLi has good support and maintenance, making the transition to and use the new system safe and secure.&lt;/p&gt;

&lt;p&gt;You will be able to utilize new features available in the newer versions of MySQL servers. This is one of the biggest advantages of MySQLi. PDO may not have extensive support to take full advantage of MySQL’ newer capabilities.&lt;/p&gt;

&lt;p&gt;The installation process with MySQLi is not only easy, but is automatic when the PHP 5 MySQL extension that comes built-in Windows or Linux distributions.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Converting MySQL Applications to Use PDO or MySQLi
&lt;/h3&gt;

&lt;p&gt;If you have a project using the old MySQL extension and you need to convert it to use MySQLi or PDO, it may take you a while to rewrite it if you were not using a database abstraction layer.&lt;/p&gt;

&lt;p&gt;If you need a quick a easy solution that does not require to change much your code, you can try either the package PDO or the MySQLi to use each of these extensions by the means of MySQL wrapper functions that call &lt;a href="https://www.phpclasses.org/package/8221-PHP-Access-MySQL-databases-using-PDO-wrapper-functions.html" rel="noopener noreferrer"&gt;mysql_* functions using PDO&lt;/a&gt; by Aziz S. Hussain or &lt;a href="https://www.phpclasses.org/package/9199-PHP-Replace-mysql-functions-using-the-mysqli-extension.html" rel="noopener noreferrer"&gt;PHP MySQL to MySQLi&lt;/a&gt; by Dave Smith for PDO and MySQLi extension functions respectively.&lt;/p&gt;

&lt;p&gt;This will allow you to make your code run on PHP 7 while you do a real migration of code that does not require a wrapper.&lt;/p&gt;

&lt;p&gt;Dave Smith also has written a tutorial on &lt;a href="https://www.phpclasses.org/blog/package/9199/post/3-Smoothly-Migrate-your-PHP-Code-using-the-Old-MySQL-extension-to-MySQLi.html" rel="noopener noreferrer"&gt;how to migrate mysql code to mysqli&lt;/a&gt; considering the differences between those extensions.&lt;/p&gt;

</description>
      <category>pdo</category>
      <category>mysql</category>
      <category>php</category>
    </item>
    <item>
      <title>Tutorial on Sending Postcards, Letters and Checks by Postal Mail Using LOB REST API using PHP - 2022</title>
      <dc:creator>Haseeb A. Basil</dc:creator>
      <pubDate>Thu, 07 Mar 2019 14:39:39 +0000</pubDate>
      <link>https://forem.com/mega6382/tutorial-on-sending-postcards-letters-and-checks-by-postal-mail-using-lob-rest-api-using-php-47p8</link>
      <guid>https://forem.com/mega6382/tutorial-on-sending-postcards-letters-and-checks-by-postal-mail-using-lob-rest-api-using-php-47p8</guid>
      <description>&lt;h3&gt;
  
  
  What is Lob?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Why use Lob?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Services
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Why use Lob?
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Programmer Friendly
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Integration Support
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;h3&gt;
  
  
  What is Lob?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://synd.co/2iIU504"&gt;Lob&lt;/a&gt; is a venture backed startup company based in San Francisco, CA and has over 6000 customers including Amazon, Square, and Counsyl.&lt;/p&gt;

&lt;p&gt;They provide a cloud based printing and mailing solution. Founded with mission to provide more affordable and simpler service than building an in-house printing solution.&lt;/p&gt;

&lt;p&gt;Lob is built for developers to provide them with tools to build powerful applications and help scale physical mailing for their companies.&lt;/p&gt;

&lt;p&gt;Lob’s plan is to eliminate the complexities of direct mail and provide you with a more innovative system, where you can easily track your mail, reach your customers without having to deal with hurdles of paper jams or trips to the post office.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R4Dpyjqh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2ABo4KDikzK-b-S6IF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R4Dpyjqh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2ABo4KDikzK-b-S6IF.png" alt="" width="600" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why use Lob?
&lt;/h3&gt;

&lt;p&gt;Lob’s customer base consists of more than 6000 companies, which ranges from fortune 500 hundred companies (e.g. Amazon) to startups and individual developers. If you have Lob integrated in your system, you can focus on your customers instead of having to deal with pains of printing and mailing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4yYiK8Wx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AI8l26v93kXEBIhnY.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4yYiK8Wx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AI8l26v93kXEBIhnY.png" alt="" width="600" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lob is based on pay as you consume model. So, you can easily send 1 mailing or 1 million at a time.&lt;/p&gt;

&lt;p&gt;Physical mail has higher open rates than email. You may not see it now, but more and more startups are now moving towards physical mail as their primary method of marketing.&lt;/p&gt;

&lt;p&gt;One of the findings by Epsilon shows that “for every 1,000 existing customers receiving a direct-mail piece, 34 will respond on average. For email, the average response is 0.12%.”&lt;/p&gt;

&lt;p&gt;Now if you are going to be adapting physical mail as your marketing method, what better way to go than Lob, a simple, rich and affordable printing/mailing solution?&lt;/p&gt;

&lt;h3&gt;
  
  
  Services
&lt;/h3&gt;

&lt;p&gt;Lob provides a number of services, to help you grow your business and reach your customers better. The following are the main services provided by Lob.&lt;/p&gt;

&lt;h3&gt;
  
  
  Postcards
&lt;/h3&gt;

&lt;p&gt;By using the Lob API, you can easily design a fully customizable HTML postcard template. Then you can send the customized postcards for testing the templates or for any specific actions your users take or specific events you define. Or to reactivate relapsed users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Letters
&lt;/h3&gt;

&lt;p&gt;Send letters to your users, as easily as sending an email campaign. You can generate each email on demand. You can easily customize the letter for events you define or actions your users take.&lt;/p&gt;

&lt;p&gt;You can send the letters securely and quickly. You can use Lob API to send each document accurately by ensuring each document is for intended recipient’s eyes only.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checks
&lt;/h3&gt;

&lt;p&gt;With Lob you can deliver checks, with various customizations to support, logo, invoice information, instructions and memos, and much more to make payments as clear as possible.&lt;/p&gt;

&lt;p&gt;Now with sending checks, security is a must have and nobody provides a more secure delivery system than Lob.&lt;/p&gt;

&lt;p&gt;With Lob API, each check is sent with a colored background, watermarks, micro-printed borders, thermal ink that disappears when rubbed, and Magnetic Ink Character Recognition (MICR) encoding to facilitate bank processing and reduce errors.&lt;/p&gt;

&lt;p&gt;And just as importantly, you can make sure that your checks are delivered, by tracking their progress, throughout the mailing process.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple Area Mail
&lt;/h3&gt;

&lt;p&gt;With Lob API, you can easily target entire zip codes with postcards. This service is especially beneficial to startups, to make their presence known to future customers.&lt;/p&gt;

&lt;p&gt;With Lob API you can easily get the zip-code based demographics to make your campaign even more specific to point of age, income as well as residential versus business split. And you can do all this without having to pay for any setup fee, you only pay for what you send.&lt;/p&gt;

&lt;h3&gt;
  
  
  Address Verification
&lt;/h3&gt;

&lt;p&gt;You can easily validate mailing addresses instantly by using Lob API, you can also standardize the addresses to help ensure that your mail reaches the desired recipient. The API uses data directly from USPS to correct the missing information. And on top of all that it is free for all domestic addresses, and very affordable for international addresses.&lt;/p&gt;

&lt;p&gt;Couchsurfing, a vibrant travel community uses Lob to automate everything from making sure the user provides deliverable addresses to ending address verification postcards on-demand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Easy to use
&lt;/h3&gt;

&lt;p&gt;The Lob API is incredibly easy to use, providing you with powerful and scalable mailing solution. Lob have made sending a physical mail as easy as sending an email.&lt;/p&gt;

&lt;p&gt;You can easily track all your mails.You can target specific regions and demographics for your campaign. Lob’s API service is very similar to that of Sendgrid or Twilio. The Lob API takes all the pain out of sending mail and it can be integrated with many internal applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Programmer Friendly
&lt;/h3&gt;

&lt;p&gt;The Lob API is extremely programmer friendly, it provides pre-built wrappers for multiple programming languages like: Java, PHP, Node, Python, and Ruby. It also provides &lt;a href="http://synd.co/2iIQO0T"&gt;documentation for all these wrappers, with example code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ec3fbVpy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AdWNZ2Een-c4yXzNh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ec3fbVpy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AdWNZ2Een-c4yXzNh.png" alt="" width="600" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The complete &lt;a href="http://synd.co/2hwKkUP"&gt;documentation is also available for raw API requests&lt;/a&gt;. But here we will be discussing PHP wrapper. You can easily install the PHP wrapper using composer or you can get it directly from Github.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tB6Xy-Q1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2ANzuDtduupqsL6jKW.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tB6Xy-Q1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2ANzuDtduupqsL6jKW.png" alt="" width="600" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, to start you must authenticate all of your requests, and to properly authenticate with the Lob API, the API key should be sent in each request. Below is an example for how to initiate the wrapper with authorization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$apiKey = 'test_0dc8d51e0acffcb1880e0f19c79b2f5b0cc';
    $lob = new \Lob\Lob($apiKey);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, it is pretty simple and easy, to use the PHP wrapper.&lt;/p&gt;

&lt;h3&gt;
  
  
  Errors
&lt;/h3&gt;

&lt;p&gt;Below is the list of errors HTTP response code errors and what the mean:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qQYCnoaF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/634/0%2AhoyPHMHzSXzU51RF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qQYCnoaF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/634/0%2AhoyPHMHzSXzU51RF.png" alt="" width="634" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In general, 2xx indicates success, 4xx indicate an input error, and 5xx indicates an error on Lob’s end.&lt;/p&gt;

&lt;h3&gt;
  
  
  Webhooks
&lt;/h3&gt;

&lt;p&gt;Webhooks, is a really good feature to track event based notifications, like whenever an event is fired Lob will immediately send that event to any URL specified for that event, on the Lob dashboard.&lt;/p&gt;

&lt;p&gt;But first you have to be sure that you are subscribed to the event in the environment (test or live).&lt;/p&gt;

&lt;h3&gt;
  
  
  Metadata
&lt;/h3&gt;

&lt;p&gt;When sending a request to Lob’s API, you can attach metadata to it so, you can easily filter the requests out later. Below is an example for how to attach metadata to a request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$lob-&amp;gt;postcards()-&amp;gt;create(array(
        'description' =&amp;gt; 'Demo Postcard job',
        'metadata[campaign]' =&amp;gt; 'NEWYORK2015',
        'to' =&amp;gt; 'adr_78c304d54912c502',
        'from' =&amp;gt; 'adr_61a0865c8c573139',
        'front' =&amp;gt; '&amp;lt;html style="margin: 130px; font-size: 50;"&amp;gt;Front HTML for {{name}}&amp;lt;/html&amp;gt;',
        'back' =&amp;gt; '&amp;lt;html style="margin: 130px; font-size: 50;"&amp;gt;Back HTML&amp;lt;/html&amp;gt;',
        'data[name]' =&amp;gt; 'Harry'
    ));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, that the above request contains metadata with key “campaign”. Now, to filter out the request with containing specific metadata you will do something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$lob-&amp;gt;postcards()-&amp;gt;all(array(
        'metadata[campaign]' =&amp;gt; 'NEWYORK2015',
        'limit' =&amp;gt; 2,
        'offset' =&amp;gt; 0
    ));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Usage
&lt;/h3&gt;

&lt;p&gt;Below is a example code to verify mailing addresses using Lob API PHP wrapper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$lob-&amp;gt;addresses()-&amp;gt;verify(array(
        'address_line1' =&amp;gt; '185 Berry Street',
        'address_city' =&amp;gt; 'San Francisco',
        'address_state' =&amp;gt; 'CA',
        'address_zip' =&amp;gt; '94107'
    ));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Below is an another example of code which shows how you can design postcards using Lob API PHP wrapper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$lob-&amp;gt;postcards()-&amp;gt;create(array(
        'description' =&amp;gt; 'Demo Postcard job',
        'to' =&amp;gt; 'adr_78c304d54912c502',
        'from' =&amp;gt; 'adr_61a0865c8c573139',
        'front' =&amp;gt; '&amp;lt;html style="padding: 1in; font-size: 50;"&amp;gt;Front HTML for {{name}}&amp;lt;/html&amp;gt;',
        'back' =&amp;gt; '&amp;lt;html style="padding: 1in; font-size: 20;"&amp;gt;Back HTML for {{name}}&amp;lt;/html&amp;gt;',
        'data[name]' =&amp;gt; 'Harry'
    ));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The value for array keys “to” and “from” are address IDs that you can get from the API.&lt;/p&gt;

&lt;p&gt;You can get a list of addresses from this simple request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$lob-&amp;gt;addresses()-&amp;gt;all(array(
        'limit' =&amp;gt; 2,
        'offset' =&amp;gt; 1
    ));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above mentioned request will bring all data related to addresses, including address ID. You can, use metadata in this request to get more specific results.&lt;/p&gt;

&lt;p&gt;Lob’s API also provides some other resources for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$lob-&amp;gt;countries()-&amp;gt;all();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By using this request, you can get the list of all countries, which you can use later to add addresses etc..&lt;/p&gt;

&lt;p&gt;Now by looking at the above code examples you can clearly see, how easy it really is to use this API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Track the Mail
&lt;/h3&gt;

&lt;p&gt;With Lob’s API you can track your mail pieces along the way. You can easily monitor your postcards, letters, checks and documents on their way to the intended recipients.&lt;/p&gt;

&lt;p&gt;You can keep track using tracking events or by adding unique promo codes, URLs, or phone numbers. You can use webhooks to follow your mail through the mailstream with live tracking events and PDF proofs.&lt;/p&gt;

&lt;p&gt;Below is a breakdown of each scan event label and description:&lt;/p&gt;

&lt;h3&gt;
  
  
  In Transit
&lt;/h3&gt;

&lt;p&gt;The mailpiece is being processed at the entry/origin facility.&lt;/p&gt;

&lt;h3&gt;
  
  
  In Local Area
&lt;/h3&gt;

&lt;p&gt;The mailpiece is being processed at the destination facility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Processed for Delivery
&lt;/h3&gt;

&lt;p&gt;The mailpiece has been greenlit for delivery at the recipient’s nearest postal facility. The mailpiece should reach the mailbox within 1 to 2 business days of this scan event.&lt;/p&gt;

&lt;h3&gt;
  
  
  Re-routed
&lt;/h3&gt;

&lt;p&gt;The mailpiece is re-routed due to recipient change of address, address errors, or USPS relabeling of barcode/ID tag area.&lt;/p&gt;

&lt;h3&gt;
  
  
  Returned to Sender
&lt;/h3&gt;

&lt;p&gt;The mailpiece is being returned to sender due to barcode, ID tag area, or address errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integration Support
&lt;/h3&gt;

&lt;p&gt;Various wrappers are available for integrating the Lob API into your application including PHP. If you want to use another language and a wrapper is not available for that language, you can create a custom SDK easily for your app.&lt;/p&gt;

&lt;p&gt;Lob also offers integration through its integration partners that offer various services of their own. If you have an account on their site, you can integrate those accounts with your account on Lob, using API keys.&lt;/p&gt;

&lt;p&gt;Lob also has some partner apps that offer direct mailing solutions powered by Lob. You can get started with these on apps by going to the integration page on Lob’s site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://synd.co/2iIU504"&gt;Lob&lt;/a&gt; provides several interesting services that are unusual because they make the bridge between the online world with services that have to be provided in the physical world like printed mailings to be delivered via via postal mail.&lt;/p&gt;

&lt;p&gt;I hope this article is a good start for you to create very interesting applications based on services that you have not been aware that could be implemented using REST APIs.&lt;/p&gt;

&lt;p&gt;If you liked this article, please share it with other developer colleagues. If you have questions, post a comment below.&lt;/p&gt;

</description>
      <category>lob</category>
      <category>php</category>
      <category>api</category>
      <category>postalmail</category>
    </item>
    <item>
      <title>Best WordPress Security Plugin 2022 and 2021 — Review and Comparison of Top Free and Premium…</title>
      <dc:creator>Haseeb A. Basil</dc:creator>
      <pubDate>Thu, 07 Mar 2019 14:38:03 +0000</pubDate>
      <link>https://forem.com/mega6382/best-wordpress-security-plugin-2018-and-2017-review-and-comparison-of-top-free-and-premium-g25</link>
      <guid>https://forem.com/mega6382/best-wordpress-security-plugin-2018-and-2017-review-and-comparison-of-top-free-and-premium-g25</guid>
      <description>&lt;h3&gt;
  
  
  Best WordPress Security Plugin 2018 and 2017 — Review and Comparison of Top Free and Premium Versions of New Plugins and Support Services from Several Companies
&lt;/h3&gt;

&lt;h3&gt;
  
  
  This article covers WordPress Plugins to Secure Sites providing Malware Protection, Firewall, AntiVirus, Injection Attack Holes, Vulnerability Issues Scanner and Backup of data.
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Contents
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#notice"&gt;Live Article Notice&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#why"&gt;Why WordPress Needs Security Plugins?&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#important"&gt;Important WordPress Security Practices&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#list"&gt;Top List of the Best WordPress Security Plugins 2018 and 2017&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#comparison"&gt;WordPress Security Plugin Comparison Side by Side&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#choose"&gt;What WordPress Security Plugin should I Choose?&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#problems"&gt;What if I still Have Security Problems Despite using a Security plugin?&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#do-not-wait"&gt;Do Not Wait for a Security Attack to Happen&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#other"&gt;Other WordPress Security Plugins and Support Services&lt;/a&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.phpclasses.org/blog/post/528-WordPress-Security-Plugins-Comparison.html#security-news"&gt;WordPress Security News&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LQCVFPYm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AwKhaf1nQbAdGM7ls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LQCVFPYm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AwKhaf1nQbAdGM7ls.png" alt="" width="600" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Live Article Notice
&lt;/h3&gt;

&lt;p&gt;This is a live article that will be updated over time to include more plugins and list more relevant security features that may help you to decide what plugin suits better your needs.&lt;/p&gt;

&lt;p&gt;If you found some inaccurate information or know of another interesting security plugin not listed here, please post a comment or use the site &lt;a href="https://www.phpclasses.org/faq/#contact"&gt;contact link&lt;/a&gt; at the bottom of this page to let me know about the information you have.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why WordPress Needs Security Plugins?
&lt;/h3&gt;

&lt;p&gt;WordPress is the most popular and widely used blogging platform. It is being used by millions of people around the world. &lt;strong&gt;27% of all Web sites globally uses WordPress&lt;/strong&gt;. Therefore hackers and spammers have also taken interest in breaking the security of the WordPress blogs.&lt;/p&gt;

&lt;p&gt;WordPress security plugins are one of the easiest ways to improve security on a WordPress site. WordPress is very secure by itself and is frequently updated to fix any vulnerabilities that are found. But it is never too much have plugins that can detect security problems as soon as possible.&lt;/p&gt;

&lt;p&gt;Security plugins can address some important vulnerabilities or at least harden the aspects of your WordPress site that are prone to manipulation by hackers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Important WordPress Security Practices
&lt;/h3&gt;

&lt;p&gt;In this post I am reviewing and comparing some of the most popular WordPress security plugins either free and commercial.&lt;/p&gt;

&lt;p&gt;Keep in mind that even with all the best plugins installed, common security practices for keeping the WordPress site secure should be used. Your WordPress installation should be updated on regular basis to assure you are not using versions that have known vulnerabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Top List of the Best WordPress Security Plugins 2018 and 2017
&lt;/h3&gt;

&lt;p&gt;Here follows a list of some of the well-known WordPress security plugins that I have tried with a description of their most relevant features.&lt;/p&gt;

&lt;h3&gt;
  
  
  BulletProof Security
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--doa1U2Ju--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AiBPm7pJsd2EexEIO.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--doa1U2Ju--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AiBPm7pJsd2EexEIO.png" alt="" width="772" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.phpclasses.org/blog/post/528/link/99/name/BulletProofSecurityPlugin"&gt;BulletProof Security&lt;/a&gt; plugin secures your WordPress directories with a single click. It provides protection against CSRF, Base64, XSS, RFI, SQL injections. It also provides login security firewalls, database security and backup services.&lt;/p&gt;

&lt;p&gt;It is available as a free and Pro version of the that offers &lt;a href="https://www.phpclasses.org/blog/post/528/link/99/name/BulletProofSecurityPlugin"&gt;BulletProof Security&lt;/a&gt; plugin service with more advanced features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sucuri Security plugin
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dpZEbsa6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AjJ7CBIpvgknd_0D1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dpZEbsa6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AjJ7CBIpvgknd_0D1.png" alt="" width="772" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.phpclasses.org/blog/post/528/link/100/name/SucuriSecurityPlugin"&gt;Sucuri Security&lt;/a&gt; plugin provides several security services like malware scanning, security activity auditing, blacklist monitoring, effective security hardening, file integrity monitoring, and a Web site firewall.&lt;/p&gt;

&lt;p&gt;It is a free plugin and they do offer some premium services. Visit the &lt;a href="https://www.phpclasses.org/blog/post/528/link/100/name/SucuriSecurityPlugin"&gt;Sucuri Security&lt;/a&gt; Web site for more information.&lt;/p&gt;

&lt;h3&gt;
  
  
  iThemes security plugin
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WOpjkCWb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2APoQfRH0jS_glGKat.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WOpjkCWb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2APoQfRH0jS_glGKat.png" alt="" width="772" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.phpclasses.org/blog/post/528/link/101/name/iThemesSecurity"&gt;iThemes Security Plugin&lt;/a&gt; plugin supposedly provides more than 30 ways to secure WordPress site. It enhances user credentials by fixing common vulnerabilities and automated attacks. &lt;a href="https://www.phpclasses.org/blog/post/528/link/101/name/iThemesSecurity"&gt;iThemes Security Plugin&lt;/a&gt;plugin offers both Free and Pro versions of the plugin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Acunetix Security plugin
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aie0bLre--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AmPa5dpA8VNaxW_AF.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aie0bLre--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AmPa5dpA8VNaxW_AF.jpg" alt="" width="772" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.phpclasses.org/blog/post/528/link/102/name/AcunetixSecurityPlugin"&gt;Acunetix Security&lt;/a&gt; plugin is a good fit for securing file permissions, security of the database, version hiding, WordPress admin protection, etc.. It checks the WordPress site for vulnerabilities and suggests the actions needed to be performed to correct those vulnerabilities.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.phpclasses.org/blog/post/528/link/102/name/AcunetixSecurityPlugin"&gt;Acunetix Security&lt;/a&gt; WordPress plugin is available for free and they do provide other security services, you can check those out at their web site.&lt;/p&gt;

&lt;h3&gt;
  
  
  All In One WP Security and Firewall
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I96kbpUy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AONm0GYy94YT_yLsg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I96kbpUy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AONm0GYy94YT_yLsg.png" alt="" width="772" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.phpclasses.org/blog/post/528/link/103/name/AllInOneWPSecurityFirewall"&gt;All In One WP Security &amp;amp; Firewall&lt;/a&gt; plugin checks for security vulnerabilities. It implements and enforces the latest recommended WordPress security practices and techniques.&lt;/p&gt;

&lt;p&gt;One if its useful features is a meter on your dashboard that gives your site a score of how secure it is. It can detect malicious code in your WordPress site.&lt;/p&gt;

&lt;p&gt;It is free plugin but they offer paid consultancy for your site’s security, you can learn more about it from their website.&lt;/p&gt;

&lt;h3&gt;
  
  
  6Scan Security
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cPTB2Zaq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AeapoQOvCuM1AQA3j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cPTB2Zaq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AeapoQOvCuM1AQA3j.png" alt="" width="772" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.phpclasses.org/blog/post/528/link/104/name/6ScanSecurity"&gt;6Scan Security&lt;/a&gt; plugin security scanner goes beyond the simple rule-based protection of other WordPress security plugins. It employs sophisticated algorithms to find and automatically fix security vulnerabilities.&lt;/p&gt;

&lt;p&gt;This plugin is available for free version but they do offer some paid services too. Check the 6Scan Security Web site for more information.&lt;/p&gt;

&lt;p&gt;Notice that the version of this plugin that is available in WordPress plugin repository has not been updated in 2 years.&lt;/p&gt;

&lt;h3&gt;
  
  
  WordFence plugin
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C__C7NWW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AvvYFlchKuOJ3eXe7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C__C7NWW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AvvYFlchKuOJ3eXe7.png" alt="" width="772" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.phpclasses.org/blog/post/528/link/105/name/WordFence"&gt;WordFence&lt;/a&gt; plugin provides user login security, IP blocking, security scanning, and Web firewall and monitoring.&lt;/p&gt;

&lt;p&gt;This plugin allows mobile sign in that saves your WordPress site from brute force hacks. It provides real time threat defense feed. Wordfence Scan leverages the same proprietary feed, alerting you in the event your site is compromised. This plugin is offered in both free and pro version.&lt;/p&gt;

&lt;h3&gt;
  
  
  AntiVirus for WordPress
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OOZkaqI---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AdF0dyF9HJtQoZccW.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OOZkaqI---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/772/0%2AdF0dyF9HJtQoZccW.png" alt="" width="772" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://www.phpclasses.org/blog/post/528/link/106/name/AntiVirusforWordPress"&gt;AntiVirus for WordPress&lt;/a&gt; plugin is a very lightweight plugin. It can strengthen the protection of your site against exploits, malware and spam injections. This plugin monitors malicious injections and also warns you about any possible attacks.This plugin works to fix common holes, stop automated attacks and strengthen user credentials.&lt;/p&gt;

&lt;h3&gt;
  
  
  WPBuffs Security Support Service
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--i7Qg6Waj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AZiUXUmnAiBqeJPtb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--i7Qg6Waj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AZiUXUmnAiBqeJPtb.png" alt="" width="600" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.phpclasses.org/blog/post/528/link/107/name/WPBuffs"&gt;WPBuffs&lt;/a&gt; is not exactly a plugin but rather a support service that you can hire to help you fixing many types of problems with your WordPress site, including dealing with security issues using a suite of tools of their own.&lt;/p&gt;

&lt;p&gt;They have a team of people that can provide several support services with plans that may include services like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrating your site with Google Search Console and Google Analytics&lt;/li&gt;
&lt;li&gt;Update themes and plugins&lt;/li&gt;
&lt;li&gt;Perform backup&lt;/li&gt;
&lt;li&gt;Monitor the site to check if it is up&lt;/li&gt;
&lt;li&gt;Provide traffic, maintenance and security reports&lt;/li&gt;
&lt;li&gt;Optimize sites for mobile&lt;/li&gt;
&lt;li&gt;Test and optimize site page speed&lt;/li&gt;
&lt;li&gt;Scan and remove malware&lt;/li&gt;
&lt;li&gt;Protect against brute force login&lt;/li&gt;
&lt;li&gt;Install SSL certificates&lt;/li&gt;
&lt;li&gt;Detect malicious file changes&lt;/li&gt;
&lt;li&gt;Migration to a dedicated server&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  WordPress Security Plugin Comparison Side by Side
&lt;/h3&gt;

&lt;p&gt;To understand how WordPress security plugins compare, it is better to show you the features they support or not side by side. So here follow several types of comparisons of their security features.&lt;/p&gt;

&lt;h3&gt;
  
  
  User Login Security
&lt;/h3&gt;

&lt;p&gt;The user login security features are about what aspects for protecting the process login and after the users are logged. Here is a description of the features compared between all plugins.&lt;/p&gt;

&lt;h4&gt;
  
  
  Brute Force Protection
&lt;/h4&gt;

&lt;p&gt;Brute force is a trial and error method used by program that attack the login pages by trying different passwords until the find one that works for the attacked account.&lt;/p&gt;

&lt;h4&gt;
  
  
  Strong Password Enforcement
&lt;/h4&gt;

&lt;p&gt;Require that the user uses strong passwords login in the WordPress account.&lt;/p&gt;

&lt;h4&gt;
  
  
  Block User by IP or by Country
&lt;/h4&gt;

&lt;p&gt;Block users based on their IP addresses or their Country.&lt;/p&gt;

&lt;h4&gt;
  
  
  User Monitoring
&lt;/h4&gt;

&lt;p&gt;Monitor the actions of logged users and guests.&lt;/p&gt;

&lt;h4&gt;
  
  
  ReCAPTCHA Integration
&lt;/h4&gt;

&lt;p&gt;Integrate Google ReCaptcha in the login and registration page and any other forms to prevent the access using robot scripts.&lt;/p&gt;

&lt;p&gt;Here follows the side by side comparison of the User Login security aspects.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  Database Security
&lt;/h3&gt;

&lt;p&gt;The database is where the dynamically created content and user information is stored. Protecting this information is important to avoid damages that may prevent WordPress to work properly.&lt;/p&gt;

&lt;h4&gt;
  
  
  Backups
&lt;/h4&gt;

&lt;p&gt;Regularly take backups of database and store them on the server and make them available for download.&lt;/p&gt;

&lt;h4&gt;
  
  
  Errors Turned Off
&lt;/h4&gt;

&lt;p&gt;Ability to turn off the database related PHP errors.&lt;/p&gt;

&lt;h4&gt;
  
  
  DB Status and Information
&lt;/h4&gt;

&lt;p&gt;Get the information for the DB in your admin panel and live status of the DB server.&lt;/p&gt;

&lt;h4&gt;
  
  
  SQL Injection Protection
&lt;/h4&gt;

&lt;p&gt;SQL Injection is a way to add a malicious SQL to database queries from data entered by users the user input field.&lt;/p&gt;

&lt;h4&gt;
  
  
  Change Table Prefix
&lt;/h4&gt;

&lt;p&gt;Change the table prefix for WordPress tables at any time, not just when installing the script for the first time.&lt;/p&gt;

&lt;p&gt;Here follows the side by side comparison of the Database security aspects.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  File System Security
&lt;/h3&gt;

&lt;p&gt;WordPress uses files to store its source code of course. Source code files must not be changed by any attacker. WordPress may also generate log files. Logs may be watched to understand what happened.&lt;/p&gt;

&lt;h4&gt;
  
  
  Disable File Editing
&lt;/h4&gt;

&lt;p&gt;Disable the plugin file editor and the template file editor for administrative accounts, so nohacker with access to the admin account can edit the source files.&lt;/p&gt;

&lt;h4&gt;
  
  
  Monitor System Logs
&lt;/h4&gt;

&lt;p&gt;Monitor system’s error logs and access logs and others through the WordPress administration panel.&lt;/p&gt;

&lt;h4&gt;
  
  
  Manage File Permissions
&lt;/h4&gt;

&lt;p&gt;Manage file and directory permissions from admin panel and password protect the wp- directories.&lt;/p&gt;

&lt;h4&gt;
  
  
  Repair Files
&lt;/h4&gt;

&lt;p&gt;Repair altered files that may contain malicious code.&lt;/p&gt;

&lt;p&gt;Here follows the side by side comparison of the File System security aspects.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  External Access Features
&lt;/h3&gt;

&lt;p&gt;Threats that may compromise the security of Web site based on WordPress usually come from the outside. Some of the most important security features exist to prevent that malicious external accesses compromise WordPress security.&lt;/p&gt;

&lt;h4&gt;
  
  
  XSS Protection
&lt;/h4&gt;

&lt;p&gt;Cross-site scripting (XSS) is a way to inject JavaScript code in HTML that is displayed on Web pages and be used to steal user data or othet type of sensitive information.&lt;/p&gt;

&lt;h4&gt;
  
  
  WAF (Web Application Firewall)
&lt;/h4&gt;

&lt;p&gt;Web Application Firewall (WAF) filters, monitors and blocks HTTP requests sent to pages that supposedly should not exist in a Web site but may have been installed by code that exploited a vulnerability.&lt;/p&gt;

&lt;h4&gt;
  
  
  DDOS Protection
&lt;/h4&gt;

&lt;p&gt;DDOS stands for Distributed Denial Of Service attack. This is a kind of a security attack for compromising the ability of a server to handle requests due to many computers that are used from different world locations to perform attacks at the same time.&lt;/p&gt;

&lt;p&gt;DDOS protection is needed to detect when an attack is going on and prevent that it causes the WordPress site be unusable by regular users.&lt;/p&gt;

&lt;p&gt;Here follows the side by side comparison of the File System security aspects.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  Best Free WordPress Security Plugins
&lt;/h3&gt;

&lt;p&gt;All the plugins mentioned in this article have free versions apart from premium versions that may provide better system.&lt;/p&gt;

&lt;p&gt;If you compare all the listed plugins on the criterion that matter most to you, you can find out which is the best free WordPress security plugin.&lt;/p&gt;

&lt;h3&gt;
  
  
  What WordPress Security Plugin should I Choose?
&lt;/h3&gt;

&lt;p&gt;All the plug-ins mentioned in this article provide good support to the most important security matters that you should be concerned when detecting and mitigating security problems that may arise.&lt;/p&gt;

&lt;p&gt;So rather than recommending a specific plugin, let me list the features I think are more important when it comes to security services that a WordPress plugin may provide.&lt;/p&gt;

&lt;p&gt;Take a look at these features, look at the side by side comparisons above and see which plugins provide those features and at the same time provide them at price and support level that you desire.&lt;/p&gt;

&lt;p&gt;Some of the plugins only support certain features in the premium versions. But at the time of despair when something bad already happened the money that the premium version costs may be well worth compensated by the possibility to get support from qualified professionals.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Brute Force Protection&lt;/strong&gt; and &lt;strong&gt;Strong Password Enforcement&lt;/strong&gt; because you do not want an attacker to simply access your administration panel due to weak passwords&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated backups sent to secure places&lt;/strong&gt; , preferrable to a different server because if something bad happens you do not want to be unable to recover your WordPress site at least partially.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor changes in files&lt;/strong&gt; such as source code, templates, JavaScript and &lt;strong&gt;repair from secure backups&lt;/strong&gt; because many site defacements are basically that, files that were changed by attackers to make it look different or look the same but spread malware in a way that you cannot notice looking at the pages.&lt;/li&gt;
&lt;li&gt;A good &lt;strong&gt;Web application firewall&lt;/strong&gt; because even if plugins can protect from some kinds of exploits, other exploits may still be performed on the server and new malware files may be installed on the system to make it act in a way that is not intended. A Web Application Firewall will &lt;strong&gt;block the access to those new malware files&lt;/strong&gt; , so their code cannot be executed.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What if I still Have Security Problems Despite using a Security plugin?
&lt;/h3&gt;

&lt;p&gt;Well these security plugins are great but there may always be cases that they did not anticipate. Most newer security exploits were created by people that was smarter than the developers and abused from holes that were foreseen.&lt;/p&gt;

&lt;p&gt;So, when the security attacks happen, you will need the help of a security expert. Some plugin developers provide additional services that you may contract to have people solving your specific problem.&lt;/p&gt;

&lt;p&gt;Hiring on demand may often be more expensive than hiring an ongoing support service that is ready to act by the time you find about a security incident.&lt;/p&gt;

&lt;p&gt;This is why this article lists also one (one for now, more be listed later) support service, in the case called &lt;a href="https://www.phpclasses.org/blog/post/528/link/107/name/WPBuffs"&gt;WPBuffs&lt;/a&gt;. They provide several plans of subscription based WordPress support service. It includes security services but it also includes other non-security related services such as maintenance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.phpclasses.org/blog/post/528/link/107/name/WPBuffs"&gt;WPBuffs&lt;/a&gt; services are affordable and it may bring you some piece of mind and less headaches when the incidents happen. They have a free trial service for 30 days that you can try to evaluate them without having to commit any payment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do Not Wait for a Security Attack to Happen
&lt;/h3&gt;

&lt;p&gt;Security is a very sensitive topic. Many developers wished they never had to deai with security issues but every project will have their own set of security problems, especially large projects like WordPress that is a very visible target due to its popularity.&lt;/p&gt;

&lt;p&gt;So, if your WordPress site is very important to you and you must not lose time, money and effort with eventual security problems, do not wait until you have those problems to start acting. Spend some time now and install any plugins you feel that are necessary to keep you more protected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other WordPress Security Plugins and Support Services
&lt;/h3&gt;

&lt;p&gt;There are more WordPress Security Plugins out there. Some may be old and not be updated for a while. Others may be new and were not covered in this article yet.&lt;/p&gt;

&lt;p&gt;If you know about any other relevant plugins or support services dedicated to WordPress security, please post a comment below or use the &lt;a href="https://www.phpclasses.org/faq/#contact"&gt;contact&lt;/a&gt; link at the bottom of the page.&lt;/p&gt;

&lt;p&gt;If you liked this article share it with your developer or WordPress site owner friends so they can also be aware of how to protect their sites from security issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  WordPress Security News
&lt;/h3&gt;

&lt;p&gt;If you want to know all about the releases that implement or fix security aspects of WordPress, the best place to find about that is the WordPress news blog &lt;a href="https://wordpress.org/news/category/security/"&gt;Security&lt;/a&gt; category.&lt;/p&gt;

&lt;p&gt;There you can file the list of the latest releases of WordPress that reference security features or fixes.&lt;/p&gt;

</description>
      <category>security</category>
      <category>wordpress</category>
      <category>php</category>
    </item>
    <item>
      <title>How Can PHP Import Excel to MySQL using an PHP XLSX Reader and Excel XLSX Converter - 2022</title>
      <dc:creator>Haseeb A. Basil</dc:creator>
      <pubDate>Thu, 07 Mar 2019 14:06:40 +0000</pubDate>
      <link>https://forem.com/mega6382/how-can-php-import-excel-to-mysql-using-an-php-xlsx-reader-and-excel-xlsx-converter-2293</link>
      <guid>https://forem.com/mega6382/how-can-php-import-excel-to-mysql-using-an-php-xlsx-reader-and-excel-xlsx-converter-2293</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6SG8ohka--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2ABgL1kH6oowWVmshI.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6SG8ohka--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2ABgL1kH6oowWVmshI.png" alt="" width="600" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is XLSX
&lt;/h3&gt;

&lt;p&gt;XLSX is a file format used to create an Excel spreadsheet. It was first introduced by Microsoft in Excel 2007. It is XML-based, which makes it easier to transfer data between applications.&lt;/p&gt;

&lt;p&gt;A XLSX file stores data in worksheets in the form of cells. Cell are contained in rows and columns which can have multiple properties of the cell data like styles, formatting, alignment, etc..&lt;/p&gt;

&lt;p&gt;XLSX is in reality a simple ZIP archive. It contains multiple XML files, which have all the information of the spreadsheet properties.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parsing XLSX in PHP
&lt;/h3&gt;

&lt;p&gt;There are multiple ways to parse XLSX with PHP. As it is was mentioned above, a XLSX file is a XML-based ZIP archive.&lt;/p&gt;

&lt;p&gt;You just need to extract the ZIP file content files and parse them using any XML parser. But it is easier to use a ready-made XLSX parser as it might contain more functionality. There are few popular packages available to parse XLSX using PHP:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Spreadsheet_Excel_Reader&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PHPExcel&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.phpclasses.org/package/6279-PHP-Parse-and-retrieve-data-from-Excel-XLS-files.html"&gt;SimpleXLSX&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this article I focus more on the &lt;a href="https://www.phpclasses.org/package/6279-PHP-Parse-and-retrieve-data-from-Excel-XLS-files.html"&gt;SimpleXLSX package&lt;/a&gt; and how to use it to parse XLSX files and importing its data into a MySQL database.&lt;/p&gt;

&lt;p&gt;Using the SimpleXLSX package you can get data from the spreadsheet in form of rows. You can use that information for your own purposes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ways to Import XLSX in MySQL
&lt;/h3&gt;

&lt;p&gt;Since a XLSX file contains multiple files, it cannot be imported directly into MySQL. So the recommended way is to convert the XLSX file into a CSV and then import that to the DB.&lt;/p&gt;

&lt;p&gt;There is also an &lt;a href="http://sqlizer.io/"&gt;online tool&lt;/a&gt; that can be used for that. You just upload the XLSX file and it creates the insert statements for it.&lt;/p&gt;

&lt;p&gt;There is also plenty of desktop software like e.g. Excel2MySQL, Navicat, MySQL for Excel, Mr. Data Converter etc.. You can use the XLSX parsers in PHP to do this too. In the next section I will be going into more details about that approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Importing XLSX in MySQL via PHP
&lt;/h3&gt;

&lt;p&gt;As I mentioned above, you can use XLSX parsers written in PHP to import XLSX file data into a MySQL database. You might wonder why go to all the trouble of using parsers when there are other easier ways of importing XLSX into a MySQL database.&lt;/p&gt;

&lt;p&gt;Well there can be many uses for this approach including, importing given user provided XLSX files into a database automatically. This can be done using SimpleXLSX in a couple of ways.&lt;/p&gt;

&lt;p&gt;The first method is to parse the XLSX file in PHP and then change it to CSV and import that in MySQL, it can be done using a code similar to the one below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

    include 'simplexlsx.class.php';

    $xlsx = new SimpleXLSX( 'countries_and_population.xlsx' );
    $fp = fopen( 'file.csv', 'w');
    foreach( $xlsx-&amp;gt;rows() as $fields ) {
        fputcsv( $fp, $fields);
    }
    fclose($fp);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the above code you can parse an XLSX file in to a CSV file and then you can easily import the CSV file into the MySQL database.&lt;/p&gt;

&lt;p&gt;Now the other method to do this is to parse the XLSX file into an array and import it into the db using the mysqli or PDO extensions. You can do this by using a code similar to the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

    include 'simplexlsx.class.php';

    $xlsx = new SimpleXLSX( 'countries_and_population.xlsx' );
    try {
       $conn = new PDO( "mysql:host=localhost;dbname=mydb", "user", "pass");
       $conn-&amp;gt;setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
        echo $sql . "&amp;lt;br&amp;gt;" . $e-&amp;gt;getMessage();
    }
    $stmt = $conn-&amp;gt;prepare( "INSERT INTO countries_and_population (rank, country, population, date_of_estimate, powp) VALUES (?, ?, ?, ?, ?)");
    $stmt-&amp;gt;bindParam( 1, $rank);
    $stmt-&amp;gt;bindParam( 2, $country);
    $stmt-&amp;gt;bindParam( 3, $population);
    $stmt-&amp;gt;bindParam( 4, $date_of_estimate);
    $stmt-&amp;gt;bindParam( 5, $powp);
    foreach ($xlsx-&amp;gt;rows() as $fields)
    {
        $rank = $fields[0];
        $country = $fields[1];
        $population = $fields[2];
        $date_of_estimate = $fields[3];
        $powp = $fields[4];
        $stmt-&amp;gt;execute();
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Download the SimpleXLSX Package
&lt;/h3&gt;

&lt;p&gt;It is fairly easy to parse an XLSX file. The SimpleXLSX package provides an easy way to read and convert any XLSX file so it can be processed in any way your PHP application needs or even insert the data into a MySQL database for instance.&lt;/p&gt;

&lt;p&gt;You can download the SimpleXLSX package in the &lt;a href="https://www.phpclasses.org/package/6279-PHP-Parse-and-retrieve-data-from-Excel-XLS-files.html#download"&gt;ZIP format&lt;/a&gt; or install it using the composer tool with instructions presented in the &lt;a href="https://www.phpclasses.org/package/6279-PHP-Parse-and-retrieve-data-from-Excel-XLS-files.html#download"&gt;download page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Share this article with other colleague PHP developers that can benefit from this information. If you have questions post a comment below&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>excel</category>
      <category>php</category>
    </item>
  </channel>
</rss>
