นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน
อ่าน: 1419
ความเห็น: 0

PHP Shell Script

PHP Shell Script

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 เราทำงานกันเลย โดยใช้คำสั่ง

1
$crontab backup.cron

และสามารถดู ว่า crontab มี job อะไรทำงานอยู่บ้างได้โดยการใช้คำสั่ง

1
2
$crontab -l
0 0 * * * /usr/www/backup.php

และถ้าต้องการลบงานที่สั่งไว้ ก็สามารถใช้คำสั่ง

1
2
$ crontab -r
remove crontab for xxx? y

จากนี้ไปเราก็ไม่ต้องกลัวว่าจะลืม backup ข้อมูลแล้ว ครับ

https://www.unzeen.com/article/18/

หมวดหมู่บันทึก: เรื่องทั่วไป
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 10 กรกฎาคม 2560 08:26 แก้ไข: 10 กรกฎาคม 2560 08:26 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 ดำขำ และ Ico24 โอ๋-อโณ.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 3.238.107.166
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ