Topic List
ได้ PHP Script ในการส่ง Twitter เลยเอามาลองใส่เพิ่มใน CMS ที่ผมเขียนใช้เอง
อันสืบเนื่องมาจากผมเขียน CMS ขึ้นมาใช้เอง และได้เห็น CMS ดัง ๆ หลายตัวสามารถส่งข้อความ Twit ได้ อยากได้บ้าง แต่เพิ่งได้มาจากเว็บ Scriptdd.com เลยเอามาดัดแปลงใช้กับ CMS ของตนเองให้สามารถส่งหัวข้อที่สร้างใหม่ไปไว้ใน Twitter
Twitter ของผมคือ @softganz ครับ
ผมสร้างไว้เป็น class api เขียนด้วย PHP ตามตัวอย่าง
ปัญหาเกิดมาจาก script สำหรับตรวจสอบสถานะและแสดงชื่อเพลงที่กำลังเปิดอยู่นั้นกิน CPU time เยอะมาก และ script นั้นยังถูกกำหนดให้ refresh ทุก 30 วินาที เมื่อมีคนเปิดฟังวิทยุพร้อมกับดูสถานะเป็นจำนวนมาก จะทำให้เกิดปัญหากับ CPU load
เลยศึกษา script นั้นดูและเปลี่ยนวิธีการเพื่อไม่ให้เกิด CPU load
แนวทางการทำงานของ script เดิมที่เป็นอยู่
- จะดึงข้อมูลของ Shoutcast จาก host ด้วย fsocket method GET จำนวน 2 ครั้ง คือ ชื่อเพลง กับจำนวนคนฟัง โดยกำหนด timeout ไว้ที่ 6 วินาที
- ตัดข้อความที่ไม่ต้องการออกและแยกแยะเอาข้อความที่ต้องการออกมา
- แสดงผลในหน้าเว็บโดยให้ refresh ทุก ๆ 30 วินาที
ปัญหาที่เกิดขึ้นคือ
- การดึงข้อมูลผ่าน fsocket แต่ละครั้งใช้เวลาพอสมควรเนื่องจาก script อยู่คนละที่กับ Shoutcast server
- เกิด CPU load ในกระบวนการไหนไม่แน่ใจ
- จำนวน request ที่เยอะมากเกิดจาก จำนวนคนฟังหรือหน้าเว็บที่เปิดดูสถานะ x 2 คร้ง/นาที เช่น 150x2=300 ครั้ง/นาที = 5 ครั้ง/วินาที ทำ script ทำงานไม่ทัน
แนวทางใหม่ที่คิดคือ
แทนที่จะให้ทุกคน request แล้วต้องอ่านข้อมูลทุกครั้ง ก็ให้ script ทำงานอัตโนมัติทุก ๆ 30 วินาที ไปดึงข้อมูลจาก Shoutcast แล้วบันทึกเก็บไว้ในไฟล์ แล้วให้ทุกคนอ่านจากไฟล์นี้แทน
ดูตัวอย่าง script ได้จากด้านในนะครับ
เขียน PHP มาก็หลายปี พยายามปรับปรุงความรู้ตัวเองอยู่เรื่อย ๆ วันนี้ได้ Tips ในการเขียนมาเก็บไว้อีกชุดหนึ่ง ก็เอามาจากของคนอื่นแหละ ไว้ค่อยปรับเพิ่มเติมของตนเองวันหลัง
หลังจากที่ตัดสินใจปรับ CMS ที่เขียนอยู่ไปวิ่งบน PHP5 ก็ไม่นึกว่าจะต้องกลับมาทดสอบ CMS กับ PHP4+MySql3 อีกแล้ว แต่หลังจากที่ยังคงมีเว็บที่ดูแลอยู่อีก 3 เว็บยังคงทำงานอยู่บน PHP4 และไม่มีแนวโน้มว่าเขาจะปรับเวอร์ชั่นของ PHP ให้ (หรือเขาจะปรับให้แต่คิดเงินอีกหลายพัน) ก็เลยต้องกลับมาปรับแก้โปรแกรมใหม่ (ซึ่งจริง ๆ ก็คงไม่มากนัก แต่ต้องตรวจสอบใหม่ทั้งระบบ)
พยายามติดตั้ง Apache2+PHP4+MySql3 แต่ติดปัญหาตอนติดตั้ง PHP4
เลยติดตั้ง Lighttpd+php4+MySql5 แทน
ติดตั้ง Lighttpd โดย
sudo apt-get install lighttpd lighttpd-doc
ติดตั้ง php4-cgi
sudo apt-get install php4-cgi
sudo apt-get install php4-mysqlเปิดใช้งาน cgi
sudo lighty-enable-mod cgi
แก้ไขไฟล์ /etc/lighttpd/conf-enabled/10-cgi.conf โดยเอาเครื่องหมาย # หน้า cgi.assign ออกให้หมด
หากใน sources list ไม่มี php4-cgi ก็ให้เพิ่ม sources นี้ใน /etc/apt/sources.list ซึ่งได้มาจาก http://www.dotdeb.org/mirrors/
deb http://mirror.oeg.com.au/packages.dotdeb.org stable all
deb-src http://mirror.oeg.com.au/packages.dotdeb.org stable all
และอาจจะต้องติดตั้ง libzzip-0-12 ก่อน
ข้อมูลอ้างอิง
- Lighttpd Webserver Installation in Debian
- Setting up PHP with Lighttpd
- Running both PHP4 and PHP5
- Php5 y php4 también conviven en mi ubuntu
- Lighttpd FasCGI PHP, MySQL chroot jail installation under Debian Linux
- Install MySQL Server 4.1 on Ubuntu
- หรืออาจะใช้ Cherokee Web Server ซึ่งมีรายละเอียดการติดตั้งที่ How to Forge ยังไม่ได้ลอง แต่ขอเก็บไว้ก่อน
- The Perfect Server - Ubuntu Intrepid Ibex (Ubuntu 8.10)
- Setting up PHP with Lighttpd
ปล. อาจจะมั่ว ๆ ไปนิด วันหลังจะมาเรียบเรียงใหม่อีกทีนะครับ <!-- อย่างแรกคือ ติดตั้ง apache2 ก่อน
sudo apt-get install apache2
ต่อมาติดตั้ง php4-cgi
sudo apt-get install php4-cgi
php จะถูกติดตั้งไว้ที่ ในชื่อ php-cgi -->
เว็บไซท์ http://irrigation.rid.go.th/rid16/ranode มีปัญหามาหลายวันแล้ว วันนี้เลยลองหาทางแก้ไขดู
ปัญหา
Charactor Encoding ผิดพลาด
ใน HTML Code มี meta http-equiv="Content-Type" content="text/html; charset=utf-8" แต่ในเมนู View/Charactor Encoding ยังคงเป็น iso-8859-11 อยู่ ทำให้แสดงภาษาไทยผิดพลาด
ตรวจสอบใน phpinfo ปรากฎว่าใน HTTP Response Headers มีค่า Content-Type เป็น text/html; charset=iso-8859-11 ไม่ยอมเปลี่ยนเป็น utf-8 ตาม meta http-equiv="Content-Type"
วิธีแก้ไข
มีอยู่ 3 จุด (เท่าที่คิดได้) คือ
- เพิ่มคำสั่งในไฟล์ .htaccess
AddDefaultCharset utf-8
- เพิ่มคำสั่งในไฟล์ index.php
iniset('defaultcharset', 'utf-8');
- เพิ่มคำสั่งในไฟล์ index.php
header('Content-Type: text/html;charset=UTF-8');
ที่ทำแล้วได้ผลคือเพิ่มคำสั่งข้างล่างนี้ในไฟล์ index.php
header('Content-Type: text/html;charset=UTF-8');
Example PHP code for download file that nobody know your file url
ตัวอย่าง code สำหรับดาวน์โหลดไฟล์โดยไม่ให้ใครรู้ url ของไฟล์ที่กำลังดาวน์โหลด
ติดตั้ง Ubuntu Desktop ให้เป็น Server (LAMP)
Install Apache
#sudo apt-get install apache2
Enable mod_rewrite
#sudo a2enmod rewrite
เปลี่ยน DocumentRoot ของ apache เป็น folder อื่น และเปิดใช้งาน clean url
#gksudo gedit /etc/apache2/sites-available/default
- เปลี่ยนบรรทัด /var/www/ เป็น /my web folder/ จำนวน 2 ตำแหน่ง
- แก้ค่า AllowOverride ของ /my web folder/ จาก None เป็น AllowOverride All
Install PHP
<a class="hashtag" href="/tags/sudo">#sudo</a> apt-get install php5 libapache2-mod-php5 php5-gd <a class="hashtag" href="/tags/sudo">#sudo</a> /etc/init.d/apache2 restart
Install MySQL
<a class="hashtag" href="/tags/sudo">#sudo</a> apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql phpmyadmin <a class="hashtag" href="/tags/gksudo">#gksudo</a> gedit /etc/php5/apache2/php.ini
add this line extension=mysql.so
#sudo /etc/init.d/apache2 restart
หากมีข้อมูลเก่าของ mysql ก็สามารถ copy มาไว้ที่ /var/lib/mysql แล้ว โดยใช้คำสั่ง
<a class="hashtag" href="/tags/sudo">#sudo</a> cp /media/disk/var/lib/mysql/* /var/lib/mysql/ <a class="hashtag" href="/tags/sudo">#sudo</a> chown -hR mysql /var/lib/mysql/* <a class="hashtag" href="/tags/sudo">#sudo</a> chgrp -hR mysql /var/lib/mysql/*
ทางทีดีคือไปอ่านรายละเอียดจากเว็บต้นฉบับดีกว่าครับ ที่ Installing LAMP On Ubuntu For Newbies
Or from howtoforge.com
#sudo apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert
<a class="hashtag" href="/tags/sudo">#sudo</a> apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
ติดตั้ง Tahoma font
ถึงยังไงผมก็ยังชอบฟอนท์ Tahoma ของ Windows อยู่ดี ก็เลยต้องหาวิธีติดตั้งฟอนท์ Tahoma บน Ubuntu
เจอบทความ Adding Windows fonts in Linux ทดลองดูแล้ว It's work เลยเอาลิงก์มาเก็บไว้ก่อน
วิธีที่ผมใช้ง่ายนิดเดียว คือ copy fonts Tahoma จาก Windows/Fonts มาใว้ใน folder ./fonts ของ home folder
แล้วก็ทำการติดตั้งฟอนต์ทดแทน เพื่อแก้ปัญหาสระเยื้องใน OOo
ติดตั้ง Extensions ของ Firefox ที่ใช้ประจำ คือ CollorZilla , Download Statusbar , DownThemAll , Firebug , FireGestures , NoScript , ShowIP , Xmarks
Install FileZilla
#sudo apt-get install filezilla
Install thunderbird
#sudo apt-get install thunderbird
Install Geany editor
#sudo apt-get install geany
Upgrade OOo.org 2.3.0
#sudo gedit /etc/apt/sources.list
add 2 lines
deb http://download.thaigrid.or.th/pub/ubuntu/contrib gutsy openoffice.org deb-src http://download.thaigrid.or.th/pub/ubuntu/contrib gutsy openoffice.org
<a class="hashtag" href="/tags/sudo">#sudo</a> apt-get update <a class="hashtag" href="/tags/sudo">#sudo</a> apt-get install openoffice.org
NAS200
Mounting SMB Shares Network share permanently mount samba share
Add this line to file /etc/init.d/module-init-tools
#for Aircard 580 modprobe usbserial vendor=0x1199 product=0x0122 mknod /dev/ttyUSB5 c 188 0 # mount NAS200 modprobe smbfs mkdir /media/nas200
Manual mount nas200 to /media/nas200 is
#sudo mount -t smbfs //192.168.1.2/ /media/nas200 -o username=myusername,password=mypassword,uid=1000,mask=000,iocharset=utf8
Make AirCard button on panel
- Right click on panel -> Add to panel
- Select Custom Application Launcher
- Command : xterm -T "Connect to CDMA" -e pppd call cdma
ผมเพิ่งติดตั้ง PHP5 ใหม่ พอเริ่มทำงาน ก็แปลกใจว่าทำไมเวลาที่แสดงในเว็บถึงเร็วไป 1 ชั่วโมง ลองหาทางแก้อยู่พักใหญ่ ก็ยังไม่ได้ เลยเก็บไว้ก่อน
วันนี้เพิ่งกลับมานั่งดูอีกที ปรากฎว่า
- ค่า timezone ใน windows ผิด เป็น Internation Date Line West ซึ่งคงเป็นค่า default แล้วผมไม่ได้เซ็ทใหม่มั๊ง
เลยแก้ไขตามนี้
เปลี่ยน timezone เป็น +7 Bangkok , Hanoi , Jakata
เพิ่มค่าใน php.ini คือ date.timezone=Asia/Bangkok
restart Apache
เรียบร้อยครับผม.
rss2array downloads a remote RSS 0.91 feed and puts most of the useful info into a PHP array. Other feed formats may work too.
I've found this document on site http://www.rssmix.com
and lastRSS.php from site http://lastrss.oslab.net/ is simple yet powerfull PHP class to parse RSS.