Wednesday, June 30, 2010

Enable sound vocabulary of QStarDict

  • ใช้ startdict มารู้สึกว่าไอคอน สวยไม่เท่า qstardict แล้ว
  • ยังมีเรื่อง speech อีก ถ้าคนใช้ Dictionary Babylon คงจะรู้อยู่ว่า
  • ถ้าเราพิมพ์คำศัพท์ที่ไม่มีความหมายลงไป เมื่อกด ออกเสียง มันสามารถอ่านคำนั้นให้เราฟังได้
  • แต่ stardict มันไม่เป็นเช่น นั้นน่ะสิครับ เค้าจะอ่านคำที่ใกล้เคียงแทนหว่า ไม่ได้อ่านคำที่เราพิมพ์ลงไป
  • หรือ บางที่เราอาจจะปรับให้ startdict มันอ่านได้ ไม่เป็นหว่า สงสัยจะเป็นแบบนี้มากกว่ามันทำไม่ได้
  • ปล่อย stardict มันไปเราไปใช้ qstardict ก็ได้ แต่กดรูปลำโพง สำหรับออกเสียง แต่มันไม่มีเสียงซะงั้น

Enable sound of QStarDict
  • เข้าไปที่ Settings => Configure QStarDict
  • เราจะได้หน้าต่าง Settings ประมาณนี้ ที่เส้นขีดสีแดง
  • ค่าเดิมจะเป็น
festival --tts
  • ให้เราเปลี่ยนเป็นแบบนี้ซะ
espeak %s &
  • จากนั้นก็กด Ok ซะ
  • แค่เนี๋ยอ่ะ พอเราพิมพ์คำศัพท์ลงไปและกดปุ่มรูปลำโพง เราก็จะได้ยินเสียงคำนั้นแหละ

เพิ่มเติม
  • QStarDict เมื่อเราพิมพ์คำลงไป จะมีหรือไม่มีความหมายก็ชั่ง เราสามารถกดออกเสียงได้ทุกคำ
  • ซึ่ง StarDict ทำบ่ได้ (คนเขียนทำไม่เป็น) อ่ะ
  • สมมุติเราต้องการให้มันอ่าน i knew in love เราต้องพิมพ์งี้ "i knew in love"
  • คือเราต้องใส่ double quote ครอบ ประโยคนั้นนะครับพี่น้อง ถ้าเราไม่ครอบมันจะอ่านแค่คำแรกเด้อ

อ้างอิง
  • Ubuntu 10.04 + ASUS F81Se VX200D
  • http://juuier.blogspot.com/2010/06/improve-sound-speech-of-stardict.html
  • http://juuier.blogspot.com/2008/06/linux-stardict.html
  • http://juuier.blogspot.com/2009/11/qstardict-icon-stardict.html

Access shared printer of Windows via samba

Example: add shared printer HP Laserjet P1006 in Ubuntu 10.04
  • ให้เราเข้าไปที่ System => Administration => Printing
  • คลิกที่ปุ่ม Add
  • ทางด้านซ้ายเลือกไปที่ Windows Printer via SAMBA จากนั้นให้เราคลิกที่ Browse...
  • เลือกไปยังเครื่องที่ shared printer อยู่เราจะเห็น printer นั้นๆ แล้วเราก็เลือก printer ที่จะใช้ซะ
  • รอเค้า search driver สักพัก
  • search ไม่เจอเราก็ไปเลือก driver จาก list ที่มีใน Ubuntu นั่นแหละ
  • ในที่นี้จะเป็นรุ่น HP Laserjet P1006
  • apply ให้เค้าหน่อย
  • เค้าถามว่าจะทดสอบสักแผ่นปะ
  • เราก็จะได้ printer ตัวใหม่แหละ เราสามารถตั้ง printer ตัวใหม่ให้เป็น default โดยคลิกขวาที่ printer อันใหม่ เลือกไปที Set as default ประมาณนี้

เพิ่มเติม
  • ถ้าเราไม่สามารถหา driver ใน list ของ ubuntu ที่เค้ามีมาให้ เราลองใช้ driver ของรุ่นที่เลขใกล้เคียง เป็นการทดแทนก็น่าจะได้
  • เคยลองกับ Canon pixma mp145 เราเลือกที่ 150 มันก็ยังใช้ได้นะ

บทความที่เกี่ยวข้อง

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

  • PHP มันแจ้ง error ประมาณบรรทัดเนี๋ย while ($row = mysql_fetch_array($result)) {}
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
  • ประเด็นหลักๆ ให้เรามุ่งไปที่ sql statement อาจมี query ที่เขียนผิด เช่น ชื่อ table, column ผิดเป็นต้น
  • ประเด็นต่อมา $result = mysql_query("SELECT * FROM MYTABLE"); ประโยคประมาณนี้ เราต้องใส่แบบงี้ MYDB.MYTABLE คือระบุ db ไปด้วย ประมาณว่า connection มันไม่รู้ว่า db ตัวใหนที่เราอยากจะ query หว่ามันเลย error
  • ต้องเป็นประมาณนี้
$result = mysql_query("SELECT * FROM MYDB.MYTABLE");
  • หรือเราสามารถเรียกใช้แบบนี้ได้คือ ระบุฐานข้อมูลโดย function นี้เลย
$result = mysql_db_query("MYDB","SELECT * FROM MYTABLE");
  • แต่ mysql_db_query(); ใน PHP 5.3
Warning: This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
  • เค้าแนะนำให้เขียนแบบนี้
<?php

if (!$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) {
echo 'Could not connect to mysql';
exit;
}

if (!mysql_select_db('mysql_dbname', $link)) {
echo 'Could not select database';
exit;
}

$sql = 'SELECT foo FROM bar WHERE id = 42';
$result = mysql_query($sql, $link);

if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}

while ($row = mysql_fetch_assoc($result)) {
echo $row['foo'];
}

mysql_free_result($result);

?>

อ้างอิง
  • http://www.php.net/manual/en/function.mysql-db-query.php
  • http://www.phpbuilder.com/board/showthread.php?t=10352905

Tuesday, June 29, 2010

Display row number in MySQL

select
@rownum:=@rownum+1 as rank
, first_name
, last_name
, store_id
, email
, create_date
from customer
, (SELECT @rownum:=0) r
order by first_name;

บทความที่เกี่ยวข้อง

อ้างอิง

Add index to table in MySQL for faster query

  • ประเด็นไม่มีไรมาก คือได้ไปมีส่วนร่วม เพิ่ม page ให้ระบบงานระบบหนึ่ง
  • ซึ่งระบบนั้นใช้ PHP + Apache2 + MySQL + CentOS
  • page ที่เราทำเพิ่มก็ไม่มีไรมาก query ข้อมูลจาก table ออกมาแสดง
  • ซึ่งมีอยู่ 3 table ที่ต้อง join กัน งานแค่เนี๋ย ทำไม่กี่ชั่วโมงก็เสร็จ
  • สำหรับคนไม่มีพื้น PHP อย่างตัวคนเขียนเนี๋ย
  • จะทำอาไรสักคำสั่งก็ต้อง google เพื่อหาการใช้งาน function นั้นๆ ว่าต้องทำอย่างไร
  • จึงค่อนข้างเสียเวลาหว่า เล็กน้อยถึงค่อนข้างมาก เลยปาเข้าไป เป็นชั่วโมง
  • แต่สำหรับท่านที่พอมี พื้น PHP บ้างน่าจะทำไม่เกิน 10 นาที
  • หลังจากนั่งงมโค้ด PHP + MySQL อยู่ตั้นนาน ก็เสร็จ
  • ปัญหาต่อมาหลังจาก page นั้นใช้งานได้แล้ว แต่...มันช้ามากๆ
  • คือ ข้อมูลแค่ 5 พันกว่า record ทำการ join แค่ 3 table แต่ใช้เวลา query หลายนาทีเลยอ่ะ
  • หาข้อมูลใน google ต่อว่าจะทำอย่างไรให้ query ได้เร็ว
  • ตอนแรกคิดว่า ลองสร้าง view ดูดีมั้ยหว่า แต่คิดว่ามันคงไม่เร็วขึ้นหรอกหว่า (คิดเอาเอง ยังไม่ได้ลอง)
  • และความพยายามก็เป็นผล คือ การสร้าง index ให้ column ใน table สามารถทำให้ query ได้เร็วหว่า
  • หรือ การทำ cache ให้ MySQL ก็สามารถเพิ่มความเร็วในการ query ได้เช่นกัน

เพิ่มความเร็ว query ด้วยการ สร้าง index ใน MySQL

Query ด้วยคำสั่ง
select a.chat
, a.pid
, a.title
, c.title_n
, a.fname
, a.lname
, a.birthdate
, a.sex
, b.hospsub_n
, b.mooban_n
from all_null_update a
, mastercupid b
, titlename c
where a.chat = b.mastercup_id
and a.title = c.title_c


Befor

  • จำนวน 5711 record เชื่อม 3 table
  • ใช้เวลาไป 6 นาที 17 วินาที เลยอ่ะ คนเปิดเว็บใครจะรอไหวเค้าคงนึกว่ามันค้างมากกว่าน้อ
  • อันนี้ขนาด query บนเครื่องตัวเองยัง ช้าขนาดนี้ แล้ว connect ไปที่ server จะช้าขนาดใหน

After
  • ทดสอบสร้าง index ให้แต่ละ column เราที่เราใช้เป็นเงื่อนไขบ่อยหลัง where หรือ ใช้ใน join table อ่ะ
  • คำสั่งสร้าง index ของตัวอย่างนี้เป็นดังนี้
ALTER TABLE a ADD KEY (chat);
ALTER TABLE a ADD KEY (title);
ALTER TABLE b ADD KEY (mastercup_id);
ALTER TABLE c ADD KEY (title_c);
  • หลังจากเราได้เพิ่ม index เข้าไปแหละ เราใช้เวลา query แค่ 318 มิลลิวินาทีเองหว่า
  • ไม่ถึงนาทีด้วยซ้ำ เร็วขึ้นโค้ดๆ

ผลกระทบเมื่อทำ index

  • การ insert, update ทำได้ช้าเพระต้องไปสร้าง index ให้กับ column นั้นๆ ของ record ใหม่ด้วย
  • พื้นที่บน database ก้อนนั้นๆ มีการใช้มากขึ้น ง่ายๆ ก็คือ มีการใช้พื้นที่เพิ่มขึ้นในการเก็บสร้าง index

เพิ่มเติม

  • index อาจมีข้อจำกัดอยู่บ้าง เมื่อ query นั้นมี in หรือ like มาเกี่ยวข้อง เค้าว่ามา
  • เราสามารถลบ index ของ column ออกด้วยคำสั่ง
ALTER TABLE items DROP KEY item_descr;
  • เพิ่ม index จะมี ( ) ครอบชื่อ column ที่ต้องการทำ index
  • ส่วน การลบ สังเกตุว่าจะไม่มี ( ) ครอบชื่อ column ที่ต้องการถอน index ออกนะครับพี่น้อง
  • จำได้ว่า SQL Server เมื่อเราทำการสร้าง table column ที่เรากำหนดเป็น PK จะมีการสร้าง index ให้เลย ไม่จำเป็นต้องสร้างเองสำหรับ PK ใน table นั้นๆ
  • แต่ MySQL ไม่สร้างให้ หรืออย่างไรงง

ปล.

  • ทดสอบสร้าง index แค่ table เดียว
ALTER TABLE b ADD KEY (mastercup_id);
  • เวลาในการ query ใช้ได้เลยหว่า นึกว่าต้องสร้าง index กับทุก table ที่ join ซะอีกนะเนี๋ย
  • แต่มีปัญหากับ การแสดง row number dynamic ซะงั้น งง ต้องเพิ่มงี้ด้วยถึงหายหว่า
ALTER TABLE c ADD KEY (title_c);
  • สรุปง่ายก็ add index ให้ table ที่เราทำการ join ด้วยนั่นแหละ ไม่ต้อง add ให้ table หลักก็ได้
  • ในที่นี้ table หลักคือ a เอาไป join กับ b และ c เราก็ add index ให้ FK ของ b และ c ก็พอ
  • ถ้าผลลัพธ์เรามี rank dynamic ด้วยมันจะ เรียงลำดับให้ถูกต้องด้วยแหละ
  • แต่ถ้าเราไม่ join กับ table อื่นๆ เราก็เพิ่ม index ให้กับ column ที่เราใช้ตามหลัง where บ่อยๆ

อ้างอิง

  • http://spalinux.com/2008/06/indexing_mysql_database
  • http://spalinux.com/2009/04/speed_up_select_with_mysql_query_cache
  • http://www.thaisapclub.com/forums/showthread.php?t=128
  • http://www.narisa.com/forums/index.php?showtopic=11909
  • http://www.narisa.com/forums/index.php?showtopic=11830
  • http://stackoverflow.com/questions/127156/how-do-i-check-if-index-exists-on-a-table-field-in-mysql
  • http://www.tizag.com/mysqlTutorial/mysql-index.php
  • http://www.narisa.com/forums/index.php?showtopic=14734
  • http://www.narisa.com/forums/index.php?showtopic=5778

Monday, June 28, 2010

Server Error in Application "DEFAULT WEB SITE"

Internet Information Services 7.5
Error Summary
HTTP Error 401.3 - Unauthorized
You do not have permission to view this directory or page because of the access control list (ACL) configuration or encryption settings for this resource on the Web server.
  • พยายามแก้ตามอ้างอิง ตั้งหลายวิธี
  • แต่แก้ไม่ได้สักที เซงอย่างแรง
  • สุดท้ายเลย uninstall iis7 และ ลบ inetpub,php ออก
  • คอนฟิกใหม่

เกี่ยวข้อง

อ้างอิง

Thai user interface for OpenOffice in Lucid

  • เข้าไปที่ System => Administration => Language Support
  • เราจะได้หน้าต่างแบบนี้ ให้คลิกที่ Install / Remove Languages...
  • มองหา Thai เลือกซะ จากนั้นก็ Apply Changes
  • ปรับแก้ interface ที่เมนู Options => Language Settings => Languages
  • กรอบทางด้านซ้าย User Interface เลือกเป็น Thai ได้แหละ
  • จบครับพี่น้อง

อ้างอิง

  • Ubuntu 10.04

ข้อมูลเพิ่มเติม
  • http://www.ubuntuclub.com

Sort data in Excel & Calc

  • คือไม่มีไรมีเรื่องต้อง sort data แต่ตอนนี้นทำไม่เป็น
  • หาข้อมูลสักพักก็ ทำเป็นแหละ เลยบันทึกขั้นตอนเก็บไว้ซะหน่อย
  • เผื่อได้ใช้ภายหลังอ่ะนะ

Calc

  • เลือกข้อมูลที่ต้องการ sort
  • จากนั้นไปที่เมนู Data => Sort... เราจะได้หน้าต่างประมาณนี้ เลือกว่าเราจะเรียงตาม column ใหน
  • และเลือกว่าจะเรียงจากมากไปน้อย หรือจากน้อยไปมาก ได้ตามสบาย
  • จบการ sort บน Calc

Excel
  • เลือกข้อมูลที่ต้องการ sort เหมือนกับ Calc นั่นแหละ
  • จากนั้นที่ ไปที่เมนู Sort & Filter (จะอยู่แท๊ป Home นะครับ) ดังภาพ จากนั้นเลือก Custom Sort...
  • หรือเอาแบบง่ายก็ เลือกข้อมูลที่ต้องการ sort แล้วให้เราคลิกขวา ไปที่ Sort =>
  • เลือก Custom Sort...
  • เพิ่มเติม Sort 2 เมนูแรก (Sort Smallest to Largest, Sort Largest to Smallest) เค้าจะเรียงตาม column แรกนะครับพี่น้อง
  • หลังจากเลือก Custom Sort... เราจะได้หน้าต่างแบบนี้
  • เราก็เลือก column ที่ต้องการ Sort ได้ตามสบายเลยครับพี่น้อง

Refer
  • Help (F1)

Lucid with HP Scanjet 7650

  • วันนี้นั่งทดสอบ Scaner กับ Ubuntu เราซะหน่อย
  • เพราะไม่เคยลองจริงๆ เคยแต่ printer หว่า
  • จัดการเสียบสาย usb scaner เข้ากับ notebook เรา
  • จากนั้นทดสอบกับ Simple Scan ใช้ได้แจ่มครับ ไม่มีปัญหาเลยพี่น้อง

Test HP Scanjet 7650 on Ubuntu 10.04
  • ต่อสาย scaner เข้าคอมจากนั้นเข้าไปที่ Applications = > Graphics => Simple Scan
  • ถ้าคอมต่อกับ scanner เรียบร้อยก็จะได้หน้าจอประมาณนี้
  • เราสามารถเข้าไปที่ Preferences เพื่อปรับแต่งค่าต่างๆ เช่น ความละเอียด ของ Text หรือ Photo
  • หรือ ตั้งให้ scan ทั้งด้านหน้าและด้านหลัง ถ้า scan จาก feed มา
  • หรือ ขนาดกระดาษเป็นต้น
  • ถ้าเราเลือก Single จะเป็นการ scan จาก glass โดยตรง
  • แต่ถ้าเลือก All pages from feed ก็อ่านจากช่อง feed กระดาษเข้านั่นแหละ
  • ตัวอย่างที่ได้ทดสอบ scan ทุกอย่างโอเคมากๆ
  • ถ้าเราเปิด Simple Scan แล้วเป็นงี้ แสดงว่า คอมเรายังไม่ได้ต่อกับ scanner เลย

NTLDR is missing

Error when boot windows xp OS
NTLDR is missing
Press Ctrl+Alt+Del to restart
Cause
  • ntldr, boot.ini, ntdetect.com มันหายไปจากระบบเรา

Solved
  • คัดลอกไฟล์ ntldr, boot.ini, ntdetect.com จากเครื่องอื่นซึ่งเค้าจะอยุ๋ที่ drive C: (drive ลงระบบอ่ะนะ)
  • และทำการ Show hiden files และ uncheck Hide protected files ซะเราจึงจะเห็นไฟล์เหล่านี้
  • หาวิธีคัดลอกลงใน drive ของเครื่องที่มีปัญหาให้ได้
  • วิธีการหนึ่งคือใช้ Ubuntu Live ง่ายมากๆ ไม่ว่าจะเป็น CD, USB แจ่มทั้งนั้น

Refer

Using ALT And TITLE Attributes

<img src="cafeteria.jpg" height="200" width="200" alt="UAHC campers enjoy a meal in the camp cafeteria">

<table width="100" border="2" title="Henry Jacobs Camp summer 2003 schedule">

<a href="page1.html" title="HS Jacobs - a UAHC camp in Utica, MS">Henry S. Jacobs Camp</a>

<form name="application" title="Henry Jacobs camper application" method=" " action=" ">


อ้างอิง

  • http://www.netmechanic.com/news/vol6/html_no1.htm

Sunday, June 27, 2010

ป้องกัน cracker มายุ่มย่ามในระบบ PHP Code

  • ช่วงนี้ยุ่งกับ PHP เยอะ เลยต้องหาข้อมูลก่อนเลย
  • เพราะ เขียนไม่เป็นหว่า ต้องอ่านเยอะๆ
  • เจอเนื้อหาดีๆ ที่ใหนเป็นเก็บ

จาก: http://www.expert2you.com/view_article.php?art_id=2931


หลายเว็บล่มเพราะการไม่กันการ crack ภายนอกเอาไฟล์นอก server มารันใน server ทำให้ server ล่มมานักต่อนักแล้วนะครับ

1. ควรป้องกัน (ระแวง) การรับข้อมูลจากผู้ใช้ให้มากที่สุดครับ
เวลารับข้อมูลจาก form ควรอ้างถึงข้อมูลนั้นๆโดย $_POST['login_user'] ครับ
เวลารับข้อมูลจาก URL ควรอ้างถึงข้อมูลนั้นๆโดย $_GET['page'];
เวลารับข้อมูลจาก Session ควรอ้างถึงข้อมูลนั้นๆโดย $_SESSION['ss_username'];

2. ไม่ควรรับค่าจากผู้ใช้แล้วบันทึกลงฐานข้อมูลเลยหรือนำไปประมวลผลเลย
เวลา รับค่าหน้าเพื่อจะเปลี่ยนหน้าจากหน้านึงไปอีกหน้านึงเราจะใช้ method get เพื่อให้ผู้ใช้งานสามารถรู้ว่าตอนนี้อยู่ที่หน้าไหน แต่เราก้อควรป้องกันการ Injection ด้วย
เวลารับข้อมูลจาก ตัวแปรประเภท GET ที่เป็นตัวเลข ควรใส่ฟังชันท์ intval() ลงไปด้วย เช่น
http://localhost/board.php?action=show&id=1234
เวลา ประมวลผล เราจะประมวลโดยอ้างถึง $_GET['id'] ใช่มั้ยครับ คือ
$select = mysql_query("SELECT * FROM board WHERE id=" . $_GET['id']);
ก็คือถ้า ส่ง id=1234 จะโชว์ข้อความที่ 1234 นะครับ แต่มันสามารถอัดฉีดได้ครับ สมมุติผมลองส่งค่า id ไปใหม่
http://localhost/board.php?action=show&id=1234 OR 4321
จะทำให้มันแสดงทุกๆข้อความเลยนะครับ คล้ายๆกับ Error แหละครับ
ที่ นี้ลองคิดดูว่าถ้าเกิดคนที่พอมีความรู้ด้าน SQL อัดฉีดให้เพิ่ม admin อีกคนลงไปในระบบจะเป็นไงละครับ ?
วิธีแก้คือให้เราใส่ฟังชันธ์ intval() ไปก่อนประมวลผลครับ คือ
$id = intval($_GET['id']);
$select = mysql_query("SELECT * FROM board WHERE id=" . $id); ครับ

3. เราควร define ค่าใน server เพื่อกันการเอาไฟล์นอก server มารัน
(จากรูรั่วที่ไหนสักแห่ง) วิธีการคือให้เรากำหนดค่าหลักขึ้นมาในไฟล์หลักครับ เช่น
ไฟล์หลัก: main.php
<?
$in_website = define ("in_website", true);
?>
ไฟล์ ย่อย: ไฟล์ที่เรา include() เข้ามา
<?
if (!$in_website) die("จาทำอารายคับท่านผู้ชม");
?>

4. ในการตรวจข้อมูลควรมีการดัดแปลงเพื่อให้ง่ายต่อการประมวลผล
เช่น ฟังชันท์ addslashes() เป็นฟังชันท์ที่นักโปรแกรมเมอร์ไม่ควรลืม เพราะอักษร ' " สามารถทำให้ script ของคุณล่มได้ แต่พอคุณประมวลผลเสร็จไม่แนะนำให้เอาค่าตัวแปรที่เรารับมามาปนกันนะครับ คืออย่าทำแบบนี้
$_GET['message'] = addslashes($_GET['message']);
เพื่อ ให้เราสามารถแยกแยะได้ว่าข้อมูลไหนเป็นของผู้ใช้หรือข้อมูลไหนคือข้อมูล บริสุทธิ์ที่เราป้องกันแล้ว

Installing Apache2 + PHP + MySQL

Refer: http://www.php-mysql-tutorial.com/...mysql.aspx

PHP and MySQL are usually associated with LAMP (Linux, Apache, MySQL, PHP). However, most PHP developer ( including me ) are actually using Windows when developing the PHP application. So this page will only cover the WAMP ( Windows, Apache, MySQL, PHP ). You will learn how to install Apache, PHP, and MySQL under Windows platform.

The first step is to download the packages :

You should get the latest version of each packages. As for the example in this tutorial i'm using Apache 2.0.50 ( apache_2.0.50-win32-x86-no_ssl.msi ), PHP 4.3.10 ( php-4.3.10-Win32.zip ) and MySQL 4.0.18 ( mysql-4.0.18-win.zip ).

Now let's start the installation process one by one.

Installing Apache

Installing apache is easy if you download the Microsoft Installer ( .msi ) package. Just double click on the icon to run the installation wizard. Click next until you see the Server Information window. You can enter localhost for both the Network Domain and Server Name. As for the administrator's email address you can enter anything you want.

I'm using Windows XP and installed Apache as Service so everytime I start Windows Apache is automatically started.


Click the Next button and choose Typical installation. Click Next one more time and choose where you want to install Apache ( I installed it in the default location C:\Program Files\Apache Group ). Click the Next button and then the Install button to complete the installation process.

To see if you Apache installation was successful open up you browser and type http://localhost in the address bar. You should see something like this :


By default Apache's document root is set to htdocs directory. The document root is where you must put all your PHP or HTML files so it will be process by Apache ( and can be seen through a web browser ). Of course you can change it to point to any directory you want. The configuration file for Apache is stored in C:\Program Files\Apache Group\Apache2\conf\httpd.conf ( assuming you installed Apache in C:\Program Files\Apache Group ) . It's just a plain text file so you can use Notepad to edit it.

For example, if you want to put all your PHP or HTML files in C:\www just find this line in the httpd.conf :

DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"

and change it to :

DocumentRoot "C:/www"

After making changes to the configuration file you have to restart Apache ( Start > Programs > Apache HTTP Server 2.0.50 > Control Apache Server > Restart ) to see the effect.

Another configuration you may want to change is the directory index. This is the file that Apache will show when you request a directory. As an example if you type http://www.php-mysql-tutorial.com/ without specifying any file the index.php file will be automatically shown.

Suppose you want apache to use index.html, index.php or main.php as the directory index you can modify the DirectoryIndex value like this :

DirectoryIndex index.html index.php main.php

Now whenever you request a directory such as http://localhost/ Apache will try to find the index.html file or if it's not found Apache will use index.php. In case index.php is also not found then main.php will be used.

Installing PHP

First, extract the PHP package ( php-4.3.10-Win32.zip ). I extracted the package in the directory where Apache was installed ( C:\Program Files\Apache Group\Apache2 ). Change the new created directory name to php ( just to make it shorter ). Then copy the file php.ini-dist in PHP directory to you windows directory ( C:\Windows or C:\Winnt depends on where you installed Windows ) and rename the file to php.ini. This is the PHP configuration file and we'll take a look what's in it later on.

Next, move the php4ts.dll file from the newly created php directory into the sapi subdirectory. Quoting from php installation file you can also place php4ts.dll in other places such as :

  • In the directory where apache.exe is start from ( C:\Program Files\Apache Group\Apache2 \bin)
  • In your %SYSTEMROOT%\System32, %SYSTEMROOT%\system and %SYSTEMROOT% directory.
    Note: %SYSTEMROOT%\System32 only applies to Windows NT/2000/XP)
  • In your whole %PATH%

Side Note : Thanks to Shannon Tang for pointing this out

Modifying Apache Configuration

Apache doesn't know that you just install PHP. We need to tell Apache about PHP and where to find it. Open the Apache configuration file in C:\Program Files\Apache Group\Apache2\conf\httpd.conf and add the following three lines :

LoadModule php4_module php/sapi/php4apache2.dll
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

The first line tells Apache where to load the dll required to execute PHP and the second line means that every file that ends with .php should be processed as a PHP file. You can actually change it to anything you want like .html or even .asp! The third line is added so that you can view your php file source code in the browser window. You will see what this mean when you browse this tutorial and click the link to the example's source code like this one.

Now restart Apache for the changes to take effect ( Start > Programs > Apache HTTP Server 2.0.50 > Control Apache Server > Restart ) . To check if everything is okay create a new file, name it as test.php and put it in document root directory ( C:\Program Files\Apache Group\Apache2\htdocs ). The content of this file is shown below.

phpinfo() is the infamous PHP function which will spit out all kinds of stuff about PHP and your server configuration. Type http://localhost/test.php on your browser's address bar and if everything works well you should see something like this :


Installing MySQL

First extract the package ( mysql-4.0.18-win.zip ) to a temporary directory, then run setup.exe. Keep clicking the next button to complete the installation. By default MySQL will be installed in C:\mysql.

Open a DOS window and go to C:\mysql\bin and then run mysqld-nt --console , you should see some messages like these :

C:\mysql\bin>mysqld-nt --console
InnoDB: The first specified data file .\ibdata1 did not exist:
InnoDB: a new database to be created!
040807 10:54:09 InnoDB: Setting file .\ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
040807 10:54:11 InnoDB: Log file .\ib_logfile0 did not exist: new to be created

InnoDB: Setting log file .\ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
040807 10:54:12 InnoDB: Log file .\ib_logfile1 did not exist: new to be created

InnoDB: Setting log file .\ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
040807 10:54:31 InnoDB: Started
mysqld-nt: ready for connections.
Version: '4.0.18-nt' socket: '' port: 3306

Now open another DOS window and type C:\mysql\bin\mysql

if your installation is successful you will see the MySQL client running :

C:\mysql\bin>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.0.18-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Type exit on the mysql> prompt to quit the MySQL client.

Now let's install MySQL as a Service. The process is simple just type mysqld-nt --install to install the service and net start mysql to run the service. But make sure to shutdown the server first using mysqladmin -u root shutdown

C:\mysql\bin>mysqladmin -u root shutdown

C:\mysql\bin>mysqld-nt --install
Service successfully installed.

C:\mysql\bin>net start mysql

The MySQL service was started successfully.

C:\mysql\bin>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.0.18-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Modifying PHP Configuration File ( php.ini )

PHP stores all kinds of configuration in a file called php.ini.You can find this file in the directory where you installed PHP. Sometimes you will need to modify this file for example to use a PHP extension. I won't explain each and every configuration available just the ones that often need modification or special attention.

Some of the configurations are :

  1. register_globals
  2. error_reporting and display_errors
  3. extension and extension_path
  4. session.save_path
  5. max_execution_time

register_globals

Before PHP 4.2.0 the default value for this configuration is On and after 4.2.0 the default value is Off. The reason for this change is because it is so easy to write insecure code with this value on. So make sure that this value is Off in php.ini.

error_reporting and display_errors

Set the value to error_reporting = E_ALL during development but after production set the value to error_reporting = E_NONE .

The reason to use E_ALL during development is so you can catch most of the nasty bugs in your code. PHP will complain just about any errors you make and spit out all kinds of warning ( for example if you're trying to use an uninitialized variable ).

However, after production you should change the value to E_NONE so PHP will keep quiet even if there's an error in your code. This way the user won't have to see all kinds of PHP error message when running the script.

One important thing to note is that you will also need to set the value of display_erros to On. Even if you set error_reporting = E_ALL you will not get any error message ( no matter how buggy our script is ) unless display_errors is set to On.

extension and extension_path

PHP4 comes with about 51 extensions such as GD library ( for graphics creation and manipulation ), CURL, PostgreSQL support etc. These extensions are not turned on automatically. If you need to use the extension, first you need to specify the location of the extensions and then uncomment the extension you want.

The value of extension_path must be set to the directory where the extension is installed which is PHP_INSTALL_DIR/extensions, with PHP_INSTALL_DIR is the directory where you install PHP. For example I installed PHP in C:\Program Files\Apache Group\Apache2\php so the extensions path is :

extension_path = C:/Program Files/Apache Group/Apache2/php/extensions/

Don't forget to add that last slash or it won't work

After specifying the extension_path you will need to uncomment the extension you want to use. In php.ini a comment is started using a semicolon (;). As an example if you want to use GD library then you must remove the semicolon at the beginning of ;extension=php_gd2.dll to extension=php_gd2.dll

session.save_path

This configuration tells PHP where to save the session data. You will need to set this value to an existing directory or you will not be able to use session. In Windows you can set this value as session.save_path = c:/windows/temp/

max_execution_time

The default value for max_execution_time is 30 ( seconds ). But for some scripts 30 seconds is just not enough to complete it's task. For example a database backup script may need more time to save a huge database.

If you think your script will need extra time to finish the job you can set this to a higher value. For example to set the maximun script execution time to 15 minutes ( 900 seconds ) you can modify the configuration as max_execution_time = 900

PHP have a convenient function to modify PHP configuration in runtime, ini_set(). Setting PHP configuration using this function will not make the effect permanent. It last only until the script ends.


เพิ่มเติม

  • ตามตัวอย่างมันจะเป็นของ php4 นะ

LoadModule php4_module php/sapi/php4apache2.dll

  • หรือ

LoadModule php4_module C:/php4/sapi/php4apache2.dll

  • ถ้าเป็น PHP5 ก็ประมาณนี้

LoadModule php5_module C:/PHP5/php5apache2.dll

  • หรือ

LoadModule php5_module C:/PHP5/php5apache2_2.dll

  • ง่ายๆ คือเลือก php module ให้ถูกเวอร์ชั่น และ php5apachex_x.dll ให้ถูกเวอร์ชั่นด้วยเช่นกัน


บทความที่เกี่ยวข้อง

Sharing internet in Windows 7

  • สมมุติ เครื่องเรามี NIC สองตัว การ์ดตัวแรกเป็น WAN (Wide Area Network) การ์ดตัวที่สองเป็น LAN (Local Area Network) เราต้องการแชร์ internet ให้ขา LAN ของเรา เราต้องทำประมาณนี้

Solution
  • สมมุติขา WAN ของเราเป็น Wireless
  • เราก็คลิกขวาที่ Adapter Wireless เราและเลือก Properties
  • จากนั้นเลือกแท๊ป Sharing
  • ติ๊กถูกที่ Allow other network ...
  • Home networking connection ในที่นี้เป็นการ LAN อีกตัวของเราที่ต่อขาใน นั่นเองเลือก NIC ซะ
  • แค่นี้หว่า จบครับพี่น้อง

อ้างอิง
  • http://windows.microsoft.com/th-TH/windows-vista/Using-ICS-Internet-Connection-Sharing

Friday, June 25, 2010

Redirect by PHP Code

<?php

// redirect ด้วย html tag ไม่ค่อยน่าใช้ ถ้าเราเขียน PHP เพราะเค้ากด ESC หน้าที่จะ redirect ก็จะไม่ทำงานแหละ
//echo "<meta http-equiv='refresh' content='1;URL=http://localhost/'>" ;

// ใช้ header เหมาะมากๆ
header("Location: http://localhost/");

// ตามด้วย exit อีกนิดหน่อยน่าจะดี
exit;

?>


อ้างอิง

Thursday, June 24, 2010

Config vsftpd


Configuration vsftpd

  • ติดตั้ง vsftpd
sudo apt-get install vsftpd
  • เริ่มคอนฟิกกันที่ไฟล์เนี๋ย /etc/vsftpd.conf
anonymous_enable = NO
# ปิดการใช้ anonymous ftp ถ้าจะเปิด anony ก็เปลี่ยน No เป็น Yes มั้ง

write_enable = YES
# ให้ user สามารถใช้ FTP write ได้

local_enable = YES
# ใช้ user จาก /etc/passwd

file_open_mode = 0777 (เพิ่มบรรทัดนี้เข้าไป)
local_umask = 0022
# ให้ file ที่ user upload ขึ้นไป มี permission เป็น 755 อัตโนมัติ
# โดยไม่ต้องมาไล่ chmod กันทีหลัง

chroot_local_user = YES
chroot_list_enable = YES
chroot_list_file = /etc/vsftpd.chroot_list
# ให้ user อยู่แต่ใน home directory ของตัวเองเท่านั้น
# ยกเว้นให้ผู้ใช้ที่มีชื่ออยู่ในไฟล์ /etc/vsftpd.chroot_list ซึ่งไฟล์นี้ต้องสร้างขึ้นมาใหม่
# เมื่อเสร็จแล้ว ให้ save file vsftpd.conf นี้
# จากนั้นก็ไปสร้างไฟล์ใหม่ คือ /etc/vsftpd.chroot_list
# แล้วใส่ชื่อ user ที่ต้องการยกเว้นลงไป
  • จากนั้น restart vsftpd
sudo /etc/init.d/vsftpd restart
เพิ่มเติม

ที่มา


1. http://vsftpd.beasts.org
2. http://vsftpd.beasts.org/vsftpd_conf.html

Meta Refresh Tag

<meta http-equiv="refresh" content="5">
<!--meta http-equiv="refresh" content="5;url=http://webdesign.about.com"-->

อ้างอิง
  • http://webdesign.about.com/od/metataglibraries/a/aa080300a.htm

List file inside folder by tag IFRAME of HTML

// /www/web1/code/
// /www/web1/index.html

// run index.html to list file in /code folder
<body>
<iframe src="code/" frameborder="0" width="500" height="500">
</body>

มันแสดงไฟล์แบบบ้านๆ โค้ดๆ เลย

ติดตั้ง Webmin แล้ว http://localhost ใช้ไม่ได้

  • ประเด็นคือ ก่อนติดตั้ง webmin เราสามารถใช้ http://localhost ได้ปกติ
  • พอติดตั้ง webmin ตามกระทู้นี้
  • http://localhost และ http://localhost/~user/ เรากลับใช้ไม่ได้เลยหว่า
  • ใช้ได้แต่ https://localhost:10000/ อ่ะ ทำไงล่ะ
  • ลองเข้า https://localhost และ https://localhost/~user/ ก็ยังไม่ได้

Solved
  • ลองแก้ปัญหาโดยการมั่ว
  • มั่วที่ว่านี้คือ เข้าไปแก้ /etc/apache2/sites-available/default
  • ที่ <VirtualHost *:80> ก็แก้หมายเลขพอร์ตเป็น 443 ซะ
  • จากนั้น restart apache
sudo /etc/init.d/apache2 restart
  • http://localhost:10000 และ http://localhost/~user/ สามารถรันได้ แต่ http://localhost รันได้แต่ขึ้น file not found อย่างเดียวหว่างง ทั้งๆ ที่ /var/www/ มีไฟล์ index.html, index.php
  • เลยลองแก้ <VirtualHost *:443> ไปเป็น 80 เหมือนเดิมแล้ว restart apache
  • แม่เจ้า http://localhost และ http://localhost/~user/ และ http://localhost:10000 ใช้ได้หมด ซะงั้น

สรุป
  • แก้ให้ใช้งาน localhost , localhost/~user , localhost:10000 ได้ตามต้องการ
  • แต่งงอย่างแรง

เกี่ยวข้อง

Wednesday, June 23, 2010

Improve sound speech of Stardict

  • ไม่มีไรมากแค่ ใช้ stardict เวลาให้มันอ่านคำศัพท์ทีไร โปรแกรมไมพูดสั้นมากๆ
  • เช่น orientation จะได้ยินประมาณ 0-ri-en-ta-shi ประมาณนี้เอง
  • ประมาณว่าคำสุดท้ายไม่ค่อยจะชัดเลย

Solved
  • เปิดโปรแกรม stardict ขึ้นมา จากนั้นคลิกที่รูป ปะแจ กับ ไขควงที่มันไขว้กันอยู่ ดังภาพที่สองนะ (มันจะอยู่ด้านขวาล่างนั้นไง Perferences นั่นแหละ)
  • เราก็จะได้ หน้าต่างดังภาพแรกเมนูทางด้านซ้าย Categories: ให้เราเลือก Sound
  • ต่อมามองไปทางด้านขวา ที่ Use TTS Program. ให้เราติ๊กถูกได้เลย
  • และ Commanline: ให้เราเลือก espeak %s & ดังภาพ
  • เมื่อเราได้ปรับค่าเสร็จก็ Close ซะ
  • ตรงปุ่มกดเพื่อ ออกเสียงจะมีเพิ่มขึ้นมาอีกหนึ่งคือ Command TTS ให้เราใช้ตัวนี้ออกเสียงได้เลยครับ

อ้างอิง
  • มั่วไปเรื่อยๆ
  • Ubuntu 10.04

Installing Webmin in Ubuntu 10.04

wget http://prdownloads.sourceforge.net/webadmin/webmin_1.510-2_all.deb
sudo dpkg –install webmin_1.510-2_all.deb
sudo apt-get -f install
  • ทดสอบผล http://localhost:10000/
  • เค้าจะถามเรื่อง ssl ซะหน่อยเราก็ exception ไปซะ
  • ใช้ user ของระบบนั่นแหละพี่น้อง

อ้างอิง

Setting page layout in OpenOffice

  • หาตั้งนานหน้าต่างนี้ก็เปิดแหละ แต่ทำไมมองไม่เห็นเลยฟะ
  • เข้าไปที่เมนู Format => Page...
  • จากนั้นไปที่แท๊ป Page ที่ Orientation ปรับได้ตามใจชอบเลยครับพี่น้อง

เพิ่มเติม
  • มี Help (F1) ให้ใช้โปรแกรมใช้
  • อย่าเป็นเหมือนข้าน้อย ชั่งโง่สิ้นดี

อ้างอิง
  • http://stks.or.th/wiki/doku.php?id=writer:wt150

Tuesday, June 22, 2010

Set alias site or sub site of Apache2

  • คิดว่าบทความเนี๋ย sub site เนี๋ยคงจะคล้ายการ Add Virtual Directory หรือ Add Application
  • แต่ไม่ใช่การ Add Web Site ของ IIS แน่ๆ
  • การ Add Web Site ของ IIS น่าจะคล้ายกับการทำ Virtual Host ใน Apache มากว่านะ
  • ที่บอกว่าบทความนี้คล้าย Add Virtual Direcotry และ Add Application ของ IIS
  • ให้คิดว่า ละเอียดลงไปอีกก็คิดว่าน่าจะคล้ายกับ Add Virtual Directory หว่า
  • เพราะ การเพิ่ม Add Virtual Directory ไม่ต้องเลือก Application Pool นิครับ
  • ส่วนการ Add Application เราสามารถกำหนดว่าจะใช้ Application Pool ตัวใหน
  • ทางฝั่ง Ubuntu หรือ Linux จะอยู่ประมาณไฟล์ default
  • ใน /etc/apache2/sites-available/default (base on debian)
  • ถ้าเป็นฝั่ง redhat จะอยู่ในไฟล์ประมาณ /etc/apache2/httpd.conf
  • ให้เรามองอยู่ด้านล่างเราจะเห็นประมาณ Alias ... ที่นั่นแหละคือ sub website ของเรา
  • ดังภาพในตัวอย่างคอนฟิกด้านบน sub site แรกเราจะเข้าโดย http://localhost/doc/
  • ซึ่งเว็บแรกนี้จะไป list ไฟล์ใน /usr/share/doc/ มาแสดงในหน้าเว็บนี้
  • อีกเว็บก็เค้าแบบนี้ http://localhost/jui/ แค่นี้แหละ อันนี้ไม่ใช่การสร้าง site ใหม่นะครับ แค่ sub site

บทความที่เกี่ยวข้อง


อ้างอิง
  • Ubuntu 10.04

Apache2 enable & disable directory browsing on Lucid

  • บน IIS 7 เค้าปรับที่ Directory Browsing คลิกเข้าไปแล้ว enable ได้เลยซึ่งค่าเริ่มต้นของเค้าคือ disable หว่า แต่ apache ไม่ใช่
  • ค่าเริ่มต้นของ apache คือ enable ถ้าไม่พบไฟล์ default ที่กำหนดไว้ จะ list ไฟล์ออกมาแสดงทั้งหมด
  • โดย web root ให้เราไปปรับคอนฟิกที่นี่เลย /etc/apache2/sites-available/default โดยเติมเครื่องหมาย minus (เครื่องหมายลบ) ไว้ด้านหน้า -Indexes ที่อยู่ หลัง Options จากนั้น restart apache ด้วย (หรือลบ Indexes ออกไปเลยก็ได้เช่นกัน)
  • ถ้าเป็น userdir เราสามารถปรับค่าได้ที่ไฟล์ /etc/apache2/mods-available/userdir.conf
  • แค่เนี๋ยเว็บเราก็ปลอดภัยขึ้นอีกระดับหนึ่งแล้วครับพี่น้อง

เพิ่มเติม

  • เราสามารถกำหนด default document ได้โดยเพิ่ม option เนี๋ย DirectoryIndex
DirectoryIndex index.html index.php default.php default.html
  • ซึ่งเราไฟล์ปรับค่า default document root คือ /etc/apache2/mods-available/dir.conf

อ้างอิง
  • http://www.experts-exchange.com/Software/Server_Software/Web_Servers/Apache/Q_23375727.html
  • Config all in Ubuntu 10.04