เปลี่ยนรุ่นของ PHP จาก 4 เป็น 5 แล้ว script ใช้งานไม่ได้

เล่าสู่กันฟัง เรื่องปัญหาการปรับเปลี่ยนรุ่นของ server

URL กับ REQUEST_URIURL กับ REQUEST_URI
URL กับ REQUEST_URI

เนื่องจาก script ที่ใช้เคย สามารถใช้งานได้ปกติ
แต่เกิดปัญหาหลัง upgrade server
ที่ต้องใช้ PHP version ใหม่ ก็พบว่า script เดิมใช้งานไม่ได้
ตรวจดูก็พบว่าค่าของระบบ _SERVER ที่เคยส่งให้กับ script ภาษา PHP
ไม่ยอมส่งค่าให้ตามปกติ คือ ไม่ส่งอะไรคืนมาเลย
ต้องแก้ไขโดยกำหนดการรับค่าจากระบบ เป็นค่าใหม่

เดิมรับค่า “URL” ก็ต้องเปลี่ยนเป็นรับค่า “REQUEST_URI”

ซึ่งเหตุการแบบนี้เกิดขึ้นได้ในปัจจุบัน และเกิดขึ้นอีกอย่างแน่นอนในอนาคต
เมื่อต้องมีการ upgrade server ในปีต่อ ๆ ไป

ส่วนแลกเปลี่ยนความคิดเห็นของกรุงเทพธุรกิจ

bangkokbiznews comment
bangkokbiznews comment

http://bit.ly/17oaJI9

มองระบบการแสดงความคิดเห็นของเว็บไซต์กรุงเทพธุรกิจ bangkokbiznews.com
ซึ่งปกติผมเข้าไปอ่านทัศนะวิจารณ์ของ blogger หลาย ๆ ท่านอยู่เป็นประจำ
แล้วเคยแสดงความคิดเห็นต่อท้ายบทความเหล่านั้น โดยใช้ account ของ facebook.com
ก็สามารถแสดงความคิดเห็นได้

แต่ครั้งนี้ต่างออกไป
เพราะระบบนี้เปิดรับสมาชิกของกรุงเทพธุรกิจ แบบไม่ต้องใช้บัญชีเฟซบุ๊ค
แล้วการจะแสดงความคิดเห็นก็แยกกันเป็น 2 ส่วนคือ ส่วนสมาชิกเว็บไซต์ กับ สมาชิกเฟซบุ๊ค
หากแบ่งเป็นส่วนหลักก็จะเป็นดังนี้

1. เนื้อหา หรือบันทึกที่เขียนโดย blogger
2. ส่วนแลกเปลี่ยนความคิดเห็น โดยใช้บัญชีของกรุงเทพธุรกิจ
3. ส่วนแลกเปลี่ยนความคิดเห็น โดยใช้บัญชีของเฟซบุ๊ค

ซึ่งส่วนที่ 2 และ 3 แยกกันชัดเจน หากจะร่วมแลกเปลี่ยนให้สัมพันธ์กันก็ต้องเข้าไปให้ตรงส่วน

สรุปว่า .. วันนี้ก็ต้องสมัครสมาชิก เพื่อเข้าร่วมกิจกรรมกับกรุงเทพธุรกิจ
ให้ครบทั้ง 2 ส่วน .. เล่าสู่กันฟัง

ผลจัดอันดับ 100 เว็บไซต์ที่ชาวไทยเข้ามากที่สุด

thailand ranking in alexa.com
thailand ranking in alexa.com

7 เม.ย.56 ผลจัดอันดับ 100 เว็บไซต์ที่ชาวไทยเข้ามากที่สุด

http://www.alexa.com/topsites/countries;3/TH

The top 100 sites in thailand on the web by alexa.com
1 facebook.com
2 google.co.th
3 google.com
4 youtube.com
5 blogspot.com
6 yahoo.com
7 live.com
8 sanook.com
9 wikipedia.org
10 pantip.com
11 amazon.com
12 kapook.com
13 wordpress.com
14 mthai.com
15 manager.co.th
16 thaiseoboard.com
17 linkedin.com
18 msn.com
19 thaivisa.com
20 twitter.com
21 googleusercontent.com
22 weloveshopping.com
23 webgame.in.th
24 paypal.com
25 yengo.com
26 dek-d.com
27 microsoft.com
28 dealfish.co.th
29 ebay.com
30 pinterest.com
31 blogger.com
32 bing.com
33 ohozaa.com
34 hao123.com
35 google.co.uk
36 kasikornbank.com
37 bbc.co.uk
38 adf.ly
39 tumblr.com
40 bloggang.com
41 bangkokbank.com
42 4shared.com
43 settrade.com
44 instagram.com
45 thairath.co.th
46 thepiratebay.se
47 soccersuck.com
48 pantipmarket.com
49 siamsport.co.th
50 vk.com
51 imdb.com
52 truelife.com
53 mediafire.com
54 godaddy.com
55 scbeasy.com
56 apple.com
57 agoda.com
58 alibaba.com
59 bangkokpost.com
60 tarad.com
61 stackoverflow.com
62 avg.com
63 yandex.ru
64 xhamster.com *
65 statcounter.com
66 teenee.com
67 wordpress.org
68 flickr.com
69 tripadvisor.com
70 lazada.co.th
71ddproperty.com
72 kasikornbankgroup.com
73 xvideos.com *
74 google.de
75 postjung.com
76 bp.blogspot.com
77 trueinternet.co.th
78 set.or.th
79 airasia.com
80 ask.com
81 google.fr
82 matichon.co.th
83 postto.me
84 conduit.com
85 dailymotion.com
86 overclockzone.com
87 babylon.com
88 rd.go.th
89 exteen.com
90 ihere.org
91 booking.com
92 truehits.net
93 imgur.com
94 thailandpost.com
95 thailandtorrent.com
96 siambit.org
97 histats.com
98 oknation.net
99 xnxx.com
100 t.co

ผลจัดอันดับ 100 เว็บไซต์ที่ชาวโลกเข้ามากที่สุด

global ranking in alexa.com
global ranking in alexa.com

7 เม.ย.56 ผลจัดอันดับ 100 เว็บไซต์ที่ชาวโลกเข้ามากที่สุด โดย alexa.com

http://www.alexa.com/topsites/global

The top 100 sites on the web by alexa.com
1 google.com
2 facebook.com
3 youtube.com
4 yahoo.com
5 baidu.com
6 wikipedia.org
7 live.com
8 qq.com
9 amazon.com
10 taobao.com
11 twitter.com
12 blogspot.com
13 linkedin.com
14 google.co.in
15 yahoo.co.jp
16 bing.com
17 sina.com.cn
18 yandex.ru
19 msn.com
20 ebay.com
21 wordpress.com
22 google.com.hk
23 google.co.jp
24 vk.com
25 google.de
26 163.com
27 google.co.uk
28 weibo.com
29 google.fr
30 microsoft.com
31 mail.ru
32 tumblr.com
33 googleusercontent.com
34 pinterest.com
35 google.com.br
36 fc2.com
37 xvideos.com
38 ask.com
39 hao123.com
40 google.ru
41 conduit.com
42 paypal.com
43 amazon.co.jp
44 craigslist.org
45 google.it
46 xhamster.com *
47 google.es
48 babylon.com
49 tmall.com
50 apple.com
51 imdb.com
52 blogger.com
53 sohu.com
54 mywebsearch.com
55 avg.com
56 bbc.co.uk
57 odnoklassniki.ru
58 soso.com
59 google.com.mx
60 amazon.de
61 instagram.com
62 google.ca
63 go.com
64 pornhub.com *
65 ifeng.com
66 aol.com
67 delta-search.com
68 alibaba.com
69 youku.com
70 stackoverflow.com
71 adcash.com
72 360.cn
73 bp.blogspot.com
74 blogspot.in
75 adobe.com
76 thepiratebay.se
77 adf.ly
78 t.co
79 redtube.com *
80 flickr.com
81 about.com
82 rakuten.co.jp
83 cnn.com
84 ebay.de
85 alipay.com
86 neobux.com
87 google.com.au
88 sogou.com
89 livedoor.com
90 imgur.com
91 amazon.co.uk
92 google.com.tr
93 google.pl
94 dailymotion.com
95 huffingtonpost.com
96 uol.com.br
97 netflix.com
98 xnxx.com *
99 livejasmin.com *
100 youporn.com *

บทเรียนกับ stored procedure บน mysql

stored procedure
stored procedure

บทเรียนกับ stored procedure บน mysql
1. ทดสอบกับ MySQL server
version 5.5.16 ใน thaiabc.com 8.0
2. เดิม start mysql ด้วย DOS>mysqld.exe –console
แต่พบปัญหาขณะ call procedure ว่า
ERROR 1436 (HY000): Thread stack overrun:  6892 bytes used of a 131072 byte stack, and 128000 bytes needed.  Use ‘mysqld –thread_stack=#’ to specify a bigger stack.
3. แก้ไขโดย start mysql ด้วย DOS>mysqld.exe –console –thread_stack=999999

4. สร้าง procedure
use test;
delimiter //
create procedure x01()
begin
select * from student;
end//
delimiter ;
grant execute on procedure test.x01 to ”@’localhost’;
call x01();

5. สร้าง function
create function addhead(s char(20))
returns char(50) deterministic
return concat(‘- ‘,s,’!’);
select addhead(sname) from student;

6. คำสั่งที่น่าสนใจ
show create procedure xxx;
drop procedure xxx;
show procedure status;
show function status;
help show;
show procedure status where Db = DATABASE() and type = ‘PROCEDURE’;
select * from mysql.proc;
select * from information_schema.routines;

7. web guides
http://devzonedd.designweb2you.com/viewthread.php?tid=82 ***
http://code.function.in.th/sqlserver/stored-procedure ***
http://www.mssqltips.com/sqlservertutorial/160/sql-server-stored-procedure/
http://msdn.microsoft.com/en-us/library/aa174792(v=sql.80).aspx
http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx
http://dev.mysql.com/doc/refman/5.1/en/stored-routines.html
http://php.net/manual/en/mysqli.quickstart.stored-procedures.php

การติดตั้ง ob page numbers

ob page numbers
ob page numbers
สำหรับการติดตั้ง plug-in ให้มีเลขหน้าใน wordpress
ของ ob page numbers ก็ไม่ซับซ้อน
หลังติดตั้งแล้ว ก็นำ code ไปใส่ใน 3 หน้า แทนจุด previous และ next เดิม
ดังภาพ

sharethis.com within wordpress script

sharethis within blog
sharethis within blog

การใช้บริการ share button ของ sharethis.com ซึ่งใช้ login account ของ facebook.com เพื่อนำบริการไปฝังเข้า (embedded) blog ที่ใช้ wordpress script
ซึ่งได้ code ของ sharethis ที่ได้มา ได้จากการคลิ๊ก other ShareThis Widgets, Website, Sharing buttons, Finish get the code, Multi Post

ใน wordpress script
– แก้ไข header.php
– แก้ไข footer.php

statistic in sharethis.com
statistic in sharethis.com

http://support.sharethis.com/customer/portal/articles/517333-analytics-faqs

ค่าใน _SERVER[“REQUEST_URI”] เปลี่ยนไปใน PHP 5.2.6

PHP 5.2.6 & PHP 4.4.9
PHP 5.2.6 & PHP 4.4.9

พบปัญหาใน script : managefile.php ที่ให้บริการจัดการแฟ้มแบบออนไลน์ หลัง upgrade server ตัวหนึ่ง แบบย้ายเครื่องแล้ว clone ข้อมูล มีการติดตั้ง webserver version ใหม่ พบว่าความสามารถในการกำหนดรหัสผ่านใหม่ ซึ่งใช้เทคนิคการ encrypt + password embedded + replace script โดยใช้ค่าที่รับจากตัว script เอง .. กลับใช้งานไม่ได้ แล้ว script ตอบมาว่าติดปัญหา security ไปตรวจดูก็พบว่าค่าของ  $_SERVER[“REQUEST_URI”] ของ PHP 5.2.6 ต่างไปจากเดิม แก้ไขโดยเปลี่ยนจาก $_SERVER[“REQUEST_URI”] เป็น  $_SERVER[“SCRIPT_NAME”]

http://thaiwebsearch.hypermart.net/perlphpasp/source.pl?9102

ปล.ต้องหาเวลาเข้า upgrade script แล้ว

วันนี้พบปัญหา editor ไม่ refresh เมื่อ paste ข้อมูลที่มี chr(10)

line feed was hidden in editplus when i paste data from excel cell
line feed was hidden in editplus when i paste data from excel cell

เล่าสู่กันฟัง

– เหตุเกิดจากพัฒนา thaiall.com/research/glossary.php และ glossary.xlsx
– โดยเริ่มทำข้อมูลใน excel 2010 แล้วมีบาง cell ที่ใส่ข้อมูลเป็น \n หรือ chr(10) หรือรหัสตัดบรรทัด
– แล้วคัดลอกทั้งหมดไปวางใน editplus 2 ซึ่งวางข้อมูลทั้งหมดเข้าไปในตัวแปรตัวหนึ่ง
– แล้ว split ด้วย \n ปรากฎว่าผลการแยกไม่ถูกต้อง จึงสงสัยว่าข้อมูลหลังวางแล้วเป็นอะไรกันแน่ใน glossary.php
– เมื่อมองด้วย debug ถึงทราบว่า editplus ไม่ refresh
– ถ้า refresh ก็ต้องมีการตัดบรรทัดหลัง paste ข้อมูลที่มี chr(10) ลงไป
– เมื่อปิดโปรแกรม editplus แล้วเปิดใหม่ ก็พบว่าข้อมูลมีการปัดบรรทัดในตำแหน่งที่สงสัยจริง
– ทำให้ทราบว่าข้อมูลที่ paste จาก excel จะทำให้เกิดการปัดบรรทัด แต่ไม่แสดงผลในทันทีบน editplus 2
– จึงแก้ไขด้วยการเติมอักษรพิเศษที่ cell แรกของระเบียน แล้ว split ตามอักษรพิเศษนั้นแทนการใช้ \n
– ผมเลือก 255 เพราะไม่คิดว่า text ธรรมดาจะต้องใช้อักษรนี้

เพิ่มเติม

เหตุที่ไม่ใช้ระบบฐานข้อมูล ก็เพื่อให้เพื่อน ๆ ที่สนใจข้อมูล สามารถ  download glossary.xlsx ไปใช้ต่อยอดได้ การกรอกข้อมูลก็สะดวกผ่าน excel จะย้ายไปประมวลผลบน server ตัวใดก็ทำได้ทันที  หรืออาจมีเพื่อนมาช่วยปรับข้อมูลก็สามารถทำได้ง่าย ไม่ต้องคิดเรื่อง import , export ให้ซับซ้อน

การตรวจรหัสผ่านใน ldap server

apache directory studio : ldap server & client
apache directory studio : ldap server & client

http://directory.apache.org/studio/

ได้รับโอกาสจากคุณหนึ่งให้หาวิธีการตรวจสอบรหัสผ่านกับ ldap server ด้วย php
ซึ่งรหัสผ่านในเครื่องบริการถูกเข้ารหัสแบบ {SHA} ซึ่งเป็นการเข้ารหัสทางเดียว แบบคงที่
การตรวจสอบทำโดยเข้ารหัสผ่านของเรา แล้วส่งไปเปรียบเทียบรหัสที่ถูกเข้ารหัสไว้ว่าตรงกันหรือไม่
หากใน shell ของ linux สามารถใช้ # slappasswd -h {SHA} -s mypassword
สร้างรหัสผ่านที่ได้รับการเข้ารหัส
แต่ถ้าเป็น PHP ต้องใช้ $e =  base64_encode( pack( “H*”, sha1(“mypassword”)));
ตัวอย่าง code นี้เข้าไป scan ใน directory ต่าง ๆ เพราะไม่ทราบว่า user นี้อยู่ในกลุ่มใด

// verify user & password in ldap server
$ldap = ldap_connect(“127.0.0.1”,389);
$b = ldap_bind($ldap,”uid=sombat”,”loveyou”) or die(“bind died”);
//
$arr = array(
“ou=LAMPANG,ou=STAFF,ou=TEAM_A”,
“ou=LAMPANG,ou=MANAGER,ou=TEAM_A”,
“ou=BANGKOK,ou=STAFF,ou=TEAM_A”,
“ou=BANGKOK,ou=MANAGER,ou=TEAM_A”,
“ou=LAMPANG,ou=STAFF,ou=TEAM_B”,
“ou=LAMPANG,ou=MANAGER,ou=TEAM_B”,
“ou=BANGKOK,ou=STAFF,ou=TEAM_B”,
“ou=BANGKOK,ou=MANAGER,ou=TEAM_B”);
foreach ($arr as $key => $value) {
$dn = ‘uid=’. $_REQUEST[“uid”] .’,’.$value.’,dc=abc,dc=com’;
$result = ldap_search($ldap, $dn,”(uid=*)”,array(“uid”,”userpassword”));
$rec = ldap_get_entries($ldap,$result);
$encoded = “{SHA}” . base64_encode( pack( “H*”, sha1($_REQUEST[“pass”]) ) );
if (isset($rec[0][“userpassword”][0]) && $rec[0][“userpassword”][0] == $encoded) {
echo “<meta http-equiv=’refresh’ content=’0;url=http://www.abc.com/pass.php’ />“;
exit;
}
}
ldap_unbind($ldap);
header(“location: http://www.abc.com/login.php“);