PHP Shell Script รันโปรแกรมได้ไม่ต้องผ่านหน้า website
ไม่ทราบว่าคุณเคยเขียน โปรแกรมในลักษณะของ Shell Script กันมาบ้างหรือยัง
ถ้าเคยคุณคงจะใช้ Bash Script หรือไม่ก็คงจะเป็น Perl Script
ซึ่งการใช้ทั้ง 2 ภาษา อาจจะยากสำหรับคนที่เขียนเป็นเฉพาะ PHP
วันนี้ผมจะมาแนะนำวิธีการเขียน PHP ให้ทำงานในลักษณะของ Shell Script
เพื่อที่เราจะได้เขียนโปรแกรมเพื่อทำงานบางอย่างที่ต้องทำทุกวันใน server
ที่เป็น Linux/Unix โดยการใช้ crontab เข้ามาช่วยในการตั้งเวลา
ซึ่งอาจจะเป็นโปรแปรแกรม Backup ข้อมูลก็ได้
หลายคนที่เคยเขียน Shell Script มาไม่ว่าจะใช้ Bash Scrip หรือว่า Perl
Script ก็คงไม่ยากอะไร หากว่าต้องการเขียนโปรแกรมเพื่อที่จะทำการ backup
ข้อมูลทุกๆ วันโดยการใช้ crontab เข้ามาช่วยในการตั้งเวลา
แต่หากว่าใครที่เขียนเป็นเฉพาะ PHP คงจะคิดว่าทำไม่ได้แน่ๆๆ เพราะคิดว่า
PHP ทำงานในลักษณะของ command line ไม่ได้
แต่วันนี้ผมจะมาแนะนำ ว่า PHP ก็ทำได้ ( Script
ที่ใช้ทดสอบต่อไปนี้จะใช้ run ได้บน server ที่ใช้ Linux/Unix
เท่านั้นนะครับ แต่ถ้าหากว่าใครจะนำไปดัดแปลงไปใช้กับ windows ก็ได้นะ
และที่สำคัญ server ที่คุณใช้ควรที่จะสามารถตั้ง contab ได้ด้วย เพื่อจะได้
ทดสอบ script กันได้ หากว่าสามารถใช้ telnet หรือว่า ssh ได้ก็จะดีมากๆๆ )
ในการสั่งให้ PHP ทำงานในแบบ command line นั้นสามารถสั่งได้โดยการเพิ่ม
#!/usr/bin/php เข้าไปที่บรรทัดแรกสุดของ file เท่านั้น (ใครใช้ Perl
มาก่อนก็คุ้นหน้าคุ้นตากันอยู่แล้ว) โดยที่ #!/usr/bin/php คือ path ของ
php ที่ server นะครับ แล้วคุณคงสงสัยอีกใช้เปล่าครับ ว่าเราจะรู้ได้ยังไง
ว่า server ของเรามี path ของ php อยู่ที่ไหน ให้คุณลอง telnet หรือ ssh
เข้าไปที่ server นะครับ (ถ้าทำได้) แล้วลองใช้คำสั่ง นี้ดูครับ
1
2
| $which php
/usr/local/bin/php
|
คุณก็จะรู้ path ของ php แล้วครับ แต่ถ้าหากว่าทำไม่ได้ก็ลองเด่าดูแล้วกัน…ไม่น่าจะเกิน #!/usr/bin/php หรือ #!/usr/local/bin/php
ทีนี้มาลอง เขียน php script แบบ command line โปรแรกมแรกกันดูเลยดีกว่า ตั้งชื่อว่า comline.php แล้วกัน
1
2
3
4
5
| #!/usr/bin/php -q
<?php
print "Test PHP from command line ";
?>
|
จากนั้นให้ทำการกำหนด permission ของ file ให้สามารถ run ได้โดยใช้คำสั่ง
$chmod 755 comline.php ( อันนี้ สำหรับ Linux/Unix เท่านั้นนะ Windows ไม่ต้องทำ )
ที่นี้ก็มาลอง run โปรแกรมของเราดู ได้เลย
1
2
| $./comline.php
Test PHP from command line
|
แต่ถ้าหากว่าเป็น windows ก็ใช้คำสั่งดังนี้ครับ
1
2
| C:\php\cli\php-cli.exe comline.php
Test PHP from command line
|
เพิ่มเติมอีกนิดหนึงครับ ถ้าหากว่าสั่ง run แล้วมี error ว่าไม่พบ file
php4ts.dll และ php4ts.lib ให้ทำการ copy 2 file นี้จาก c:\php\ มาไว้ที่
c:\php\cli\ นะครับ
และสำหรับ windows คุณก็สามารถทำเป็น shortcut
เพื่อให้เรียกใช้ได้ง่ายกว่านี้ก็ได้ โดยการ คลิกขวาที่ desktop แล้วเลือก
new -> shortcut แล้วใส่ ข้อมูลลงไปดังรูปก็ได้
ทีนี้เราก็เห็นแล้วว่า php สามารถที่จะนำมาเขียนโปรแกรมแบบ command line ได้ไม่ใช่ว่าจะเขียนให้ run ผ่านหน้า web ได้อย่างเดี่ยว
ต่อ ไปเราก็จะมาลองทำโปรแกรม backup ข้อมูล โดยการ copy ข้อมูลจาก drive
หนึ่งไปยังอีก drive หนึง หรือจาก folder หนึ่งไปอีก folder ก็ได้
มาดู code กันเลยดีกว่า ตั้งชื่อว่า backup.php แล้วกัน
1
2
3
4
5
6
7
8
9
10
| #!/usr/bin/php -q
<?php
$file = "test.html";
$dir_file = "/usr/www/";
$dir_backup = "/usr/backup/";
copy($dir_file.$file, $dir_backup.$file);
?>
|
จากตัวอย่างจะเป็นการ copy ข้อมูล /usr/www/test.html ไปไว้ที่
/usr/backup/test.html หากว่าคุณต้องการจะทำการ backup ข้อมูลทั้ง folder
ก็ลองดัดแปลงเอาเองนะครับ
และหากว่า ต้องการทำการ backup ข้อมูลบน windows คุณก็ทำการเปลี่ยน จาก /usr/www/ เป็น c:www เองนะครับ ลองดู…
ทีนี้เมื่อเราได้ โปรแกรมเพื่อทำการ backup ข้อมูลมาแล้ว เราจะมานั้งสั้งให้มันทำงาน ทุกๆๆ วันก็ยังไง อยู่
เรามาใช้ crontab ตั้งเวลาให้มันทำงานดีกว่า ( ใช้ได้เฉพาะบน Linux/Unix นะครับ)
เริ่มจากการสร้าง file ชื่อ backup.cron ก่อน นะ ที่จริงตั้งชื่ออะไรก็ได้
1
| 0 0 * * * /usr/www/backup.php
|
จากตัวอย่างจะเป็นการสั้งให้ทำงาน ทุกๆๆ วันเวลา 0.00 นะครับ
ถ้าหากว่าต้องการข้อมูลเพิ่มเติมเกี่ยวกับเรื่อง crontab ก็ลองหาหนังสือ
Linux มาศึกษาดูนะครับ
ทีนี้เราก็จะมาสั้งให้ crontab เราทำงานกันเลย โดยใช้คำสั่ง
และสามารถดู ว่า crontab มี job อะไรทำงานอยู่บ้างได้โดยการใช้คำสั่ง
1
2
| $crontab -l
0 0 * * * /usr/www/backup.php
|
และถ้าต้องการลบงานที่สั่งไว้ ก็สามารถใช้คำสั่ง
1
2
| $ crontab -r
remove crontab for xxx? y
|
จากนี้ไปเราก็ไม่ต้องกลัวว่าจะลืม backup ข้อมูลแล้ว หุหุ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น