มี ที่ นี่

พล ส้ม's Blog

Archive for the ‘linux’ Category

Invalid command ‘\xef\xbb\xbfOptions’, perhaps misspelled or defined by a module not included in the server configuration

No Comments »

September 4th, 2009 Posted 5:14 pm

ย้ายงานมาเครื่ใหม่เพราะ vista นั้นได้ expire ไปเสียแล้ว 555 ก็เลยลง ubuntu ซะ เล่นซะวุ้บๆ ว๊าบๆ เลย แตงอยู่พักนึงเหมือนไม่งั้นมันก็รกตา ตามงั้น

วันนี้เจอปัญหาใหม่นั่งงงพักนึงเลยคือ

Invalid command ‘\xef\xbb\xbfOptions’, perhaps misspelled or defined by a module not included in the server configuration

งงกับตัวเอง ควานหาอยู่มันเป็นอะไรแล้วเป็นกับ .htaccess ซึ่งก็ไม่น่าจะมีอะไรเพราะ mod rewrite ก็เปิดใช้งานแล้ว นั่งงงอยู่พัก จนมารู้ว่า อ้าาาาาา Encode เองสาดดด

แค่เขียน file ใหม่เนื้อหาเดิมก็หายและ ลองเอาไปใช้กันดูถ้าเจอนะ

Tags: , ,
Posted in linux

ซ่อม database mysql

No Comments »

July 1st, 2009 Posted 12:53 pm

เมื่อวานถึงกับมึน ว่าอยู่ๆ มันก็พังไปซะงั้น ทั้งๆ ทั้ก็ไม่ได้ทำอะไรนี่นา T_T

เริ่งเกิดที่ http://www.thaihosttalk.com/index.php?topic=20692.0 นี่ครับ

นั่งทำนานแสนนานกับ mysql ตกลงแล้ว database พัง แล้วไปพังที่ใหนรู้ใหมครับ mysql.user ให้ตายซิ run mysql ก็ไ่ม่ได้

พี่ไก่ thaitumweb เลยให้ซ่อมซะคือ

myisamchk -r user.MYI

ได้ครับ โหคราวนี้ ซ่อมหมดเลยดังนี้

myisamchk -r /var/lib/mysql/*/*.MYI

ไปหลาย database เลย อะไรมันจะซวยปานนี้ ใครที่ทำกันกันตรวจกันบ่อยๆนะ

เข้าใจ sphinx full text search engine

1 Comment »

March 13th, 2009 Posted 3:01 pm

จากที่เคยเกริ่นเรื่องเกี่ยวกับ sphinx full text search ไปแล้วทีนึง คราวนี้เรามาดูวิธีและหลักการทำงานของ full text search กัน

full text search engine นั้นจะทำงานในลักษณะของการทำ data ที่มาจากที่เรา config ไว้ มาทำเป็น index เฉพาะแบบของ fulltext search นั้นๆ ซึ่งแต่ละตัวก็จะไม่เหมือนกัน บางที่อาจจะไม่ได้ใช้แนวคิดนี้ แต่เห็นหลายๆ ที่จะเป็นแบบนี้ เพื่อให้สามารถ ค้นหาข้อมูลในรูปแบบของตัวเองได้

sphinx ก็เช่นเดียวกัน เราจะต้อง config ว่าให้ seletct ส่วนใด มาทำเป็น เนื้อความสำหรับ search ได้บ้าง หลังจากนั้นเราก็ตั้งใช้คำสั่งสร้าง index ขึ้นมา sphinx ก็จะสร้าง index ของตนเองขึ้นมา ให้สามารถทำการ search ได้ง่ายตามรูปแบบที่ตั่งไว้

การใช้งาน search นั่นเวลาจะใช้งานจึงต้องเขียนออกมาเป็นอีกส่วน ในส่วนใหญ่แล้วโปรแกรมพวกนี้ก็จะเปิด port อีก port ไว้เลยเป็นของตนเองอย่าง sphinx เองก็เปิด port ไว้เหมือนกัน ซึ่งตอนที่รัน เราก็สามารถ config ลงไปได้ด้วยว่าอยากจะเปิด port อะไีร เวลาสร้าง connection ก็ต่อมาที่ port นั้นๆที่ตั้งไว้

Sphinx เองเปิด port 3312 เป็น default ดูได้จาก sphinx.conf

# IP address to bind on
# optional, default is 0.0.0.0 (ie. listen on all interfaces)
#
# address                = 127.0.0.1
# address                = 192.168.0.1

# searchd TCP port number
# mandatory, default is 3312
port                = 3312

full text search engine ส่วนใหญ่จะมี library สำหรับติดต่อกับตัวเองพร้อมทั้ง reference มาให้อยู่แล้วเพื่อความสะดวกในการใช้งาน sphix ก็มีเช่นกัน คือ folder api ที่มาพร้อมๆ กับตัวที่ download มาติดตั้งแหละ มีทั้ง ภาษา PHP, ptyhon, ruby และ java เลยทีเดียว

รวมทั้งยังมี reference การใช้งานอีกด้วยที่ http://www.sphinxsearch.com/docs/current.html#api-reference

จากการที่เราทำ index ครั้งนึงเราก็จะ search ได้เพียงสิ่งที่เรานั่นสร้าง index ไป ดังนั้นเราก็ต้องทำ index เรื่อยๆ เช่นการทำ cronjob ของ indexer เป็นต้น

แต่การทำ cron ก็จะได้ ข้อมูลในการ search ไม่เป็นปัจจุบันเสมอ แต่จะ search ไปตามช่วงเวลาแทน  sphinx เองก็มี mode ในการทำทั้ง merge index หรือการสร้าง index เสมอทุกๆ การใช้งาน ก็เอาไว้ต่อกันทีหลังแล้วกันนะ

sphinx full text search engine

1 Comment »

March 10th, 2009 Posted 1:41 pm

วันนี้ทำงานสบายๆ ก็เลยมาเขียนซะหน่อย ห่างหายไปจาก blog นานๆ แล้ว ที่จะพูดถึงวันนี้ก็คือ fulltext search

ช่างเป็นอะไรที่ กิน performance เครื่องสุดๆ ลองคิดถึง algorithm ง่ายของ LIKE ใน SQL นะ

1 record ก็จะมีั text เช่น ’some text’
แล้วเราก็หาคำว่า ‘me’ ใน text นี้ มันก็ต้องหา so, om, me แล้วก็เจอ ลองคิดดูว่ามันจะหาไปกี่ที
แน่นอนว่า วิธีนี้มันโง่และทึ่มมาก เพราะทำงานธรรมดาสุดๆ คือ เทียบกันไปเรื่อยๆ การทำงานจึงเป็น loop ไป เรื่อยๆ แต่ปัจจุบันนั้นก็มีคนศึกษาเรื่องนี้และได้คิด algorithm ออกมาเพื่อที่จะจัดการกับ full text search อีกมาก บาง algorithm ก็ได้รับความนิยม จนไปสู่การนำมาใช้งานจริง
.
sphinx ก็เป็นอีก 1 ตัวที่ได้รับความนิยมอยู่ในขณะนี้ เพราะด้วย performance และการใช้งานนั้นง่าย รวมทั้งยังเป็น Open Source อีกด้วย ทำให้เปิดโลกกว้างการการเพิ่มเติมและการนำไปใช้ด้วย

sphinx search นั้นมี feature หลักคือ

  • high indexing speed (upto 10 MB/sec on modern CPUs)
  • high search speed (avg query is under 0.1 sec on 2-4 GB text collections)
  • high scalability (upto 100 GB of text, upto 100 M documents on a single CPU)
  • supports distributed searching (since v.0.9.6)
  • supports MySQL natively (MyISAM and InnoDB tables are both supported)
  • supports phrase searching
  • supports phrase proximity ranking, providing good relevance
  • supports English and Russian stemming
  • supports any number of document fields (weights can be changed on the fly)
  • supports document groups
  • supports stopwords
  • supports different search modes (“match all”, “match phrase” and “match any” as of v.0.9.5)
  • generic XML interface which greatly simplifies custom integration
  • pure-PHP (ie. NO module compiling etc) search client API

ซึ่งถ้าอ่านดีๆ แล้วก็จะเห็น performance นั้นสูงทีเดียวและสามารถใช้งานได้ง่ายด้วย API และยัง support กับ Mysql และ postgresql ซึ่งเป็นฐานข้อมูล แบบ open source ที่ได้รับความนิยมทั่วโลก

จากที่ได้ลองติดตั้งดู ไม่มีอะไรยากเกินไปกว่า แตก tarball -> ./configure -> make -> make install แล้วก็ config อีกนิดหน่อย แค่ ใส่ user pass และ db name ของ database server ลงไปก็เสร็จแล้ว

ข้างใน config ก็มีให้เลือก database server อยู่แล้ว สามารถเลือกรูปแบบให้เหมาะสมได้เลย

ใน tutorial นั้นก็ได้มีการเขียนติดต่อกับ PHP ได้เลย เพียงนำ lib include ไปเท่านั้น

สามารถ compile ร่วมไปกับ mysql ให้เป็น engine ของ mysql ได้

วันนี้มาเกริ่นๆ เท่านั้น เกี่ยวกับ sphinx search ต่อไปก็จะมาพูดถึงการเขียนกัน แล้วก็รายละเอียด ลึกๆ แล้วกัน

HTTP Protocol

No Comments »

February 24th, 2009 Posted 10:59 am

HTTP Protocol นั้นมีการใช้งานกันอย่างแพร่หลาย มีคนใช้ HTTP Protocol ทุกวัน ผ่าน internet

บางคนนั้นอาจจะยังไม่รู้จัก ว่า HTTP Protocol นั้นคืออะไร แล้วมันอยู่ตรงใหน ใช้งานอย่างไร

คำตอบง่ายของคนใช้คือไม่ต้องรู้หรอกว่าใช้งานอย่างไร เพราะ HTTP Protocol นั้น คนใช้เองไม่ต้องมาจดจ่ออยู่กับพวกนี้ แต่จะมีโปรแกรมสำหรับจัดการอยู่แล้ว ซึ่งก็คือ Browser นั่นเอง

มาถึงตรงนี้ร้อง อ๋อ กันแทบทุกคน หุหุ

ปกติแล้วการใช้งาน HTTP Protocol นั้นจะอยู่ที่ port 80 ซึ่งเป็นมาตราฐานที่ใช้งานกัน ถ้าคุณพิมพ์ http://www.meteenee.com นั่นแหละคุณได้ใช้ HTTP Protocol ติดต่อมาที่ www.meteenee.com

ถ้าคุณพิมพ์ ว่า http://www.meteenee.com:8080 หมายความว่า คุณได้ใช้ HTTP Protocol ติดต่อมาที่ www.meteenee.com ที่ port 8080 ถ้าไม่พิมพ์ แบบ แบบแรก จะหมายถึง port 80 ซึ่งเป็น มาตราฐานนั่นเอง

.

ในฐานนะที่เรานั้นเป็นโปรแกรมเมอร์ และยังเขยน web ซะด้วย การรู้จักกับ HTTP Protocol เป็นอย่างดี จะทำให้เข้าใจการเขียนโปรแกรมได้มากขึ้นไปอีก

HTTP Protocol นั้นจะเป็นการติดต่อสื่อสารกันระหว่าง server กับ client โดยผ่านรูปแบบ ของ Protocol นี้ซึ่งมีรูปแบบคือ HTTP HEADER กับ Body (เอาแบบง่ายๆ ความจริงเยอะกว่านี้มาก ดูที่นี่ได้) โดย Client จะส่ง header ไปบอกว่า ต้องการ page อะไร แล้ว server ก็จะส่งข้อมูลกลับมา

ไอ้ข้อมูลที่กลับมาเนี่ยแหละ มันคือโปรแกรมที่เราเขียนขึ้นมา (เราเขียนโปรแกรมไว้ที่ server นี่นา) เราสามารถตอบอะไรกลับไปให้กลับ client ที่ requrest เข้ามาได้ไปดูกัน

ที่บอกไปแล้วว่ามันมี header กับ body ในส่วนของ header นั้น เราจะมองไม่เห็นเพราะตัวที่ทำการแสดงผล(Browser) ไม่แสดงให้เราเห็น แต่จะเป็น action ของ Browser เอง เช่น 404 page not founf เป็นต้น

แล้วมันรู้ได้ไงว่า page not found ในส่วนนี้ server จะเป็นตัวบอก โดยบอกผ่าน http header นั่นเอง

.

ใน http header นั้นจะมี code สำหรับการ response อยู่ว่า จะ response แบบใดบ้าง เลยเอา list มาให้ดู จากที่นี่

  • 100 Continue
  • 101 Switching Protocols
  • 102 Processing (WebDAV)
  • 122 Request-URI too long
  • 200 OK
  • 201 Created
  • 202 Accepted
  • 203 Non-Authoritative Information (since HTTP/1.1)
  • 204 No Content
  • 205 Reset Content
  • 206 Partial Content
  • 207 Multi-Status (WebDAV)
  • 300 Multiple Choices
  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 305 Use Proxy
  • 306 Switch Proxy
  • 307 Temporary Redirect
  • 400 Bad Request
  • 401 Unauthorized
  • 402 Payment Required
  • 403 Forbidden
  • 404 Not Found
  • 405 Method Not Allowed
  • 406 Not Acceptable
  • 407 Proxy Authentication Required
  • 408 Request Timeout
  • 409 Conflict
  • 410 Gone
  • 411 Length Required
  • 412 Precondition Failed
  • 413 Request Entity Too Large
  • 414 Request-URI Too Long
  • 415 Unsupported Media Type
  • 416 Requested Range Not Satisfiable
  • 417 Expectation Failed
  • 418 I’m a teapot
  • 422 Unprocessable Entity (WebDAV)
  • 423 Locked (WebDAV)
  • 424 Failed Dependency (WebDAV)
  • 425 Unordered Collection
  • 426 Upgrade Required
  • 449 Retry With
  • 450 Blocked
  • 500 Internal Server Error
  • 501 Not Implemented
  • 502 Bad Gateway
  • 503 Service Unavailable
  • 504 Gateway Timeout
  • 505 HTTP Version Not Supported
  • 506 Variant Also Negotiates
  • 507 Insufficient Storage (WebDAV)
  • 509 Bandwidth Limit Exceeded (Apache bw/limited extension)
  • 510 Not Extended

จะเห็นได้ว่า code แต่ละตัวนั้นเยอะจิงๆ เอิ๊กๆ ไม่เห็นต้องเห็นเลย

แต่ความจริงแล้วก็จำแนกได้เป็น 5 กลุ่มใหญ่ ตามตัวเลขตัวแรกนั่นเอง

โดย group ที่ขึ้นต้อนด้วย
1xx หมายถึง Informational
2xx หมายถึง Success
3xx หมายถึง Redirection
4xx หมายถึง Client Error
5xx หมายถึง Server Error

ปกติแล้วถ้ารันเว็บได้ปกติ code ที่จะตอบลับมาคือ 200 เวลาที่เราบอกว่า เรา redirect ก็คือเราแก้ http header จาก 200 เป็น 3xx นั่นเอง โดย redirect ที่ใช้คือ 301

เวลาเขียนใน php ก็เลยต้องบเขียนว่า

header("Location: /foo.php",TRUE,301);

code เอามาจาก http://th2.php.net/manual/en/function.header.php

ยังไงล่ะ พอแค่นี้ละกัน ทำงานต่อ

Tags: , ,
Posted in linux, php