问题描述
运行phpagi时遇到问题:
Encountering a problem when running phpagi:
-- Executing [123@DLPN_C:1] AGI("SIP/1000-00000001", "hello_world.php") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/hello_world.php
hello_world.php: Failed to execute '/var/lib/asterisk/agi-bin/hello_world.php': Exec format error
-- Auto fallthrough, channel 'SIP/1000-00000001' status is 'UNKNOWN' Scheduling destruction of SIP dialog '343930130' in 32000 ms (Method: INVITE)
从命令行:
root@asterisk-test:/var/lib/asterisk/agi-bin# php5 -q hello_world.php
#!/usr/bin/php5 -q
附加信息:
-rwxr-xr-x 1 root root 757 Mar 29 19:32 hello_world.php
drwxrwxr-x 4 root root 4096 Mar 29 19:44 phpagi
-rwxr-xr-x 1 root root 25079 Sep 30 2010 phpagi-asmanager.php
-rwxr-xr-x 1 root root 2322 Sep 30 2010 phpagi-fastagi.php
-rwxr-xr-x 1 root root 67615 Sep 30 2010 phpagi.php
推荐答案
The Exec Format Error is from /bin/bash
, asterisk 将 hello_world.php
作为 bash 执行脚本.
The Exec Format Error is from /bin/bash
, asterisk executes hello_world.php
as a bash script.
shebang
如果您添加了正确的shebang,脚本由给定的 PHP 解释器执行.第一行告诉系统哪个程序应该运行脚本.
If you add a correct shebang, the script get executed by the given PHP intepreter.The first Line tells the System which program should run the script.
#!/usr/bin/env php
要测试您的shebang,请执行脚本本身,而不是通过PHP:root@asterisk-test:/var/lib/asterisk/agi-bin# ./hello_world.php
To test your shebang, execute the script itself, not by PHP:
root@asterisk-test:/var/lib/asterisk/agi-bin# ./hello_world.php
确保它是可执行的:root@asterisk-test:/var/lib/asterisk/agi-bin# chmod +x hello_world.php
替代包装器
创建一个执行 PHP 脚本的 bash 脚本.
Create a bash script that executes the PHP script.
示例 hello_world.sh:/usr/bin/php hello_world.php
example hello_world.sh:
/usr/bin/php hello_world.php
并在拨号方案中调用它AGI("hello_world.sh")
.
and call it in the Dialplan AGI("hello_world.sh")
.
确保 shellscript 是可执行的 chmod +x hello_world.sh
.
Make sure the shellscript is executable chmod +x hello_world.sh
.
这篇关于PHPAGI:执行格式错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!