SonarQube: Code Quality and Security

Trong quá trình lập trình & phát triển phần mềm chúng ta thường hay gặp vấn đề về quản lý chất lượng code, code smell, dirty code hay technical debt, thậm chí tồn tại lỗ hổng bảo mật. Nhất là khi dự án có sự tham gia của nhiều member, với trình độ kinh nghiệm khác nhau. Hoặc khi dự án chưa có rules, coding conventions, coding styles rõ ràng. Đến một ngày nào đó cần maintainance dự án hay develop thêm feature mới, chúng ta mới giật mình nhìn lại đống code cũ, tại sao nó lại tệ hại như vậy.

SonarQube là một open source platform, được phát triển bởi SonarSource dành cho việc kiểm tra liên tục chất lượng code (code quality), review code một cách tự động để phát hiện ra các bugs, code smell, lỗ hổng bảo mật cho 25+ ngôn ngữ lập trình khác nhau. SonarQube hỗ trợ báo cáo duplicated code, coding standards, unit tests, code coverage, code complexity, comments, bugs, and security vulnerabilities.

Cài đặt SonarQube trên Windows

Hướng dẫn cài đặt và bắt đầu với SonarQube. Bạn có thể sử dụng Docker hoặc download file về chạy bình thường. Yêu cầu máy có Java JDK 11 trở lên. Cấu hình máy tối thiểu 2GB RAM.

Đầu tiên vào chọn bản Community (miễn phí). Giải nén và tìm thư mục bin để chạy. Đối với Windows có thể cài thành service để tiện sử dụng.

Nếu gặp lỗi liên quan JAVA, các bạn chú ý cài lại Java JDK. Sau đó tìm conf/wrapper.conf sửa lại dòng sau:\Program Files\Java\jdk-12.0.2\bin\java

Truy cập: http://localhost:9000 username/password: admin/admin để kiểm tra. Nếu thành công thì chúng ta xong bước cài đặt. Tiếp theo tích hợp dự án vào SonarQube để phân tích.

Tích hợp dự án của bạn vào SonarQube

Sau khi đăng nhập thành công, click vào http://localhost:9000/projects/create để tạo dự án mới. Nhập key & tên dự án, sau đó chuyển sang màn hình nhập key, chọn loại dự án của bạn, và download file scanner của nó về, giải nén và thêm vào biến môi trường %PATH%. Ví dụ mình làm về Windows, dot net core và reactjs thì cần


Sau đó mở project của bạn và chạy câu lệnh theo hướng dẫn để sonarqube phân tích.

SonarScanner.MSBuild.exe begin /k:"KEY_CUA_BAN" /"http://localhost:9000" /d:sonar.login="API_KEY_CUA_BAN"

MsBuild.exe /t:Rebuild

SonarScanner.MSBuild.exe end /d:sonar.login="API_KEY_CUA_BAN"

Kết quả sau khi áp dụng

Chúc các bạn thành công.

60+ Best HTML Admin & Dashboard Templates 2017

The UI of a web application is extremely important to it’s success, a poor user experience can make using the product a chore whereas a great interface can speed up productivity, reduce customer support queries and increase customer retention. If you are the creator of a web app, SAAS, online software or just need an admin section for your website users, then investing a good admin dashboard theme can be a very wise investment.

In this collection we are looking at pre-made admin dashboard templates, these have been coded with technologies such as HTML5 and CSS3, making use of frameworks such as Bootstrap, jQuery, Angular JS, React and others. They are all beautifully designed so will make your product look highly professional so you can can show it off in marketing screenshots and videos. They also include many different types of features such as charts, graphs, maps, overlays and more so you can tailor them to your product’s needs.

Take a look below at our collection of over 60 of the Best HTML Admin and Dashboard Templates.


StartUI – a full featured, premium web application admin dashboard built with Twitter Bootstrap 4, JQuery and CSS (Less). It comes with a lot of ready to use components ideal for building your web application, CMS, CRM, admin panel, eCommerce dashboard, or any other type of application backend. StartUI coded highly responsive for your mobile phone & tablets. Completely modular with many unique features, it will help you build your next awesome product.


More Info & Demo


Umega is a fully responsive admin dashboard template, easy customization and lightweight which is basically designed for the developers. It follows the best practices using the latest technologies and I really hope that you will enjoy working with it.


More Info & Demo


Marino – Bootstrap 4 Dashboard UI Kit


More Info & Demo


MyAdmin Template is fully responsive premium bootstrap admin template ideal for your business. MyAdmin can used for all type of web applications, such as custom admin panel, project management system, admin dashboard, application backend, CMS, CRM, etc.


More Info & Demo


Tectonic is a beautifully designed admin dashboard template that caters to a wide range of necessities. With over 250 demos, Tectonic is easily one of the most complete admin themes out there.


More Info & Demo


Infinity is a responsive Bootstrap 3.3.6 Admin Template. It provides you with a vast collection of ready to use code snippets and utilities many custom pages and a collection of applications and widgets.


More Info & Demo


Metrika is a responsive material design built specifically for AngularJs. Using Google’s own Material Design framework for Angular with custom services, directives, icons and styling ( together with the power of Bootstrap for making layout as easy as ever. Create your own Material themes with color combinations and bringing true material components into bootstrap.


More Info & Demo


Rainbow is a colorful responsive admin web App built with Bootstrap & AngularJS. It uses Sass CSS which makes it easy to modify.


More Info & Demo


Milestone is an elegant and creative Bootstrap 4 admin template that comes out of the box with a myriad of layout options and features to help you build your next dashboard. Milestone features a huge set of reusable components, a tonne of plugins, different layouts and is easy to customise to individual needs.


More Info & Demo


Uplon is a fully responsive premium web UI kit built with awesome bootstrap v4. It comes with super clean user interfaces, many ready to use and highly customizable components and widgets. The power of SASS and easy code allows any developer to turn this theme into real web application.


More Info & Demo

Clean UI

Clean UI – a modern professional admin template, based on Bootstrap 4 framework. Clean UI is a powerful and super flexible tool, which suits best for any kind of web application: Web Applications; CRM; CMS; Admin Panels; Dashboards; etc. Clean UI is fully responsive, which means that it looks perfect on mobiles and tablets. Template includes Angular Starter Kit – a set of templates, that will make your developer’s life much easier.


More Info & Demo


LearnPlus is a beautifully crafted user interface for modern Learning web applications. LearnPlus includes examples for all the website pages possibly needed for a LMS application, covering the most important roles in any learning application, the student and the instructor.


More Info & Demo


AdminK is a fully responsive and 100% Retina ready bootstrap admin template. The template is perfect for your business, because it can used for all type of web applications, such as custom admin panel, project management system, admin dashboard, application backend, CMS, CRM, etc.


More Info & Demo


Horizon is a responsive dark admin template powered by Twitter Bootstrap Framework. Horizon has a simple set of UI elements and plugins to get your work done in the fastest time possible, with a user friendly and clean design to appeal to your customers.


More Info & Demo

Elite Admin

Eliteadmin is a premium admin dashboard template with flat design. It is fully responsive admin dashboard template built with Bootstrap 3.3.7 Framework, HTML5 and CSS3, Media query. It has a huge collection of reusable UI components and integrated with latest jQuery plugins. It can be used for all type of Web applications like custom admin panel, app backend, CMS or CRM.


More Info & Demo


The Alpha UI Framework is a premium Web Application Admin Dashboard built on top of MaterializeCSS Framework. It was created to be the most functional, clean and well designed template for any types of backend applications. We have carefully designed all common elements.


More Info & Demo

Material Design

Material is a Google Material Design inspired admin template built with Angular & Bootstrap.


More Info & Demo


Boooya – powerful admin template based on newest technologies. This template is fully responsive and retina ready. It means that you can easily build your web application and be sure that it will work well on all devices. Also its included with unique plugins that developed specially for Boooya temaplte. In downloaded package you will find .less files, documentation, clean and commented source code. Atlant is easy to use and customize, also you will find lots of ready to use elements.


More Info & Demo

Varello Admin

VarelloAdmin is a fully-responsive, well-featured and highly-polished dark admin template. It includes both Static HTML and Laravel 5.2 Blade versions (includes application routes and controllers). It is a good fit for any kind of back-end application, whether it is administrative, statistical, management, CMS, dashboard, messaging, and much more. It is built for multi-purpose admin systems, and has been rigorously designed and tested to work responsively across Large/Medium Desktop, Tablet and Mobile devices, and in all modern browsers. This ensures it looks good, no matter the device you are using.


More Info & Demo


Mara is a Material Design Multipurpose Admin Template with a huge collection of material design elements built on Materialize framework. Mara can be used for any type of web applications: custom admin panels, admin dashboards, CMS, CRM, SAAS and websites: CMSs, SAAS, CRM, HRMS, Support & Social network, Blog, E-commerce site, Personal page, Business site, Magazine.


More Info & Demo


Bootstrap Responsive Admin Web App with AngularJs


More Info & Demo


Zircos is a premium, fully responsive web app UI kit. It has flat design and built with Bootstrap 3.3.7, HTML5, CSS3 and Jquery. It comes with bunch of reusable UI widgets, components, ready made pages. The clean and modular code will allow you to easily build any web application.


More Info & Demo


Boost is a responsive bootstrap admin dashboard template built with Twitter Bootstrap Framework and it has a huge collection of reusable UI components and integrated with jQuery plugins also. It is also easy to use and modify that is suitable to your needs and can be implemented to your desire projects such Project Management System, CRM, HRMS, Real Estate, Ecommerce, Loan Management System, Billing Management System and more.


More Info & Demo


Building a single page application in Javascript? Interested in moving to React/Redux? Don’t start from scratch – build a scalable , highly polished admin application with React/Redux and Bootstrap that works great on mobile and tablet as well as desktop.


More Info & Demo


Deluxe is a Admin Template built with Bootstrap Framework is designed in the style flattening like material design. Deluxe has a huge collection of plugins and UI components and works seamlessly on all major web browsers, tablets and phones.


More Info & Demo


Float admin is a clean and powerful admin template based on Bootstrap3. It is built with modern technologies like sass, compass, ruby, bootstrap3, html5 and css3. Clean code and SASS files allows you to create and modify easily as per requirements. The template is fully responsive and easily fit into any devices. Huge collection of pre-made pages, plugins, UI elements, Jquery UI, SASS files, Light and dark skins, Landing page, 4+ layout options and many more advanced features make it the best choice for any web applications.


More Info & Demo

CSK Admin

Contains 300+ Pages, 20+Dashboards, 3+ Ecommerce Templates, 5+ Landing Pages & many more to come. Coming AngularJS Version


More Info & Demo


Penguin is a clean and fully responsive Web app kit and admin dashboard template for developers


More Info & Demo


Rayan is a responsive bootstrap admin dashboard template built with Twitter Bootstrap Framework and it has a huge collection of reusable UI components and integrated with jQuery plugins also. Rayan can be used for applications (CMS, CRM, Custom Admin Application, Admin Dashboard). Rayan template works on all major web browsers, Desktop, iPhone, iPad, Tablet and is any smart phone friendly.


More Info & Demo


Beagle is a responsive admin template based on the famous Bootstrap framework, made it with love in every pixel, with tons of beautiful features ready to use.


More Info & Demo


Omega – Responsive Massive Admin Pack


More Info & Demo


COLOURcode has been born from decades of professional experience developing admin applications and designing interfaces. It is a new kind of admin template that will suit any application type, although it was specifically designed for those who like to use colour to boost usability through context and association. It is fully responsive, based on the latest Bootstrap 3, and has been extensively tested with recent desktop and mobile browsers. The CSS is constructed from Sass-based structured stylesheets, and the JavaScript is constructed from an easily extended custom modular framework with jQuery.


More Info & Demo


Dashboard UI KIT for modern web application.


More Info & Demo


Teamwork is a fully responsive and multipurpose Admin Template. The combination of SASS and Compass make it flexible and user friendly. Teamwork has large collection of features, UI elements, widgets, icons and libraries that make it multipurpose.


More Info & Demo


Admin9 is admin HTML template. Built with bootstrap and our creative designs. It comes with many predefined pages and component styled. We also include carts and tables. Clean code and CSS allows you to create and modify easily as per requirements. This is specially designed for large screens.


More Info & Demo


Pacificonis is a premium admin dashboard template based on Bootstrap. There are a huge of powerful components build with SASS CSS which makes it easy to modify. It has a huge collection of reusable UI components and integrated with latest jQuery plugins. It can be easily integrated into your projects, allowing you to create solutions for your future designs quickly.


More Info & Demo


ARISE Admin Theme is a premium template comes with FIVE unique designs. It is fully responsive admin dashboard built with Bootstrap 3+ Framework, HTML5, CSS3 and Sass. It has a huge collection of reusable UI components and integrated with latest jQuery plugins. It can be used for all type of web applications like custom admin panel, project management system, admin dashboard, Backend application or CRM.


More Info & Demo


AFRO is a fully responsive dashboard admin built with the Bootstrap Framework. It has tons of features and ready-to-use UI elements, widgets, charts and pages which are Highly customizable and easy to use.


More Info & Demo


Elephant is a front-end template created to help you develop modern web applications, fast and in a professional manner. Built on top of Bootstrap, it includes a large collection of HTML, CSS, and JS components that is simple to use and easy to customise. The file structure in the Elephant is similar to the HTML5 Boilerplate file structure, where the intention is for developers not to have problems and not waste time by trying to decrypt the fantasy, which is brought to you when buying a new product.


More Info & Demo


Master is a beautifully admin template. It is fully responsive theme built with Bootstrap 3.3.7, HTML and uses Sass CSS which makes it easy to modify.


More Info & Demo


Peak – Material design Bootstrap 4 admin template


More Info & Demo


Nexus is a professional, modern, complete and flexible Admin template that can be used to build all kind of projects: Web Applications, Backend Websites, Custom Admin Panels, Admin Dashboards, CMS, CRM or even a Portfolio, Blog, Business Website. I encourage you to have a good look at live preview and discover all the included features!


More Info & Demo


Trata admin is a responsive admin & dashboard theme.this theme is build and powered with Twitter bootstrap 3.3.6. It has tons of features and ready-to-use UI elements, widgets, charts and pages which are Highly customizable and easy to use.


More Info & Demo


Fit2Go – beautiful gym fitness admin template is a bootstrap based admin template crafted targeting gyms, fitness and wellness centers. It comes with two modules Admin and User/Subscriber. Admin section contains all pages required to manage a fitness center with beautiful UI. It contains 20+ pages where gym owners can check finances, members and manage courses, events, news, holidays etc.


More Info & Demo


Meteor – a responsive and multipurpose admin dashboard template, based on latest Twitter Bootstrap framework. It’s super flexible and user friendly, as it’s compatible with any device. We put a lot of time and effort to create such a template, with many kinds of different layout variations and yet 3 layers, as many others are coming soon for the next updates. They can be changed just by changing a line of code, so you haven’t to worry about choosing another one! This makes Meteor an easily customizable tool for anyone.


More Info & Demo


Neptune is a full featured dashboard UI kit for web application development built with Bootstrap 4. Comes with lots of ready to use widgets and components.


More Info & Demo


Xadmino is a bootstrap based fully responsive admin template. It comes with lots of reusable and beautiful UI elements, widgets and features. It allows developer to easily build a super awesome web application.


More Info & Demo


Ninja Admin is a fully featured premium admin template built with Bootstrap 3.3.7, HTML5, CSS3 and jQuery, beautiful features ready to use.


More Info & Demo


Kenny Admin is a WebApp template for admin dashboards and control panels. It is a responsive HTML template that is based on the CSS Sass framework Bootstrap 3.3.6 It utilizes all of the Bootstrap components in its design and re-styles many commonly used plugins to create a consistent design that can be used as a user interface for backend applications. Kenny Admin is based on a modular design, which allows it to be easily customized and built upon.


More Info & Demo


CoreNG is a Angular 2 theme built from the ground up with Angular CLI as your all in one build system and the Google backed Angular Material 2! We’ve put a lot of time into this theme, and we will continue to put in even more! When you buy this theme, you also get access to our private Git repository so you can follow along faster with updates, even contribute to the development of this theme.


More Info & Demo


The Magna is a premium Web Application Admin Dashboard built on top of MaterializeCSS Framework. It was created to be the most functional, clean and well designed template for any types of backend applications. We have carefully designed all common elements.


More Info & Demo

Disclosure: Some of the links in this post may be “affiliate links.” This means if you click on the link and purchase an item, We will receive an affiliate commission

Continue reading 60+ Best HTML Admin & Dashboard Templates 2017

Resize ảnh với HTML5 FileReader

Khi lập trình web, các vấn đề liên quan đến hình ảnh được sử dụng thường xuyên, ví dụ upload hình ảnh sản phẩm, banner, logo….

Từ đây nảy sinh vài vấn đề như: muốn thấy hình ảnh đại diện ngay khi chọn file. Resize hình ảnh để tiết kiệm dung lượng…. Trước khi HTML5 ra đời, chúng ta thường hay giải quyết mọi thứ trên server, tức là upload ảnh lên server, sau đó xử lý. VD: dùng ajax để upload ảnh lên server, sau đó trả về ảnh đại diện…. Điều này dẫn đến tốn thời gian xử lý cho máy chủ, hoặc file lớn, mạng chậm thì user phải chờ đợi rất lâu.

Thật may mắn khi HTML5 ra đời, nó giúp chúng ta cả 2 việc trên luôn. Đó là preview (xem trước) hình ảnh ngay khi vừa chọn xong, đồng thời resize ảnh luôn ngay trên trình duyệt. Sau đó chúng ta chỉ việc upload mã base64 này lên server, và convert lại thành hình ảnh là xong, hoặc lưu luôn base64 vào database cũng ok.

HTML sử dụng API FileReader, nó có thể đọc file ảnh, file txt, khá là thú vị.

Code chọn ảnh xong hiển thị ảnh đại diện

<input id="imageFile" name="imageFile" type="file" class="imageFile"  accept="image/*"   /> 
<img src="" id="preview"  >

Code javascript

$(document).ready(function() {

    $('#imageFile').change(function(evt) {

        var files =;
        var file = files[0];

        if (file) {
            var reader = new FileReader();
            reader.onload = function(e) {
                document.getElementById('preview').src =;

Các bạn chú ý, có sử dụng jQuery

Code resize hình ảnh

<input id="imageFile" name="imageFile" type="file" class="imageFile"  accept="image/*"   /> 
<input type="button" value="Resize Image"  onclick="ResizeImage()"/> 
<img src="" id="preview"  >
<img src="" id="output">

Code javascript

function ResizeImage() {
    if (window.File && window.FileReader && window.FileList && window.Blob) {
        var filesToUploads = document.getElementById('imageFile').files;
        var file = filesToUploads[0];
        if (file) {

            var reader = new FileReader();
            // Set the image once loaded into file reader
            reader.onload = function(e) {

                var img = document.createElement("img");
                img.src =;

                var canvas = document.createElement("canvas");
                var ctx = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0);

                var MAX_WIDTH = 400;
                var MAX_HEIGHT = 400;
                var width = img.width;
                var height = img.height;

                if (width > height) {
                    if (width > MAX_WIDTH) {
                        height *= MAX_WIDTH / width;
                        width = MAX_WIDTH;
                } else {
                    if (height > MAX_HEIGHT) {
                        width *= MAX_HEIGHT / height;
                        height = MAX_HEIGHT;
                canvas.width = width;
                canvas.height = height;
                var ctx = canvas.getContext("2d");
                ctx.drawImage(img, 0, 0, width, height);

                dataurl = canvas.toDataURL(file.type);
                document.getElementById('output').src = dataurl;


    } else {
        alert('The File APIs are not fully supported in this browser.');

See the Pen Resize Image with HTML5 File Reader by tuanitpro (@tuanitpro) on CodePen.

Chúc các bạn thành công.

Không upload được file trong PHP

Chào các bạn

Trong quá trình lập trình web với PHP bạn thường hay bắt gặp tình huống upload file trong php. Tất nhiên rồi, đó là khi bạn upload hình ảnh sản phẩm lên trang web, upload file video giới thiệu, hay file tài nguyên học tập bạn muốn chia sẻ với mọi người.

PHP đủ mạnh mẽ giúp bạn làm được điều đó, nếu bạn chưa biết cách thì hãy xem qua bài viết:

Nhưng đôi khi bạn không suôn sẻ lắm, nhất là khi bạn cần upload tập tin có dung lượng lớn như video chẳng hạn. Để khắc phục vấn đề đó, bạn hãy tìm đến tập tin php.ini sau đó cấu hình lại một chút như sau:

post_max_size = 750M
upload_max_filesize = 750M
max_execution_time = 5000
max_input_time = 5000
memory_limit = 1000M

Sau đó restart lại wamp, xamp hay công cụ mà bạn đang sử dụng làm web server chạy PHP.

Chúc các bạn thành công.

Cách kết nối đến CSDL MySQL trong PHP?

Khi làm việc với website thì kết hợp với database là một việc cần thiết, quan trọng. Trong bài viết này sẽ hướng dẫn các bạn cách đơn giản để kết nối đến CSDL MySQL và thao tác dữ liệu trên đó.

Để làm việc với mysql và PHP chúng ta cần nắm 6 hàm cơ bản:

1- Kết nối cơ sở dữ liệu:

Cú pháp:



2- Lựa chọn cơ sở dữ liệu:

Cú pháp:



Ví dụ:


$conn=mysql_connect("localhost","root","root") or die(" khong the ket noi");

3- Thực thi câu lệnh truy vấn:

Cú pháp:

mysql_query(“Câu truy vấn ở đây”);


4- Đếm số dòng dữ liệu trong bảng:

Cú pháp:



5- Lấy dữ liệu từ bảng đưa vào mảng:

Cú pháp:



6- Đóng kết nối cơ sở dữ liệu:

Cú pháp:



Ví dụ áp dụng:

Tạo cơ sở dữ liệu dựa trên từng đoạn code sau:

mysql -hlocalhost -uroot -proot

mysql>create database demo_mysql;

mysql> use demo_mysql;

mysql>create table user(
username VARCHAR(50) NOT NULL, 
password CHAR(50) NOT NULL, PRIMARY KEY(id)

Tạo trang test.php. Đầu tiên chúng ta sẽ kết nối cơ sở dữ liệu.

    $conn=mysql_connect("localhost", "root", "root") or die("can't connect database");

Tiếp đến viết câu truy vấn lấy ra tất cả user từ database.

    $sql="select * from user";

Kiểm tra xem trong bảng dữ liệu đã tồn tại user nào chưa ?. Nếu chưa thì xuất ra thông báo lỗi, ngược lại thì đưa chúng vào mảng và lặp cho đến hết bảng dữ liệu.

if(mysql_num_rows($query) == 0){
    echo "Chua co du lieu";
        echo $row['username'] ." - ".$row['password']."<br />";

Và cuối cùng chúng ta đóng kết nối và kết thúc thao tác xử lý.


Và cuối cùng là file hoàn chỉnh của ứng dụng trên:

    $conn=mysql_connect("localhost", "root", "root") or die("can't connect database");
    $sql="select * from user";
    if(mysql_num_rows($query) == 0){
        echo "Chua co du lieu";
            echo $row['username'] ." - ".$row['password']."<br />";

Chúc các bạn thành công.


Tại sao bạn nên chọn PHP để lập trình web?

Bài viết được dịch từ trang web SitePoint

Đó là một câu hỏi phổ biến. Tại sao thực sự nên chọn PHP chứ không phải là một lựa chọn nào khác? Sau tất cả, PHP thường bị xem như là một ngôn ngữ lộn xộn, không sử dụng được và có thiết kế rất tồi. Tại sao mọi người chọn nó khi bắt đầu một dự án từ đầu?

Thay vì liệt kê những lý do tại sao mọi người chọn nó (cái này có rất nhiều), chúng ta hãy tập trung vào lý do tại sao mọi người nên chọn nó. Tuy nhiên, chúng ta không thể nói về điều đó mà không đề cập đến những trường hợp mà nó không nên được sử dụng.

Khi nào thì bạn KHÔNG nên chọn PHP

Khi viết các ứng dụng dạng command line

Nếu bạn xây dựng một ứng dụng dạng dòng lệnh (command line), PHP không phải là sự lựa chọn đúng. Chắc chắn là cũng có những cách tiếp cận tốt để xây dựng ứng dụng CLI (Command Line Interface) bằng PHP, nhưng chỉ đơn giản là nó không được thiết kế với mục đích làm điều đó. Đầu tiên và trước hết, PHP là một ngôn ngữ web, và một ứng dụng thuần command line tốt hơn là nên được xây dựng bằng một ngôn ngữ khác. Điều đó không phải để nói rằng nó không thể – mà chắc chắn ứng dụng đó sẽ nhanh hơn và dễ dàng hơn khi thực hiện bằng một ngôn ngữ khác. Việc xây dựng các ứng dụng CLI bằng PHP thì tự bản thân nó chính là phép ẩn dụ mà người ta sử dụng khi so sánh PHP với một cái búa có hai đầu dùng để nhổ đinh. Chỉ vì nó không phải là công cụ dành cho việc đó. Ví dụ – Python được cài đặt sẵn trên hầu hết các hệ điều hành họ *nix, vì vậy bạn có thể truy cập ngay lập tức tới nó mà không cần phải vọc vậy chỉnh sửa file php.ini, và có thể bắt đầu làm việc ngay lập tức.

Khi nó có vẻ như dễ dàng nhất

Nếu PHP có vẻ là cách dễ dàng nhất trong các ngôn ngữ và đó là động lực duy nhất của bạn, thì sự lựa chọn đó của bạn là sai lầm. PHP có thể trở nên phức tạp một cách nhanh chóng, và phải thừa nhận rằng việc dễ dàng hơn những ngôn ngữ khác là điều không thực tế. Việc thực hiện những dự án quan trọng thì độ khó cũng tương đương nhau trong bất kỳ ngôn ngữ nào.

Chỉ vì nhà cung cấp hosting của bạn hỗ trợ nó

Nếu bạn đang sử dụng một shared host, và vui sướng với thực tế rằng nó hỗ trợ PHP (thậm chí không phải là phiên bản mới nhất), hãy dừng lại. Nếu bạn đang xem mình là một nhà phát triển phần mềm, thì đừng bao giờ sử dụng các shared host cho bất cứ điều gì ngoại trừ một số thứ lặt vặt như custom webmail, quản lý domain, hoặc những demo hết sức đơn giản. Với những lựa chọn thay thế như DigitalOcean cung cấp các máy chủ riêng ảo (VPS – Virtual Private Server) được lưu trữ trên ổ SSD với chi phí ít nhất là $5 đô-la/tháng, thì việc chọn một shared host không có ý nghĩa gì – vì VPS mang lại cho bạn nhiều quyền kiểm soát hơn. Nếu bạn không hài lòng với đội ngũ DevOps của họ và không thích tự tay thiết lập server (dù vậy bạn thực sự nên tìm hiểu cách làm điều đó), có rất nhiều nhà cung cấp cloud hosting đưa ra các tầng miễn phí được cấu hình sẵn cho bạn. Hãy tránh xa các shared host.

Phần mềm tính toán mạnh

Khi bạn muốn viết phần mềm làm việc rất nhiều với toán học, các tính toán phức tạp, thống kê và những thứ tương tự như vậy, có những lựa chọn tốt hơn – đặc biệt là nếu ứng dụng đó chủ yếu làm công việc này là chính. Thì các ngôn ngữ dạng functional như Scala hoặc ngôn ngữ mới Dart sẽ thực thi tác vụ này tốt hơn nhiều so với PHP, vì nếu làm bằng PHP có thể yêu cầu nhiều nỗ lực hơn để nó có khả năng làm những việc bạn muốn. PHP cũng chậm hơn đáng kể ở những công việc mà các ngôn ngữ khác được thiết kế dành riêng cho chúng.

Đôi khi sẽ đơn giản hơn nếu viết phần nặng về tính toán của các ứng dụng trong ngôn ngữ mà bạn đang làm việc hiện tại, nhưng đó thường là một sự lười biếng. Sự khó chịu khi phải cài đặt một ngôn ngữ helper hoặc máy ảo và xây dựng phần đó như một ứng dụng riêng biệt thường được bù đắp bởi những lợi ích lâu dài, đặc biệt khi lượng traffic bắt đầu đòi hỏi điều đó. Có một lý do mà phần tính toán back-end của mạng xã hội Twitter được viết bằng Scala, mặc dù phần front-end của họ vẫn là Ruby on Rails.

PHP là rất dễ học

Các vấn đề được liệt kê ở trên là những vấn đề của việc thiếu kiến thức và kinh nghiệm, và đương nhiên là khi ai đó sử dụng PHP cho một mục đích như vậy thì kết quả cuối cùng là không được tối ưu – nó sẽ bổ sung thêm những ý kiến xấu đến danh tiếng đã bị hoen ố của PHP. Vậy PHP tốt nhất cho điều gì?, đó là bất kỳ kịch bản hướng web nào cần phát triển nhanh chóng, và cần thực hiện thực sự nhanh.

PHP có một cộng đồng rất lớn. Đúng vậy, đại đa số là các tay lính mới, nhưng một khi bạn đã gạt bỏ những thành phần linh tinh, còn lại là một số ít các chuyên gia có tâm huyết như Phil Sturgeon, Josh Lockhart, Mike van Riel,Anthony Ferrara và rất nhiều người khác nữa. Một tá chuyên gia có nhiều tâm huyết thừa nhận những nhược điểm của PHP, nhưng cũng làm việc vất vả trong việc hướng dẫn cho cộng đồng và sửa chữa những vấn đề đó, họ có thể cung cấp một kho tàng kiến thức có giá trị. Cùng với những nguồn tài nguyên tuyệt vời như diễn đàn SitePoint,StackOverflowPTRW, những vấn đề gặp phải trong PHP dễ dàng được giải quyết, và quá trình này thường nhanh chóng và có chất lượng cao. Trừ khi các câu hỏi mà bạn đặt ra là hết sức ngớ ngẩn (và vâng, những câu hỏi ngớ ngẩn), cộng đồng này luôn luôn sẵn sàng giúp đỡ.

Số lượng các dự án mã nguồn mở cũng như là các cuốn sách và khóa học về PHP là rất dồi dào, với sự kiên nhẫn và tài liệu hướng dẫn thì bạn có thể trở nên rất thông thạo ngôn ngữ này trong một khoảng thời gian tương đối ngắn.

Xua tan những tin xấu

PHP đã trưởng thành hơn nhiều kể từ lần cuối cùng mà người ta tập hợp những điểm tồi của nó, và nó đã kế thừa rất nhiều những tính năng hiện đại của các ngôn ngữ khác. Thành kiến ở đây rất phổ biến, và chúng ta nên học cách để nhận ra điều đó. Như nội dung bài viết tuyệt vời này trên blog MailChimp từ năm 2010 nói rằng, nó không phải là công cụ, mà do cách bạn sử dụng nó như thế nào.

PHP cho phép nhanh chóng tạo nguyên mẫu của tất cả các loại ứng dụng, và có thể giúp bạn dựng lên chạy thử mà không tốn nhiều thời gian. Nó là một ngôn ngữ nhanh và mạnh mẽ, và thậm chí còn nhanh hơn cả Ruby on Rails và Python trong rất nhiều các ứng dụng web phức tạp, cùng với những lợi ích tăng thêm của các dự án nhưHHVMPhalcon, hiệu suất của PHP là không có đối thủ trong các ngôn ngữ dynamic.

Bây giờ, trước khi bạn hùa theo đám đông và hét toáng lên là “chỉ cần sử dụng NodeJS, nó là tốt nhất!” hay “MailChimp sẽ tốt hơn bằng cách sử dụng NodeJS ngay từ đầu”, thì trước tiên bạn hãy xem xét sự hỗn loạn và phân mảnh của thế giới JavaScript hiện nay. Có tuổi đời trẻ hơn PHP, nhưng các framework của JS nhiều hơn – đó là một điểm mà nhiều kẻ ghét PHP thường đem ra chế diễu. Ngoài ra luôn có sự chênh lệch giữa các giải pháp khác nhau, và mỗi cái đều tuyên bố mình là “đơn giản hơn/ tốt hơn/ nhanh hơn để làm việc X”. Cộng đồng này là rất lớn, nhưng bị phân mảnh khủng khiếp. Điều này được thể hiện qua một tweet vui trên mạng xã hội Twitter như sau:

Trò chơi uống rượu phạt cho các nhà phát triển web:
(1) Bạn hãy nghĩ ra một danh từ
(2) Hãy tìm kiếm trên Google cụm từ “<tên danh từ đó>.js”
(3) Nếu có một thư viện với tên đó đã tồn tại – thì phạt uống một ly rượu
— Shay Friedman (@ironshay)

Ý định của tôi không phải là đi bôi nhọ những ngôn ngữ khác – những người khác có thể làm công việc đó tốt hơn rất nhiều trong việc phân tích nhược điểm của JS hơn tôi – điều mà tôi đang cố gắng chỉ ra đó là thực tế rằng ai cũng có thể soi mói vào những nhược điểm của bất kỳ ngôn ngữ nào. Cũng giống như trong cuộc sống vậy, nếu bạn chỉ tập trung vào những thứ tiêu cực thì bạn sẽ chẳng bao giờ có những trải nghiệm tốt cả – những nhược điểm của PHP đã được chăm sóc bởi các thư viện và framework, và trong khi người ta có thể lập luận rằng một “ngôn ngữ đích thực” thì không cần các bản vá lỗi hoặc sự giúp đỡ của các công ty lớn để làm việc, nhưng ai có thể đếm được chính xác những gì các thư viện và các gói Java, NPM hoặc PUB dùng để vá lỗi và cải tiến ngôn ngữ này, bổ sung thêm những chức năng còn thiếu để người ta có thể sử dụng.

Vì vậy hãy dừng ngay việc tập trung vào bàn về ngôn ngữ X dở như thế nào, mà hãy bắt đầu làm việc trên các dự án chứng tỏ tính ưu việt trong sự lựa chọn của chúng ta. Vâng, có những dự án ngoài kia làm giảm uy tín của nó – WordPress là một trong những dự án như vậy – nhưng nếu chúng ta kiên trì và xây dựng với những thứ tốt nhất, chúng ta có thể xua tan đi những tiếng xấu và bắt đầu xây dựng lại thế giới PHP mà chúng ta yêu quý.

Kết luận

PHP là một lựa chọn tuyệt vời cho các dự án mới bất kể sự phức tạp của chúng. Thế giới PHP đã phát triển với những bước đi thần tốc trong một vài năm gần đây, và một số tính năng mới mang tính cách mạng có thể đưa vào sử dụng ngay hôm nay (tham khảo các liên kết về HHVM và Phalcon ở trên). Theo tôi thì nó nên là công cụ chính trong hộp công cụ của bạn – việc thông thạo nhiều ngôn ngữ lập trình cũng mang lại hữu ích như bạn biết nhiều ngoại ngữ vậy – nhưng chắc chắn sẽ tốt hơn nếu bạn thật tinh thông về một ngôn ngữ. PHP cung cấp cho bạn khả năng đi từ ý tưởng, đến nguyên mẫu, tới sản phẩm trong thời gian rất ngắn – và đó không phải là điều mà nhiều ngôn ngữ làm được. Những tiến bộ gần đây như OpCache built-in và các máy ảo như HHVM đưa ngôn ngữ này đi xa hơn, cho phép bạn giảm đáng kể chi phí cloud hosting, và các trình giám sát hiệu năng như AppDynamics sẽ cho phép bạn sử dụng đến tận cùng giới hạn của nó.

Khi xem xét dự án tiếp theo của bạn – đừng hỏi bản thân “Ai ghét PHP?” hoặc “Mọi người sẽ nghĩ gì?”. Những câu hỏi này tạo ra sự vô nghĩa và bất an. Bạn nghĩ về bất cứ cái gì, chẳng hạn như MailChimp, hệ thống cung cấp sức mạnh để gửi hàng triệu email mỗi ngày, đã được xây dựng bằng PHP trước khi họ “sửa lại”? Thay vì đó, hãy tập trung làm tốt nhất công việc của mình và tạo ra sản phẩm có ích cho xã hội.


PHP Upload file

Upload file là một vấn đề quan trọng và cần thiết khi lập trình web. Chúng ta cần tải hình ảnh lên hosting, tải file ….
Đoạn code nhỏ trong php sau đây cho phép bạn làm thực hiện điều đó thật đơn giản.

PHP Upload file
PHP Upload file

Cấu hình file “php.ini”

Đầu tiên, để chắc chắn PHP cho phép upload file, chúng ta cần kiểm tra trong file php.ini. Trong file php.ini tìm đến dòng file_uploads gán = On

file_uploads = On

Thiết kế trang html

<!DOCTYPE html>
<h1>PHP - Upload file demo <a href=""></a></h1>
<form action="upload2.php" method="post" enctype="multipart/form-data">
    Chọn file upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Tải lên" name="submit">


Có vài quy tắc bạn cần nhớ.

  • Form phải để phương thức POST
  • Bắt buộc phải có thuộc tính
  • action của form chỉ đến trang upload2.php, là trang chứa code PHP thực hiện phía server.

Code trang upload2.php


if(isset($_POST["submit"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
	// Kiểm tra file upload lên có phải là ảnh không?

    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File có định dạng - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "Chỉ cho phép hình ảnh.";
        $uploadOk = 0;
// Kiểm tra file tồn tại hay chưa?
if (file_exists($target_file)) {
    echo "File đã tồn tại.";
    $uploadOk = 0;
// Kiểm tra kích thước file 500000 byte
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "File quá lớn.";
    $uploadOk = 0;
// Kiểm tra định dạng ảnh hợp lệ không?
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Chỉ cho phép các định dạng sau: JPG, JPEG, PNG & GIF";
    $uploadOk = 0;
// Kiểm tra điều kiện trước khi upload?
if ($uploadOk == 0) {
    echo "Upload thất bại.";
// Nếu ok thì cho phép upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo " File ".$target_dir. basename( $_FILES["fileToUpload"]["name"]). " upload thành công.";
        echo '<br/><img src="'.$target_dir. basename( $_FILES["fileToUpload"]["name"]).'" width="160" />';
    } else {
        echo "Upload file thất bại, vui lòng thử lại.";

Một số giải thích:

  • $target_dir = “uploads/” – thư mục chứa file tải lên. Nằm cùng cấp với upload2.php
  • $target_file đường dẫn tập tin được tải lên
  • $uploadOk=1 để kiểm tra dữ liệu trước khi upload
  • $imageFileType kiểm tra phần mở rộng của tập tin
  • Tiếp theo kiểm tra xem ảnh có thật hay bị giả mạo (vd: social.php => social.png)

Chúc các bạn thành công.

Cách loại bỏ dấu tiếng Việt với PHP

Khi bạn cần tìm kiếm không dấu hoặc tạo các URL thân thiện cho website thì việc loại bỏ dấu cho Tiếng Việt khá quan trọng. Bài viết sẽ hướng dẫn các bạn cách thực hiện việc này với ngôn ngữ PHP.


Xây dựng hàm vn_str_filter($str) để loại bỏ dấu tiếng Việt khỏi 1 chuỗi. Khi gọi hàm: vn_str_filter(“Hoàng Sa, Trường Sa là của Việt Nam”) sẽ được kết quả là “Hoang Sa, Truong Sa la cua Viet Nam”.


Ta sử dụng 2 hàm sau:

foreach() //duyệt mảng
preg_replace // tìm và thay thế các âm tiếng Việt từ có dấu thành không dấu.


Ta viết hàm vn_str_filter như sau:

function vn_str_filter ($str){
        $unicode = array(
       foreach($unicode as $nonUnicode=>$uni){
            $str = preg_replace("/($uni)/i", $nonUnicode, $str);
		return $str;


Khi sử dụng ta gọi:

echo vn_str_filter('Hoàng Sa, Trường Sa là của Việt Nam');