คือพอดีลองใช้
<?php
exec(‘ffmpeg …’);
?>
พอรันหน้าเว็บ …/ffmpeg.php
มันกลับไม่รัน process ใน ffmpeg ให้ครับแต่พอพิมใน putty php ffmpeg.php มันกลับรันให้เลยไม่ต้องทราบว่าต้องทำอย่างไรครับ
คือพอดีลองใช้
<?php
exec(‘ffmpeg …’);
?>
พอรันหน้าเว็บ …/ffmpeg.php
มันกลับไม่รัน process ใน ffmpeg ให้ครับแต่พอพิมใน putty php ffmpeg.php มันกลับรันให้เลยไม่ต้องทราบว่าต้องทำอย่างไรครับ
อ๋อ เข้าใจแล้วครับ
คำสั่ง exec ปกติมันถูกปิดไว้นะครับ ต้องใช้ CGI เข้ามาช่วยแทนครับ
ffmpeg.cgi
#!/bin/php -d disable_functions=""
<?Php
print "Content-type: text/html
";
exec(....);
?>
#!/bin/php -d disable_functions=""
<?Php
print "Content-type: text/html
";
exec(…);
?>
ใส่ในไฟล์ PHP เลยใช่ป่าวครับ
สรุปคือมันใช้ได้แค่พวก ls อะไรพวกนี้แต่ถ้าจะใช้รันโปรแกรม มันใช้ไม่ได้เลยอะครับ
จะเทสว่ามันเป็นอะไร ก็เข้า shell ไปสั่ง exec ดูครับ แบบ php ffmpeg.php อะไรเงี๊ยะ
ว่าแต่ลองเรียกแบบเต็มรึยังครับ ?
/usr/bin/ffmpeg อะไรเงี๊ยะ
ผมจำไม่ได้ว่า ffmpeg นี่ต้อง root privilege อย่างเดียวหรือเปล่าถึงรันได้ ก็ลองใส่ sudo ไปดูครับ
ลองดูหมดแล้วครับลองใส่ reboot mkdir อะไรพวกนี้ยังไม่ได้เลยครับ
<?php
echo exec(‘reboot’);
?>
อันตรายนะครับ
หากเป็นเครื่อง Dedicate หรือ VPS ให้ใช้ Technique เดียวกับ DirectAdmin จะดีกว่า คือสร้าง crontab ขึ้นมา run โดยอ่าน Tag command จาก file หรือที่อื่นใด
แต่ไม่ควรจะ run โดยตรงจาก PHP ครับ
อ่านที่ผมบอกดีๆครับ
บางโปรแกรม ต้องการ “root privilege” ครับ คือต้องใช้ sudo เข้ามาด้วย
วิธีเช็ค คุณเข้า shell ไป สั่ง รันไฟล์ .php ตรงๆ แล้วดู output ครับ แล้วดูว่ามันขึ้นอะไร
พิม php run.php ใช้งานได้นะครับแต่ทำผ่านหน้าเว็บไม่ได้ครับ
ถ้างั้นก็ไป tail errorlog ครับ แล้วเรียกผ่านหน้าเว็ป แล้วดู error ว่ามันบอกว่าอะไร (ผมเดาว่า error เกี่ยวกับ root privilege)
ซึ่งถ้าใช่ ก็ใส่ sudo ซะครับ
ดูตรง error_log ของ apache หรือป่าวครับ
reboot: Need to be root
sudo: unable to open audit system: Permission denied
ดูใน /etc/php.ini ตรง disable_function ครับ ว่ามันมี function อะไรอยู่ในนั้นบ้าง ถ้ามี exec ก็แปลว่าโดน disable นั่นละครับ
ถ้าเป็น CentOS ให้ปิด SELinux ด้วยครับ
เช็คตรงนั้นหมดแล้วครับยังรับไม่ได้เหมือนเดิมครับ
log ตามนี้ครับ
mkdir: cannot create directory `php’: Permission denied
[Thu Mar 27 23:54:13 2014] [notice] caught SIGTERM, shutting down
[Thu Mar 27 23:54:13 2014] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
[Thu Mar 27 23:54:13 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Thu Mar 27 23:54:13 2014] [notice] Digest: generating secret for digest authentication …
[Thu Mar 27 23:54:13 2014] [notice] Digest: done
[Thu Mar 27 23:54:13 2014] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 configured – resuming normal operations
setenforce 0
perl -pi -e s/=enforcing/=disabled/g /etc/selinux/config
สั่งตามนี้แล้วลองอีกทีฮะ
อยู่ๆ จะมาใช้ exec(“reboot”) เลยไม่ได้หรอก ถ้า httpd รันผ่าน user apache ผมว่าไม่ได้ผลแน่ เว้นแต่ httpd รันบน user root
ถ้าจะให้ output ออกมาด้วยแนะนำ shell_exec()
ปล. ผมไม่เคยเขียน shell_exec() ลึกเท่าไร แค่เดา เอาเท่านั้น
รันคำสั่งได้คิดว่าน่าจะติดตรง Permission ของ folder แบบนี้แก้ยังไงครับ
logs
/var/www/html/encoder/encoder.mp4: Permission denied
ใช้ sudo เข้าช่วยครับ
/etc/sudoers
ปกติ ถ้าทำแนวนี้ ผมก็ใช้ [COLOR=#333333]shell_exec() ครับ แต่เคยใช้กับ Windows เท่านั้น Linux ไม่แน่ใจนะ
exec เฉยๆ อะได้ แต่ผมเคยเห็นเขารันบน root อย่างเดียวเท่านั้นครับ
// ผมกำลังศึกษา FFMPEG อยู่เหมือนกันครับ ทำโปรเจ็คจบโท TT__TT[/COLOR]