PHP cơ bản và nâng cao

Tính thời gian xử lý lệnh

$start = microtime(true);
sleep(10);
$time_elapsed_secs = microtime(true) - $start;
echo $time_elapsed_secs;

Sử dụng IF trong ECHO

echo "Một Hai Ba ".(($val=='aaa') ? 'Điều kiện đúng' : 'Nếu không đúng')."Bốn Năm Sáu";

Tìm String trong String

$a = 'nguyen van a';
if (strpos($a, 'nguyen) !== false) {return true;} 

Còn tiếp…

Mở Port trên Windows 10

Trên Windows 10

Mở Windows Firewall.

Click vào Inbound Rules -> New Rule

Chọn Custom -> Next

Chọn All Programs -> Next

Prototype chọn “TCP

Local Port chọn “Specific Ports

Nhập Port muốn mở ví dụ: 3389 -> Next

Scope -> Next

Action -> Next

Profile -> Next

Name -> Nhập tên ví dụ: “Remote Desktop

-> Done

Đối với máy tính cài Kaspersky

Vào Setting

Chọn Protection -> Firewall

Click Add

Nhập như hình bên dưới -> Click Save

Done !

Biến máy tính Windows thành Server Phim để xem từ Điện thoại, iPad, Tivi…

Nhiều người trong chúng ta có thói quen tải rất nhiều phim về máy tính để khi nào rãnh thì xem dần dần.

  • Nhưng cái khó là chỉ xem được trên máy tính.
  • Vậy làm thế nào để có thể xem phim đó trên Smartphone, iPad, Tivi, AndroidBox…từ bất cứ nơi nào ?
  • Làm thể nào để chia sẻ phim trên máy tính của mình cho bạn bè cùng xem ?
  • Vừa chạy xe vừa xem phim trên máy tính với Android Auto…?
  • Xem phim với chất lượng Bluray hoặc 4K HDR ?

Giải pháp là gì ?

  • Hầu hết tất cả những yêu cầu đó đều được giải quyết với PLEX mà mình đã sử dụng hơn 5 năm nay.
  • Đầu tiên là Plex hỗ trợ đa nền tảng, hầu hết các thiết bị hiện nay, gần như đều có thể cài được Plex.
  • Dễ dàng cài đặt và sử dụng, nhiều tùy chọn từ đơn giản đến nâng cao.

Cần chuẩn bị những gì?

Với những người dùng bình thường không yêu cầu quá cao thì bạn có thể bỏ qua phần này.

Đầu tiên bạn phải xác định nhu cầu của bạn trước đã.

  • Bạn xem cùng lúc trên bao nhiêu thiết bị ?
  • Bạn sử dụng trong mạng LAN hay bên ngoài ?
  • Bạn sử dụng thường xuyên trên thiết bị nào ?
  • Bạn lưu trữ video HD, FullHD hay 4K ?

Ổ cứng HDD

Nếu chỉ xem Bluray 720p hoặc 1080p thì mỗi phim tầm ~10GB-20Gb. Nhưng Phim 4K thì mỗi phim cũng ngốn mất 50GB – 100GB đầu tư cho HDD cũng kha khá, may mắn là hiện tại ổ cứng giá cũng rất dễ chịu.

Bộ vi xử lý CPU

  • Nếu không chuyển mã thì chỉ cần Intel “Atom” 1.2GHz là đủ dùng.
  • Chuyển mã 720p cần: Intel Core i3 3.0 GHz
  • Chuyển mã 1080p cần: Intel Core i5 3.0GHz
  • Chuyển mã 4K cần: Intel Core i7 3.2GHz

Thông tin thêm: https://support.plex.tv/articles/201774043-what-kind-of-cpu-do-i-need-for-my-server/

Card đồ họa GPU

Đối với một số bạn có nhu cầu xem nhiều phim cùng 1 lúc trên nhiều thiết bị, do chia sẽ với nhiều người, thì đôi khi CPU không xử lý kịp để Transcoding. Vì vậy bạn cần thêm 1 card đồ họa rời để chạy “Use hardware acceleration when available“.

Chú ý: Để sử dụng được chức năng này CPU bạn phải hỗ trợ và bạn phải đăng ký Plex Pass.

Chi tiết xem tại đây: https://support.plex.tv/articles/115002178853-using-hardware-accelerated-streaming/

Tốc độ mạng NetWork.

Khi xem trên mạng LAN, Plex thường play với Video gốc tức là không cần Chuyển Mã “Transcoding”. Vì vậy nếu bạn mở 1 video 4K có “Total bitrate” ~120 Mbps với mạng tốc độ LAN thông dụng gia đình 100 Mbps thì sẽ có hiện tượng giật Lag, không xem được.

Đây cũng là lý do để mình Nâng cấp mạng gia đình lên 1Gbps.

Thông tin thêm: https://support.plex.tv/articles/200484903-internet-and-network-requirements/

Cài đặt và cấu hình

Còn tiếp….

Tổng quan về việc nâng cấp tốc độ mạng lên 1Gbps, 10Gbps

Nội dung trang

Vọc mãi cuối cũng cũng đạt đến tốc độ này => 1Gbps.

Trong khi tốc độ mạng của thế giới đang hướng đến 10Gbps và còn hơn thế nữa thì ở VN mình vẫn lẹc đẹc ở 100 Mbps và nếu như mạng internet nhà bạn có là 130Mbps thì nó vẫn chạy ở tốc độ 100Mbps.

Như mọi người biết thì 1 Byte (chữ B viết Hoa) bằng 8 bít (b viết thường).
Vậy là 100Mbps trên lý thuyết là tương đương ~12,5 MB/s.

Nếu đường truyền nhà bạn có tốc độ là 30Mbps thì tốc độ download đâu đó: 30/8 = ~3,75 MB/s

Nếu tốc độ là 60Mbps: 60/8 = 7,5 MB/s

Bạn có thể tự kiểm tra trên speedtest.net nhé.

Tốc độ 12,5 MB trên giây là cực kì chậm, nếu bạn muốn chuyển 1 file phim 4k cỡ 100 GB trong mạng LAN thì phải mất hơn 2 tiếng (100.000/12.5/60/60=2.22 giờ). Nếu mình có khoảng 200 bộ phim 4K. Vậy để chuyển hết đống này 200 bộ * 2 giờ = 400 giờ gần ~ 17 ngày, một con số khủng khiếp.

Để nâng cấp tốc độ mạng lên 1Gbps hoặc 10Gbps chắc chắn 1 điều là phải nâng cấp phần cứng.

ROUTER

Đầu tiên là ROUTER nhà mạng xem thử có hỗ trợ chưa, nhanh nhất là gọi lên tổng đài hỏi hoặc search google mã modum.

SWITCH

Tiếp theo là SWITCH, mình có 2 cái Switch mua từ mấy năm trước tất nhiên là chỉ hỗ trợ 100Mbps nên đã up lên 1Gbps.

CARD

CARD mạng hoặc cổng LAN của thiết bị đầu và cuối cũng phải hỗ trợ 1Gbps. Mình có con NAS hỗ trợ mạng 10Gbps như máy tính chỉ có 100Mbps nên nó chỉ chạy ở tốc độ 100Mbps thôi, vậy là phải Up card mạng cho máy tính.

CABLE

Tiếp đến là dây mạng CABLE phải là dây Cat5 hoặc Cat6 và bấm đúng chuẩn mới được.

Hiện tại mạng internet của VN chỉ quanh quẫn ở mức 100Mbps, nên nếu bạn không chạy nhiều trên LAN thì ko cần nâng cấp.

Riêng FPT có gói SOC hỗ trợ 1Gbps, những tiếc cái là không dành cho doanh nghiệp và cũng không hỗ trợ IP tĩnh.

Thêm 1 cách nữa để vượt qua tốc độ 100Mbps của nhà mạng mà mình đang dùng, đó là đăng ký 2 gói cước của 2 nhà mạng khác nhau, tầm 65-70Mbps như vậy khi chạy Load Balance thì bạn cũng được 130-140Mbps.

Điều này thêm cái lợi nữa là khi 1 trong 2 mạng bị đứt thì cũng có 1 line dự phòng.

Còn tiếp…

Các dòng lệnh cơ bản và nâng cao khi sử dụng Linux

I. VỚI NỘI DUNG FILE.

Xem 10 dòng đầu tiên

head -10 file-input.txt

Xem 10 dòng cuối

tail -10 file-input.txt

Xem từ dòng 10 đến dòng 20

awk 'NR >= 10 && NR <= 20' file-input.txt

Xóa dòng 10 đến dòng 20, sau đó tạo file mới

sed '1,20d' file-input.txt > file-output.txt

Xóa các dòng có nội dung là “error”, sau đó tạo file mới

sed '/^error/d' file-input.txt > file-output.txt

Tìm các dòng có nội dung là error, xuất ra màn hình là dòng nào.

grep -n error file-input.txt
grep -w "error" file-input.txt

Xem file-input.txt có bao nhiêu dòng

wc -l file-input.txt

Cắt file-input.txt ra nhiều file-output mỗi file 1000 dòng.

split -d -l 1000 file-input.txt file-output.txt

Xóa các dòng trùng nhau

sort file-input.txt | uniq > file-output.txt #sắp xếp và xóa dòng trùng nhau
uniq file-input.txt > file-output.txt # chỉ xóa dòng trùng

II. VỚI FILE VÀ THƯ MỤC

Copy một file

cp ten_file.txt ten_file_new.txt

 Xóa toàn bộ file trong thư mục

rm -rf *

Tìm file có chứa nội dung “error”

find /home -type f -exec grep -l 'error' {} \;

Tìm kiếm tên file + folder

find . error.log #tìm file có tên
find / -type d -name error #tìm thư muc có tên error

Tìm các file mới được chỉnh sửa

find / -mtime 50 #được chỉnh sửa trong 50 ngày
find / -mtime +50 –mtime -100 #được chỉnh sửa trong vòng 50 - 100 ngày
find ./ -cmin -60 #được tạo ra trong vòng 1 giờ

Tìm các file được phân quyền 444

find . -type f -perm 444

Gọp chung các file lại thành 1 file duy nhất

cat file_input1.txt file_input2.txt file_input3.txt > combined-file-output.txt

hoặc

cat *.txt > combined-file-output.txt

III. Network

Chặn truy cập từ tất cả, ngoài trừ 1 IP cụ thể

iptables -I INPUT -p tcp -m tcp –dport 3306 -j DROP
iptables -I INPUT -i eth0 -s 1.1.1.1 -p tcp –destination-port 3306 -j ACCEPT

IV. Process

Kill nhiều processes cùng lúc trong Linux

To kill all PHP Processes

kill $(ps aux | grep '[p]hp' | awk '{print $2}')

To kill all Nginx Processes

kill $(ps aux | grep '[n]ginx' | awk '{print $2}')

To kill all MySQL Processes

kill $(ps aux | grep '[m]ysql' | awk '{print $2}')

SYSTEM

Cài đặt gói

Ví dụ cài nén và giải nén zip

yum install zip

Xem dung lượng còn trống và đang sử dụng

df -h

Cấp quyền cho thư mục

chown -R nginx:nginx /home

Hoặc

chmod 777  /home 

Chỉnh sửa và xem CronTab

crontab -e

hoặc

crontab -e

Một số câu lệnh cơ bản và nâng cao MySQL

Cơ bản

Login MySQL.

mysql -u root -p

Tạo user và Database.

create database dbcuaban;
create user 'usercuaban'@'localhost' identified by 'passcuaban';
grant all on dbcuaban.* to [email protected];
FLUSH PRIVILEGES;

Tạo table.

CREATE TABLE ten_table(id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT, cot1 VARCHAR(20) NOT NULL Unique, cot2 VARCHAR(50) NOT NULL, cot3 DATETIME NOT NULL) ENGINE=InnoDB;

Chèn thêm 1 cột.

ALTER TABLE ten_table ADD COLUMN cot4 VARCHAR(300) NOT NULL;

Ghi dòng.

INSERT INTO ten_table(cot1,cot2,cot3,cot4) VALUES ('$value1','$value','$value3','$value4');

Update dòng 1

UPDATE ten_table SET cot1='$value1', cot2='$value2', cot3='$value3', cot4='$value4' where id = 1 limit 1;

Xóa dòng 1

Delete From ten_table where id = 1 limit 1;

Đếm số dòng

Select count(id) as total from ten_table;

Thêm chỉ mục Index.

ALTER TABLE ten_table ADD INDEX cot1 (cot1);

Drop Index

ALTER TABLE `Ten_Bang` DROP INDEX `Ten_cot_index`

Dump all database

mysqldump -u [uname] -p[pass] --all-databases | gzip > db_backup.sql.gz

Nâng cao.

Full text search

ALTER TABLE ten_table ADD FULLTEXT INDEX cot2 (cot2); 
SELECT * FROM ten_table WHERE MATCH(cot2) AGAINST ('keyword' IN NATURAL LANGUAGE MODE);

Hoặc

Tạo Index FULLTEXT cho các cột muốn truy vấn

ALTER TABLE `TenBang` ADD FULLTEXT INDEX `CotFullText` (`Cot1`, `Cot2`);

Truy vấn

SELECT * FROM `TenBang` WHERE MATCH(`Cot1`, `Cot2`) AGAINST ('Tim cai gi do');

Xóa dữ liệu trùng nhau của dòng.

Đơn giản là add index là unique và bỏ qua lỗi, các dòng trùng nhau sẽ tự động xóa.

ALTER IGNORE TABLE ten_table ADD UNIQUE INDEX cot3 (cot3);

Replace trong MySQL

UPDATE `ten_table`
SET cot = REPLACE (cot, 'string_search', 'string_replace')
WHERE `cot` LIKE '%dieu_kien_gi_do%'

Update String Cột 1 sang Cột 2

UPDATE `ten_table` SET `Cot2`=LEFT(`Cot1`, 10);

Update nếu trùng nhau.

INSERT INTO ten_table(cot1,cot2,cot3,cot4) VALUES ('$value1','$value2','$value3','$value4') ON DUPLICATE KEY UPDATE cot1=VALUES(cot1), cot2=VALUES(cot2), cot3=VALUES(cot3), cot4=VALUES(cot4);

Lấy danh sách hàng có giá trị trùng nhau

SELECT name, COUNT(*) c FROM table GROUP BY name HAVING c > 1;

Tối ưu Select với Table hàng triệu dòng.

Thường các truy vấn có order và limit mà số dòng trong table lên đến hàng triệu thì truy vấn rất chậm, mẹo sau đây giúp tăng tốc độ truy vấn của bạn lên gấp nhiều lần.

SELECT  t.* FROM (SELECT `id` FROM `ten_table` FORCE INDEX (ten_table) WHERE `cot1` like '$value1' ORDER BY `cot2` DESC LIMIT 0, 50) q JOIN `ten_table` t ON t.id = q.id;

Tối ưu truy vấn với Timestamp của MySQL

Bình thường khi muốn tìm những dòng có timestamp là hôm nay chúng ta thường có truy vấn như sau:

SELECT * FROM Table WHERE DATE(`timestamp`) = CURDATE();

Nếu table chỉ với vài ngàn dòng thì không sao, nhưng khi đến cả triệu dòng thì truy vấn trên hơi chậm.

Chúng ta có thể đối thành truy vấn như sau:

SELECT * FROM Table WHERE timestamp BETWEEN '2018-12-07 00:00:01' AND '2018-12-07 23:59:59';

Hoặc

SELECT * FROM Table WHERE `timestamp` >= NOW() - INTERVAL 1 DAY

Tạo cache cho MySQL Query

Tối ưu cho VPS có ít ram

mysql -u root -p

Nhập mật khẩu SQL và kiểm tra tình trạng cache hiện tại bằng lệnh

show variables like 'query_cache_%';

Kết quả trả về tương tự như sau:

+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| query_cache_limit            | 1048576 |
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 0       |
| query_cache_type             | ON      |
| query_cache_wlock_invalidate | OFF     |
+------------------------------+---------+

Chỉnh sửa trong file /etc/my.cnf (Red Hat) hoặc /etc/mysql/my.cnf (Debian)

nano /etc/my.cnf

Điều chỉnh lại theo ý bạn

query_cache_limit = 3M
query_cache_size = 128M

Sau khi thêm thì nội dung sẽ như sau:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
query_cache_limit = 3M
query_cache_size = 128M
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Khởi động lại mysql

service mysql restart

nếu bị lỗi mysql: unrecognized service thì sửa thành:

service mysqld restart

Kiểm tra lại bằng lệnh

show variables like 'query_cache_%';

Kết quả

+------------------------------+-----------+
| Variable_name                | Value     |
+------------------------------+-----------+
| query_cache_limit            | 3145728   |
| query_cache_min_res_unit     | 4096      |
| query_cache_size             | 134217728 |
| query_cache_type             | ON        |
| query_cache_wlock_invalidate | OFF       |
+------------------------------+-----------+

Dòng lệnh xem và xóa user + database

Đôi khi có những website không còn hoạt động trên máy chủ và bạn cần xóa nó đi cho nhẹ nhàng thì đây là một số lệnh cơ bản.

mysql -u root -p

trong Centminmod nếu quên pass thì gõ

cat ~/.my.cnf

nhập mật khẩu của MySQL -> nếu đăng nhập thành công thì dấu nhắc sẽ giống thế này: mysql>

Xem danh sách Database:

SHOW DATABASES;

Xóa Database

DROP DATABASE ten_database_muon_xoa;

Xem danh sách User

SELECT User FROM mysql.user;

Xóa User

DROP USER 'testuser'@'localhost';

Reset mật khẩu MySQL trong CentOS

service mysql stop
sudo mysqld_safe --skip-grant-tables &
mysql -u root
use mysql;
update user set password=PASSWORD("PUT_A_NEW_PASSWD_HERE") where User='root';
flush privileges;
exit
service mysql stop
service mysql start

Kết hợp nhiều Column thành 1 Column

Tạo 1 cột mới

ALTER TABLE TenBang ADD COLUMN TenCot VARCHAR(50);

Update dữ liệu hiện tại sang TenCot

UPDATE TenBang SET TenCot = CONCAT(Cot1, Cot2, Cot3);

Update dữ liệu trong tương lai khi có hành động Insert hoặc Update

CREATE TRIGGER insert_trigger
BEFORE INSERT ON TenBang
FOR EACH ROW
SET new.TenCot = CONCAT(new.Cot1, new.Cot2, new.Cot3);
CREATE TRIGGER update_trigger
BEFORE UPDATE ON TenBang
FOR EACH ROW
SET new.TenCot = CONCAT(new.Cot1, new.Cot2, new.Cot3);

Tổng hợp kiến thức Jquery, JavaScript

Delay khi onkeyup

//Sử dụng function này
function delay(callback, ms) {
  var timer = 0;
  return function() {
    var context = this, args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function () {
      callback.apply(context, args);
    }, ms || 0);
  };
}

//Demo bên dưới 500ms sẽ chạy Log 1 lần, Bình thường thì gõ tới đâu chạy đến đó.
$('#input').keyup(delay(function (e) {console.log('Time elapsed!', this.value);}, 500));

Checked nhiều input radio chung ID cùng lúc

jQuery(document).ready(function($) {
	$("input[id^='delete_option1']").prop("checked", true);
});

Vòng lặp Get hoặc Set tất cả giá trị cho TABLE

$('table tr').each(function() {
    $(this).find("td").text('Hello');    
 });

Hành động Checked hoặc Unchecked trong checkbox

$("#checkbox").change(function() {
  if(this.checked){      
      alert('Đã check');
   }
   else{
      alert('Đã uncheck'); 
   }               
});

Chuyển file HTML thành PDF hoặc Image với Linux

Cách 1.

yum install fontconfig libXrender libXext xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi freetype libpng zlib libjpeg-turbo
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm
rpm -Uvh wkhtmltox-0.12.5-1.centos7.x86_64.rpm

Cách 2

Cài đặt evince

yum install evince

Cài đặt wkhtmltopdf

wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

Giải nén

tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

Copy tới /usr/bin/

cp wkhtmltox/bin/wkhtmltopdf /usr/bin/

cp wkhtmltox/bin/wkhtmltoimages /usr/bin/

Lệnh chuyển HTML thành PDF

wkhtmltopdf file.html file.pdf

Lệnh chuyển HTML thành IMAGE

wkhtmltoimages file.html file.jpeg

Nguồn: https://www.tecmint.com/wkhtmltopdf-convert-website-html-page-to-pdf-linux/