PHP Shell Script รันโปรแกรมได้ไม่ต้องผ่านหน้า website
![](https://www.unzeen.com/wp-content/uploads/logo/php.jpg)
หลายคนที่เคยเขียน 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 |
ทีนี้มาลอง เขียน php script แบบ command line โปรแรกมแรกกันดูเลยดีกว่า ตั้งชื่อว่า comline.php แล้วกัน
1 2 3 4 5 | #!/usr/bin/php -q <?php print "Test PHP from command line "; ?> |
$chmod 755 comline.php ( อันนี้ สำหรับ Linux/Unix เท่านั้นนะ Windows ไม่ต้องทำ )
ที่นี้ก็มาลอง run โปรแกรมของเราดู ได้เลย
1 2 | $./comline.php Test PHP from command line |
1 2 | C:\php\cli\php-cli.exe comline.php
Test PHP from command line
|
และสำหรับ 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); ?> |
และหากว่า ต้องการทำการ backup ข้อมูลบน windows คุณก็ทำการเปลี่ยน จาก /usr/www/ เป็น c:www เองนะครับ ลองดู…
ทีนี้เมื่อเราได้ โปรแกรมเพื่อทำการ backup ข้อมูลมาแล้ว เราจะมานั้งสั้งให้มันทำงาน ทุกๆๆ วันก็ยังไง อยู่
เรามาใช้ crontab ตั้งเวลาให้มันทำงานดีกว่า ( ใช้ได้เฉพาะบน Linux/Unix นะครับ)
เริ่มจากการสร้าง file ชื่อ backup.cron ก่อน นะ ที่จริงตั้งชื่ออะไรก็ได้
1 | 0 0 * * * /usr/www/backup.php |
ทีนี้เราก็จะมาสั้งให้ crontab เราทำงานกันเลย โดยใช้คำสั่ง
1 | $crontab backup.cron
|
1 2 | $crontab -l 0 0 * * * /usr/www/backup.php |
1 2 | $ crontab -r remove crontab for xxx? y |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น