• Skip to main content

MrHói's Blog

The simple is the best

You are here: Home / Archives for Hệ thống

Hệ thống

Ký sự con ma – phần 01

September 17, 2013 by mrhoi Leave a Comment

Được sếp giới thiệu bộ ký sự này, tôi quyết định copy về blog của mình để sau này nghiền ngầm tiếp, chắc chắn là sẽ có ích cho tôi trong tương lai… bài học đầu tiên, theo dõi các Request liên quan đến dữ liệu POST

Dấu hiệu

Mấy tuần lễ gần đây, đột nhiên lượng tải trên máy chủ HVA tăng vọt trong khi số lượng thành viên chính thức truy nhập diễn đàn vẫn ở mức bình thường. DoS? hay DDoS? Lượng tải này tăng vọt khá đều đặn vài giờ trong mỗi ngày. Lượng thành viên gia tăng nên có quá nhiều người cùng truy cập? không phải. HVA đang có đề tài gì hấp dẫn nên thiên hạ ùn ùn kéo vào? cũng không phải.

Dấu vết

Tôi nhận công tác điều tra và xử lý tình trạng bất bình thường này, trong đầu đã phần nào đoán sự thể do DoS. Khuya ngày 10 tháng 10, tôi log vào server của HVA và tạo ra vài console, mở ra vài cái đuôi -1-, làm một ấm trà và ngồi đó nhâm nhi… một mình. Không cần phải đợi lâu, hàng loạt thông tin từ log của web server hiện lên màn hình với một số chi tiết rất lý thú:

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

211.199.192.157 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iebar)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)”

80.170.198.46 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1617 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)”

81.66.147.0 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1615 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)”

211.199.192.157 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iebar)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1614 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

24.17.150.114 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1504 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1614 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)”

81.66.147.0 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1615 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

80.170.198.46 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1617 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1614 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)”

211.199.192.157 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iebar)”

211.199.192.157 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iebar)”

24.17.150.114 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1504 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3”

81.66.147.0 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1615 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1614 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

80.170.198.46 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1617 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)”

211.199.192.157 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iebar)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

211.199.192.157 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iebar)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1619 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FunWebProducts)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

203.162.3.148 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1614 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)”

81.66.147.0 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.1” 200 1615 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)”

210.245.31.246 – – [10/Oct/2004:06:57:19 -0400] “POST /forum/ HTTP/1.0” 200 1618 “-” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”

24.17.150.114 – – [10/Oct/2004:06:57:20 -0400] “POST /forum/ HTTP/1.1” 200 1504 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3”

Chà, chẳng lẽ thành viên “hối hả” kéo vào diễn đàn và “POST” bài nhiều đến vậy sao? hai mươi lăm cái “POST” trong một giây từ một vài IP? Cứ cho là hợp lệ vì thành viên ở VN đi ra Internet, qua cùng một cửa ngõ -2- là chuyện bình thường. Nhưng, hẵng đã, vừa rồi lại có một chùm đến hơn năm mươi cái “POST” đi đến trong một giây, cũng từ các IP như trên. Bất thường hay bất tường?

Tôi để yên mấy “cái đuôi” chạy trên mấy console và mở trình duyệt của mình lên, thử log vào HVA bằng nickname và password của tôi để xem thử “thái độ” POST từ máy của tôi có tương tự như những cái POST tôi nhận được vài chục giây trước đây (xác thực là bạn của nghề phân tích). Cha chả, cái POST của tôi nhìn hợp lệ hơn nhiều:

xxx.xx.xxx.98 – – [10/Oct/2004:07:11:25 +0900] “POST /forum/act_Login_CODE_01.html HTTP/1.0” 200 7405 “http://www.hvaonline.net/forum/act_Login_CODE_00.html” “Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040510”

Tôi thử mở “cái đuôi” của firewall log trên server xem có gì hấp dẫn không. Chà, log của web server vẫn “POST” vào ầm ầm nhưng firewall log thì vẫn im ắng như đỉnh Himalaya. Thôi rồi, chắc đây là một “kiểu chơi” rất hợp lệ nên firewall cho phép chúng vào thả cửa. Tôi gởi nhanh một PM đến JAL, nhờ lão phóng cái sniffer lên để “hít” -3- một ít gói tin và lưu lại một nơi thích hợp dùm tôi. Đêm đã khuya, tôi phải đi ngủ để mai còn đi làm. Sáng mai sẽ copy mớ gói tin đã được lưu và sẽ phân tích xem sự thể ra sao.

Phân tích

Ngày 11/10

Trên tàu lửa đến sở làm, tôi hăm hở mở laptop ra và bắt tay vào xem xét thông tin “bắt” được tối hôm qua. Chuyện đầu tiên đập vào mắt tôi là kích thước hồ sơ đã sniff, chà, sao nó bé tí tẹo vậy nhỉ? Sáng nay lúc tôi log vào HVA server để copy hồ sơ này, tôi đã không để ý đến kích thước (vì cứ nghĩ nó phải ít nhất là vài megabytes), tôi chỉ chạy lệnh scp và bỏ đó rồi đi thay đồ đi làm. Lúc này mới nhận ra là nó bé tí tẹo, không biết có gì trong này.

Tôi dùng Ethereal mở hồ sơ này ra, và…. đúng như dự phỏng, Ethereal phàn nàn “stream not completed”. Tôi bật cười và tự nhủ: “chà, chắc lão JAL sợ nó sniff lâu quá thành một hồ sơ khổng tượng nên chỉ sniff một, hai giây rồi tắt liền”. Thông tin “bắt” được từ sniffer quá ít, chỉ vỏn vẹn hơn mười dòng, trong đó có được một cái SYN -4-, một cái ACK,PSH từ một segment khác, một cái HTTP (POST) cộng thêm vài cái “continuation” từ các segment trước và sau cái SYN ở trên không thấy gì đi theo.

Xếp laptop lại, tôi trầm ngâm vài phút, có vài chi tiết cần xem lại trong mớ packets ngắn ngủi mà lão JAL đã cung cấp. Tôi lại mở laptop ra và đi xuyên qua mười mấy mảnh packets rời rạc. Không thể “gom” các packets này thành một stream hoàn chỉnh, tôi đành xem xét từng mảnh một lần nữa. Điểm lý thú đập ngay vào mắt tôi khi dò đến http packet chứa mảng đầu của phần “POST”. Cha chả, POST cái gì mà lắm thế?

– payload -5-

Chú thích

-1- “tail”, một lệnh dùng để liên tục chuyển thông tin của log lên console để theo dõi.

-2- “gateway”, cửa ngõ đi ra / đi vào giữa 2 network.

-3- “sniff”, động tác hít nói theo tính sinh hoá, động tác “bắt lấy” các gói tin đi xuyên qua đường dẫn nói theo tinh thần điện toán.

-4- “SYN, ACK, PSH….” là các tcp flags được dùng trong giao thức TCP.

-5- payload là dữ liệu trong gói tin (nói trên bình diện “mạng”).

-6- ampersand (&) là dấu “và” trên keyboard.

Filed Under: Hệ thống Tagged With: 'post', bắt lấy, cái đuôi, CODE, continuation, Dấu hiệu, Dấu vết, FunWebProducts, gateway, hối hả, HTTP, Invision Board, kiểu chơi, mạng, MSIE, NET CLR, phân tích, sniff, stream not completed, tail, thái độ, WINDOWS, Windows NT

Khắc phục việc treo wordpress khi chưa kịp thực hiện các lệnh pingback hoặc trackback

July 15, 2013 by mrhoi Leave a Comment

Trong khi sử dung wordpress, với dữ liệu khổng lồ hằng ngày đổ vào hệ thống, kết hợp với khả năng pingback và trackback tự động của WordPress, nột điểm khá thú vị của WordPress và tốt cho SEO, nhưng cũng đem lại phiền toái không nhỏ với người quản trị hệ thống.

Vậy có vấn đề gì xảy ra, tôi không muốn nói tới việc bạn để WordPress chạy Cron Job khi người dùng truy cập website… kể cả khi bạn đã tắt tình năng này và sử dụng chạy WordPress Cron Job thủ công với crontab trên Unix (nếu bạn chưa tôi ưu hiệu xuất của wordpress theo cách này… hãy đón chờ bài viết giời thiệu tính năng này trên blog của tôi trong một vài ngày tới nhé).

Trở lại với tình huống trên, thú thật là khi chuyển đổi Server cho ứng dụng của mình, tôi đã quên bật Crontab thực hiện chức năng chạy thủ công, để thực hiện các CronJob của WordPress… nên hệ thống của tôi xảy ra tình trạng tồn đọng các lệnh pingback và trackback cần thiết phải xử lý. Tất nhiên khi tôi nhớ ra điều này thì khối lượng lệnh tồn đọng đã chiếm một số lượng rất lớn. Hệ thống của tôi trở nên ỳ ạch mỗi khi crontab thủ công kia tiến hành.

Và sau đây là đoạn mã nguồn tôi tìm được và tiến hành xử lý trong file wp-includescomment.php

function do_all_pings() {

global $wpdb;

// Do pingbacks

while ($ping = $wpdb->get_row(“SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = ‘_pingme’ LIMIT 1″)) { delete_metadata_by_mid( ‘post’, $ping->meta_id ); pingback( $ping->post_content, $ping->ID ); }

// Do Enclosures

while ($enclosure = $wpdb->get_row(“SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = ‘_encloseme’ LIMIT 1”)) { delete_metadata_by_mid( ‘post’, $enclosure->meta_id ); do_enclose( $enclosure->post_content, $enclosure->ID ); }

// Do Trackbacks

$trackbacks = $wpdb->get_col(“SELECT ID FROM $wpdb->posts WHERE to_ping ” AND post_status = ‘publish'”);

if ( is_array($trackbacks) )

foreach ( $trackbacks as $trackback )

do_trackbacks($trackback);

//Do Update Services/Generic Pings

generic_ping();

}

Các bạn chú ý những dòng được bôi đậm, hệ thống sẽ tiến hành thực hiện hàng trăm, ngàn câu lệnh tìm kiếm những bản ghi phù hợp, ghi nhận việc phải pingback / trackback để thực hiện… Giải pháp của tôi là bắt hệ thống xử lý dần dần với việc giới hạn lại số lượng post cần xử lý mỗi khi thực hiện… ở đây tôi lấy luôn số lượng post hiển thị ở trang chủ làm giới hạn của việc này. Thực tế nếu hệ thống của bạn chạy thường xuyên thì việc trên không dẫn đến việc nghẽn hệ thống… nhưng nếu bạn gặp trường hợp giống tôi… hi vọng bạn có thể tham khảo các xứ lý này.

function do_all_pings() {

global $wpdb;

// get limit of post per page

$limit = get_option(‘posts_per_page’, 10);

$limit = $limit * 50;

// Do pingbacks

$pings = $wpdb->get_results($wpdb->prepare(“SELECT meta_id, post_id FROM {$wpdb->postmeta} WHERE meta_key = ‘_pingme’ LIMIT %d”, $limit));

if (is_array($pings)) {

foreach ($pings as $ping) {

$post_id = $ping->post_id;

$post = get_post($post_id);

delete_metadata_by_mid( ‘post’, $ping->meta_id );

//pingback( $ping->post_content, $ping->ID );

pingback( $post->post_content, $post->ID );

}

}

// Do Enclosures

$enclosures = $wpdb->get_results($wpdb->prepare(“SELECT meta_id, post_id FROM {$wpdb->postmeta} WHERE meta_key = ‘_encloseme’ LIMIT %d”, $limit));

if (is_array($enclosures)) {

foreach($enclosures as $enclosure) {

$post_id = $enclosure->post_id;

$post = get_post($post_id);

delete_metadata_by_mid( ‘post’, $enclosure->meta_id );

//do_enclose( $enclosure->post_content, $enclosure->ID );

do_enclose( $post->post_content, $post->ID );

}

}

// Do Trackbacks

$trackbacks = $wpdb->get_col($wpdb->prepare(“SELECT ID FROM $wpdb->posts WHERE to_ping ” AND post_status = ‘publish’ LIMIT %d”, $limit));

if ( is_array($trackbacks) )

foreach ( $trackbacks as $trackback )

do_trackbacks($trackback);

//Do Update Services/Generic Pings

generic_ping();

}

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

Filed Under: Hệ thống, Wordpress Tagged With: 'post', 'posts_per_page', AND post_status = 'publish', Cron Job, CronJob, Do Enclosures, Do Trackbacks, Do Update Services, dPress Cron Job, FROM, Generic Pings, LIMIT, post_content, SELECT, SELECT ID, SELECT ID FROM, WHERE, Wordpress Cron Job

Tại sao chúng ta thích sử dụng các dịch vụ trực tuyến miễn phí?

May 31, 2012 by mrhoi Leave a Comment

Dạo qua một vòng, tôi thấy một số website, blog mà tôi thích hiện tại cái còn cái không? Có thể do chủ nhân không có thời gian chăm sóc, hoặc không đủ kinh phí để duy trì. Cũng giống như việc sử dụng email, thì tôi cũng có thói quen sử dụng email miễn phí có các công việc quan trọng? Vậy có vấn đề gì không nhỉ?

Đặt ngược lại vấn đề một chút, các dịch vụ miễn phí trên internet chủ yếu của nước ngoài, họ không thu của chúng ta một đồng nào mà lấy nguồn thu từ những nhà quảng cáo, dịch vụ tốt là duy trì và phát triển tốt nền tảng để phục vụ số người sử dụng internet ngày càng tăng như hiện nay. Nếu dịch vụ đủ tốt, số lượng người dùng đủ nhiều, việc duy trì và phát triển nó là tất yếu, chúng sẽ cho ta cảm giác email đó sẽ tồn tại mãi mãi, thay vì email của công ty hoặc cá nhân đứng ra mua một domain và sử dụng làm thông tin liên lạc qua email.

Vậy có nên sử dụng email miễn phí? Câu trả lời của tôi là nên? Nhưng… nếu bạn có xây dựng một dịch vụ online, đủ tốt để duy trì nó hàng năm, bạn nên đăng ký một domain quốc gia mình đang sinh sống, để tạo một email riêng cho mình bằng bất kỳ hình thức nào, tự cài đặt Mail Server trên máy chủ hoặc Hosting cá nhân, hay đơn giản hơn là sử dụng Google Apps. Vậy sẽ có lợi gì? Hãy tin rằng ở một giá trị tuyệt đối nào đó, domain bạn đang nắm trong tay có đầy đủ giấy tờ, cơ sơ pháp lý, và quan trọng hơn không ai có thể cướp domain đó khỏi tay bạn khi nó không động chậm đến quyền lợi về bản quyền… mà có điều đó đi chăng nữa thì domain của bạn cũng đáng giá lắm chứ? Trở lại phân tích tiếp ưu điểm khi sử dụng email có “đuôi” của riêng bạn:

  1. Bạn sẽ không bao giờ bị mất tài khoản email, bời vì email đó được bảo hộ bởi quốc gia bạn sinh sống, hacker có thể chiếm quyền quản lý tài khoản email ở máy chủ này, nhưng bạn có thể chuyển qua sử dụng máy chủ hoặc dịch vụ email khác với domain của mình
  2. Khi sử dụng email này với đối tác, họ sẽ thấy bạn chuyên nghiệp, ít ra là thấy bạn thật sự nghiêm túc trong công việc hiện tại của mình.
  3. Với domain riêng, bạn lúc nào cũng có thể truyên thông cho thương hiệu của bạn, bất kỳ khi nào… với một phong cách vô cùng tế nhị và không lộ liễu.

Trên đây tôi nghĩ đã có đủ một số động cơ để bạn bắt đầu tiến hành sử dụng email của riêng mình rồi đấy. Còn tôi, có lẽ tôi vẫn sẽ sử dụng email Miễn phí, nhưng với những công việc quan trọng có lẽ tôi nên sử dụng email riêng của mình.

Filed Under: Hệ thống, Suy nghĩ Tagged With: đuôi, Google Apps, Mail Server

Khắc phục lỗi vượt quá số lượng kết nối khi Remote Desktop

August 29, 2011 by mrhoi Leave a Comment

Nếu bạn đã từng quản trị Server Window chung cùng với đồng nghiệp, thì chắc chắn sẽ có một vài lần gặp rắc rồi khi đồng nghiệp quên không logoff hoặc có logoff nhưng hệ thống không ngắt kết nối, hệ lụy là khi bạn muốn remote để điểu khiển Server thường sẽ gặp thông báo đáng ghét sau.

The terminal server has exceeded the maximum number of allowed connections

Vậy lúc đó chúng ta phải xử lý ra sao? Đơn giản nhất là “rút điện” và restart lại Server, nhưng thường sẽ tới nơi đặt Server cắm thiết bị và truy cập bình thường. Nhưng có một giải pháp tốt hơn tôi đã được một đồng nghiệp gợi ý cách đây 5 năm, chưa biết cụ thể là gì cả, nhưng biết là có giải pháp, hôm nay gặp tình trạng trên nên cố gắng tìm giải pháp đó trước khi phải lọ mọ xuống DC.

Hóa ra cũng đơn giản ngoài sức tưởng tượng của tôi, bí quyết nằm ở dòng lệnh sau, tôi muốn ghi lại và chia sẻ cho những ai cũng có thể gặp những rắc rối giống mình.

mstsc /v:000.000.000.000 /f -console

Tất nhiên dãy số 000.000.000.000 cần được thay đổi là chính IP của Server / Client bạn đang muốn truy cập.

Filed Under: Hệ thống Tagged With: Console, Remote Desktop, Remote Desktop Nếu, rút điện, Server Window

Khắc phục tình trạng không hiển thị phân trang trên WordPress với Hostgator

August 26, 2011 by mrhoi 3 Comments

Nếu bạn là người đã sử dụng wordpress trên hostgator, cũng ngịch ngầm và chỉnh sửa các thông số của PHP, thì rất có thể sẽ gặp tình trạng giống như tôi. Một ngày đẹp trời hệ thống vẫn chạy bình thường nhưng không thể tìm thấy các trang tiếp theo để click. Nguyên nhân ở đâu?

Sau một buổi tối ngồi hỳ hục tìm hiểu chỉnh sửa, tôi đã hiển thị được số trang cần theo một cách nông dân là debug từng dòng lệnh. Nhưng để rồi có một kiến thức mới hay ho không kém. Cái tội là WordPress sử dụng hàm FOUND_ROWS() để tính số lượng bản ghi nếu không có giới hạn LIMIT. Nhược điểm chính của việc này là dòng lệnh trên phải được xử lý ngay sau khi câu SELECT được thực hiện.

Tại sao hệ thống lại chạy không chỉnh xác khi tôi thay đổi config của PHP, lý do là tôi muốn kiểm tra hệ thống sẽ hoạt động ra sao khi vận hành, việc cần biết đó là nó truy vấn tới database ra sao. Tôi đã chỉnh sửa một số thiết lập của PHP trong đó có mysql.allow_persistent, điều này đã làm cho câu lệnh FOUND_ROWS() luôn trả về giá trị là 1, vì đơn giản sau khi thực hiện lệnh hệ thông sẽ truy vấn thêm log của MySQL ghi ra log file, tất nhiên những truy vấn này đều có 1 kết quả trả về.

Tiếp đó hệ thống của WordPress luôn tín sai và duy nhất chỉ có một trang. Cả buổi tối ngày hôm đó tôi loay hoay và cũng chỉnh sửa được bằng cách viết 1 hàm hook vào wordpress để thay đổi cách thức tính số trang, không sử dụng FOUND_ROWS() nữa. Các bạn gặp trường hợp trên tạm thời muốn chạy có thể sử dụng hàm này:

add_filter(‘found_posts_query’, ‘wpspider_fix_max_num_pages’);

function wpspider_fix_max_num_pages ($query) {

global $wp_query;

if ($query == ” || $query != ‘SELECT FOUND_ROWS()’) return $query;

$query = $wp_query->request;

$query = preg_replace(‘/SELECT\s.+\sFROM/’, ‘SELECT 1 as id FROM’, $query);

$query = preg_replace(‘/LIMIT\s.+$/’, ”, $query);

$query = preg_replace(‘/ORDER\s+BY\s.+$/’, ”, $query);

$query = sprintf(‘SELECT SUM(id) FROM (%1$s) as `count` ‘, $query);

return $query;

}

Hơi ngu ngốc một chút vì thỉnh thoảng hệ thống có phun ra một số log error query vì câu lệnh SQL không chính xác, nhưng sẽ là tạm đủ khi bạn vừa muốn debug hệ thống vừa muốn hệ thống hoạt động bình thường.

Filed Under: Hệ thống, Lập trình, Wordpress Tagged With: 'found_posts_query', 'SELECT 1 as id FROM', 'wpspider_fix_max_num_pages', FOUND, FROM, Hostgator Nếu, LIMIT, ORDER, ROWS, SELECT, SELECT FOUND, SELECT FOUND_ROWS, SELECT SUM, wordpress

  • « Go to Previous Page
  • Go to page 1
  • Go to page 2

Copyright © 2026 · Revolution Pro on Genesis Framework · WordPress · Log in