แก้ปัญหา PHP MySQL IIS7 ด้วย Windows Vista


หน้าแรก ASP net MS SQL แก้ปัญหา PHP MySQL IIS7 ด้วย Windows Vista


Vista Logo

หลังจากที่เคยทดสอบ PHP, MySQL บน Windows XP มานานพอสมควร พออัพเกรดเวอร์ชั่นของ PHP, MySQL เป็นเวอร์ชั่นที่สูงขึ้นก็ต้องใช้วิธีการอีกแบบหนึ่งที่ได้แนะนำไปแล้ว  คราวนี้พอเปลี่ยนเวอร์ชั่นของวินโดว์จาก XP มาเป็นดาวรุ่งดวงใหม่ Windows Vista Enterprise ก็เจอปัญหาอีกแล้ว เป็นปัญหาของการเปลี่ยนเวอร์ชั่นใหม่ของ IIS เป็นรุ่นที่ 7 และความไม่คุ้นเคยจากหน้าตาที่เปลี่ยนไปเลยงงหนักเข้าไปอีก

ทุกปัญหาต้องเจอทางออก ถ้าคิดนอกกรอบ ใจเย็น รอบคอบ ทดลองแล้วใช้ได้เลย ตัวอย่าง นี้ทดลองบนวินโดว์วิสต้าเวอร์ชั่นสูงสุดสำหรับใช้ส่วนบุคคลในองค์กรคือ Enterprise และเหมือนเดิมคือต้องไปดาวน์โหลด PHP เวอร์ชั่นล่าสุดที่เป็นไฟล์ซิป (ไม่ใช่ตัวติดตั้ง Installer ในตัวอย่างผมใช้ไฟล์ php-5.1.6-Win32.zip และ pecl-5.1.6-Win32.zip สำหรับ Extension) เพื่อนำมาติดตั้งเองด้วยมือแบบ manual จากเว็บไซต์ www.php.net

iis+php_mysql

ได้มาแล้วก็คลายไฟล์ทั้งหมดลงในไดรว์ซี แก้ไขชื่อโฟลเดอร์ให้สั้นจำง่ายเป็น C:inetpubphp เพื่อทำการติดตั้งต่อไปตามขั้นตอนต่อไปนี้ครับ

  • สร้าง โฟลเดอร์ชื่อ uploadtmp และ sessiontmp ไว้ภายในโฟลเดอร์ C:inetpubphp และกำหนดสิทธิให้กับ Everyone สามารถจัดการได้แบบ Full control
  • จัดการก็อบปี้ไฟล์ php.ini-dist ไปไว้ในโฟลเดอร์ C:windows และเปลี่ยนชื่อใหม่เป็น php.ini แล้วทำการแก้ไขไฟล์ดังนี้
    บรรทัด
    ;output_buffering = Off 
    แก้เป็น
    output_buffering = 4096
    บรรทัด
    register_globals = Off
    แก้ไขเป็น 
    register_globals = On 
    บรรทัด
    ;doc_root = 
    แก้ไขเป็น 
    doc_root = 
    บรรทัด
    extension_dir = "./"
    แก้ไขเป็น 
    extension_dir = "C:InetpubPHPext"
    บรรทัด
    ; cgi.force_redirect = 1
    แก้ไขเป็น 
    cgi.force_redirect = 0 
    บรรทัด
    upload_tmp_dir =
    แก้ไขเป็น 
    upload_tmp_dir = C:InetpubPHPuploadtmp 
    บรรทัดตรง extension เลือกเอาเครื่องหมาย ( ; ) ที่อยู่ข้างหน้าออก ตามที่ต้องการใช้ ส่วนใหญ่ก็สามตัวนี้
    extension=php_mbstring.dll
    extension=php_gd2.dll
    extension=php_mysql.dll

    บรรทัด
    ;sendmail_from = me@example.com 
    แก้ไขเป็น
    sendmail_from = me@localhost.com 
    บรรทัด
    ;session.save_path = "/tmp"
    แก้ไขเป็น 
    session.save_path = "C:InetpubPHPsessiontmp" 
    จากนั้นก็จัดการเซฟไฟล์นี้ (ถ้าเซฟไม่ได้ต้องเข้าไปกำหนดใน properties ของไฟล์ให้สิทธิ Everyone สามารถเขียนได้นะครับ)
  • ขั้น ตอนต่อไปคือการกำหนดให้ IIS7 รู้จักภาษา PHP และทำงานได้ถูกต้อง เริ่มต้นด้วยการเปิด IIS7 ขึ้นมาก่อน ผ่านทาง Administrative tools > Internet Information Services (IIS) Manager ดังภาพ (เริ่มงง เพราะหน้าตาเปี๋ยนไป มันต่างจาก IIS5 - 6 อย่างสิ้นเชิง)

  • มีหัวข้อที่ต้องจัดการเรียงลำดับคือ ISAPI filters, ISAPI and CGI Restriction, Default Document, Handler Mappings เริ่มต้นที่ ISAPI filters ดับเบิ้ลคลิกเลือก Add จะพบกรอบด้านล่าง ใส่ชื่อ Filter name: เป็น PHP และ Excutable: คลิกปุ่มบราวซ์เพื่อเลือกไฟล์ C:inetpubphpphp5isapi.dll

  • ISAPI and CGI Restriction ดับเบิ้ลคลิกเลือก Add จะพบกรอบด้านล่าง ให้กำหนด ISAPI and CGI path: คลิกปุ่มบราวซ์เพื่อเลือกไฟล์ C:inetpubphpphp5isapi.dll Description: PHP อย่าลืมคลิกเลือก Allow extension.. แล้วคลิกปุ่ม OK

  • ในหัวข้อนี้ ISAPI and CGI Restriction ให้คลิกเลือก Edit Feature Settings... เพื่อกำหนดการทำงานของสคริปต์ดังภาพ คลิก OK

  • ที่หัวข้อ Handler Mappings ดับเบิ้ลคลิกเลือก Add Script map จะพบกรอบด้านล่าง ใส่ชื่อ Request path: เป็น *.php และ Excutable: คลิกปุ่มบราวซ์เพื่อเลือกไฟล์ C:inetpubphpphp5isapi.dll อีกครั้งและใส่ Name เป็น PHP คลิกปุ่ม OK

  • จะมีกรอบถามยืนยันว่าจะให้ สิทธิในการทำงานของสคริปต์ ISAPI extension หรือไม่ ให้คลิก Yes เพื่อให้ระบบอนุญาตการทำงาน (Allowed)

  • หัวข้อ Default Document ใช้เพื่อกำหนดชื่อไฟล์แรกในการเรียกเว็บไซต์ ในที่นี้ให้เพิ่ม index.php เข้าไปแล้วคลิกที่ Apply ด้านขวามือ

  • เป็นอันเสร็จสิ้นการปรับแต่ง IIS ให้ปิด IIS Manager ไปและไปที่ My Computer เลือก Properties > Advanced System Setting > Environment variables

  • Environment variables ให้คลิกที่ Path เลือก Edit แล้วเติมพาธของ PHP ต่อท้ายลงไปคือ C:inetpubphp; ดังภาพ คลิก OK > OK แล้วปิดหน้านี้ไป รีสตาร์ทเครื่องสักครั้งหนึ่ง

  • เขียนไฟล์ php เพื่อทดสอบการติดตั้ง โดยใช้ Notepad เขียนดังตัวอย่าง

    จัดเก็บไฟล์ในชื่อ phpinfo.php เรียกผ่านบราวเซอร์ด้วยการพิมพ์ http://localhost/phpinfo.php ถ้าแสดงผลดังภาพข้างล่างก็แสดงความยินดีด้วย คุณติดตั้ง PHP ได้สำเร็จ


การติดตั้ง MySQL

คราวนี้ก็มาถึงการติดตั้ง MySQL บนระบบปฏิบัติการ Windows Vista Enterprise เพื่อเป็นการเสริมทัพให้กับ PHP ในการติดต่อกับฐานข้อมูล เหมื่อนกับ PHP คือเราจะไปดาวน์โหลดไฟล์ชนิดติดตั้งเอง (ตัวอย่างนี้ผมใช้ mysql-noinstall-5.0.26-win32.zip) ซึ่งวิธีการติดตั้งก็ไม่ยากคล้ายกับการติดตั้งบน WindowsXP มีปลีกย่อยข้อแตกต่างนิดหน่อยดังนี้

  • คลายไฟล์ที่ดาวน์โหลดออกมา เอาเฉพาะโฟลเดอร์ mysql-5.0.26-win32 ไปไว้ที่ไดรว์ C: เปลี่ยนชื่อให้เป็น C:mysql
  • จัดการก็อบปี้ไฟล์ my-large.ini ไปไว้ใน C:windows แล้วเปลี่ยนชื่อเป็น my.ini จากนั้นทำการแก้ไขดังนี้
    # The following options will be passed to all MySQL clients
    [client]
    #password = your_password
    port = 3306
    default-character-set = tis620
    socket = C:/MySQL/tmp/mysql.sock


    # Here follows entries for some specific programs
    # The MySQL server
    [mysqld]
    port = 3306
    default-character-set = tis620
    socket = C:/MySQL/tmp/mysql.sock
    basedir = C:/MySQL/
    datadir = C:/MySQL/data/

    skip-locking
    แก้และเพิ่มเติมเฉพาะบรรทัดสีแดง ทำการจัดเก็บและปิดไฟล์
  • ขั้นต่อไปนี้สำคัญมากครับ เปิดบราวเซอร์เพื่อไปยังโฟลเดอร์ C:mysqlbin คลิกเมาส์ขวาเลือกที่ไฟล์ mysqld-max-nt.exe เลือกหัวข้อ Run as administrator จะมีกรอบถามยืนยันให้คลิกที่กรอบ Allow เพื่อยืนยัน

  • ไป ที่เมนู Start > Start Search > cmd กด Ctrl+Shift ค้างไว้แล้วกด Enter เพื่อเข้าทำงานในโหมดดอสคอมมานด์ของผู้ดูแลระบบ ทำการติดตั้ง MySQL เป็น Service หนึ่งของระบบ ด้วยการพิมพ์คำสั่ง (ที่เป็นสีแดง) ดังนี้ 
    C:Usermontree> cd พิมพ์ cd กด Enter เพื่ออกไปที่ C:>
    C:> cd mysqlbin พิมพ์เพื่อเข้าไปในโฟลเดอร์ C:mysqlbin>
    C:mysqlbin> mysqld-max-nt --install เพื่อติดตั้ง mysql เป็น Service
  • ไป ที่ Administrative tools > Services จะเห็นว่ามี MySQL เป็นเซอร์วิสหนึ่งแต่ยัง Stop อยู่ ไม่ต้องกังวลใจในตอนนี้ครับ แล้วอย่าลืมไปกำหนดพาธการทำงานของ MySQL ที่ My Computer > Properties > Advanced System Setting > Environment variables เพิ่มพาธ C:mysql; เข้าไปต่อท้ายจากพาธของ php
  • ก่อนการทดสอบว่าใช้งานได้หรือไม่ ให้รีสตาร์ทเครื่องอีกสักรอบก่อนครับ
  • ไปที่ Administrative tools > Services อีกที จะเห็นว่ามี MySQL เป็นเซอร์วิสหนึ่งที่ทำงานแบบ Automatic และ Start แล้ว
  • ลองทำการเชื่อมต่อฐานข้อมูลด้วย phpMyAdmin ดูได้เลยครับ พร้อมทั้งกำหนดรหัสผ่านสำหรับ root ด้วย และสร้างฐานข้อมูลต่อไป

มี เพื่อนๆ หลายคนถามมาว่า ใน phpMyAdmin อยากจะกำหนดให้แต่ละคนล็อกอิน และจัดการฐานข้อมูลของตนเอง เห็นเฉพาะฐานข้อมูลของตนเอง เหมือนที่ผู้ให้บริการเซิร์ฟเวอร์เขาทำกัน จะทำอย่างไร? ไม่ยากครับให้คุณแก้ค่า Config ของ phpMyAdmin ตามตัวอย่าง

บันทึกไฟล์ เมื่อเข้าสู่หน้าล็อกอินของ phpMyAdmin ก็จะเป็นดังภาพข้างล่างนี้

เมื่อสร้างผู้ใช้งาน รหัสผ่าน และฐานข้อมูลให้แต่ละคนแล้ว ก็จะสามารถเข้าไปทำงานได้เฉพาะฐานข้อมูลของตนดังภาพข้างล่างนี้

คงจะเป็นประโยชน์กับเพื่อนครูเราบ้างนะครับ นี่ก็ลองติดตั้งเพราะอยากลองของใหม่เลยต้องนั่งงมหาวิธีการติดตั้งอยู่หลายวันครับ ลองสารพัดรูปแบบด้วยความที่ติดใจ Windows Vista มันสวยทำงานได้เร็วก็เลยต้องหาวิธีการทำงานเพิ่มเติมให้ได้ ไม่งั้นแย่แน่ๆ เลย เพราะเครื่องโน้ตบุ๊คเครื่องนี้มีงานทั้งงานราษฎร์งานหลวงเพียบ แถมยังใช้ทั้ง ASP, PHP มันเลยยุ่งอย่างนี้แหละ

refer: http://www.krumontree.com/site/index.php/ไขปัญหาคาใจ/71-php-mysql-on-iis7-vista?start=1

ขึ้นไปด้านบน