บน Windows PHP จะเรียกใช้ shell command อย่างไร?

Patrickz 2.0

มีน้องคนหนึ่งถามมา... อันที่จริงไม่ยากหรอก ตอบลงในนี้ดีกว่า เดี่ยวใครถามอีก จะโบ้ยให้มาอ่านที่นี่แหล่ะ

คำสั่งที่ PHP เรียกใช้ shell มีสองคำสั่งคือ
exec()
string exec ( string $command [, array &$output [, int &$return_var]] )
system()
string system ( string $command [, int &$return_var] )

วิธีเีรียกใช้งานก็แค่

echo system("dir");

...

...

...

แต่หลายคนคงไม่ผ่าน อาจเพราะหลายๆ สาเหตุ แต่สาเหตุที่เจอบ่อยๆ คือ ไม่มี permission เพียงพอที่จะสั่งใช้งานได้ยกตัวอย่างเช่น
Unable to fork อันนี้เจอประจำ สาเหตุเพราะว่า C:\WINDOWS\system32\cmd.exe ไม่มี permission ในการอ่านเขียน

อ่ะ ถ้าเป็นอย่างนี้ permission ที่ควรตั้งให้คือ Read & Execute, Read ส่วน write ก็เลือกได้ หากมีการเขียนไฟล์ นั่นก็เพียงพอแล้ว


แต่ส่วนใหญ่ Server ที่มีระดับ security มากๆ มักจะกำหนด PHP ให้เป็น safe mode   ดังนั้นเราต้องกำหนด safe_mode_exec_dir และ ใน php.ini ด้วยว่า folder จะสามารถใช้งานได้จากคำสั่ง system, exec

ลองดูครับ

บันทึกนี้เขียนที่ GotoKnow โดย  ใน Patrickz - just a developer

คำสำคัญ (Tags)#opensource#system#windows#php#iis#permission#shell#cli#cmd.exe#exec

หมายเลขบันทึก: 121548, เขียน: 23 Aug 2007 @ 16:21, แก้ไข, 20 Jun 2012 @ 14:42, สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ, ความเห็น: 2, อ่าน: คลิก
บันทึกล่าสุด


ความเห็น (2)

phetpoo
IP: xxx.121.225.43
เขียนเมื่อ 23 Aug 2007 @ 21:42

ขอบคุณครับ

Patrickz 2.0
เขียนเมื่อ 18 Aug 2008 @ 13:32

เพิ่งสังเกตุว่า Windows XP ไม่มี หน้าต่างให้ set permission อย่างรูปข้างบน ไม่แน่ใจเหมือนกัน แต่เครื่องผมไม่มี แต่ไม่เป็นไร ไม่มี gui ให้กำหนดก็ไม่เป็นไร ก็เลยใช้ command line แทน โดยคำสั่ง cacls นั่นเอง

cacls c:\windows\system32\cmd.exe /E /G MACHINE\IUSR_MACHINE:R

* MACHINE\IUSR_MACHINE เ็ป็นชื่อเครื่อง
* R อาจเป็นค่าอื่นๆ เช่น R=Read / W = Write / C = Change(write) / F=Full control

รายละเอียดเพิ่มเติมลองดู link ด้านล่าง

Link
การใช้งาน CACLS.EXE