PHPAGI: 执行格式错误

3

运行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

你好世界的源代码:http://www.eder.us/projects/phpagi/phpagi/api-docs/__examplesource/exsource_home_html_projects_phpagi_phpagi_examples_dtmf.php_acb7257145e4a5249182c8373cd8e848.html

这是一个关于it技术的网页,其中包含了“你好世界”的源代码。如果你需要深入了解it技术,建议你多看一些相关的资料。

еңЁдҪ зҡ„жәҗд»Јз Ғ/usr/local/bin/phpе’ҢдҪ зҡ„зӨәдҫӢ/usr/bin/php5дёӯпјҢйӮЈд№Ҳ-qејҖе…іжҳҜд»Җд№Ҳпјҹ - clover
安静模式。更多信息请参见此处:https://dev59.com/KG025IYBdhLWcg3wzpeK - AWippler
4个回答

5
"Exec Format Error"是来自于"/bin/bash",asterisk将"hello_world.php"作为一个bash脚本执行。
"shebang"
如果添加了正确的shebang,该脚本将被给定的PHP解释器执行。第一行告诉系统应该运行哪个程序来运行该脚本。 #!/usr/bin/env php 要测试您的shebang,请执行脚本本身,而不是通过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 "alternative wrapper"
创建一个执行PHP脚本的bash脚本。
例如:hello_world.sh:
/usr/bin/php hello_world.php 并在Dialplan中调用它:AGI("hello_world.sh")。"

确保shell脚本可执行 chmod +x hello_world.sh


./hello_world.php 没有运行,但是 php hello_world.php 运行了。 - AWippler
要使./hello_world.php能够在Asterisk中执行,您需要调整shebang以使用PHP所使用的二进制文件。您可以通过执行which php来查看它,并确保它是可执行的。 - pce
我有 /usr/bin/php 和 /usr/bin/php5。php 是指向 php5 的链接。 - AWippler
尝试使用 #!/usr/bin/env php,并且 hello_world.php 可执行吗?我更新了我的答案,请尝试一个替代的包装器。 - pce

3
我在顶部脚本中添加了以下行以使其对我有效。
#!/usr/bin/php -q

1
您的问题不是Asterisk问题,而是一般的Linux问题。请尝试从命令行执行以下操作:
su asterisk -c "/var/lib/asterisk/agi-bin/hello_world.php"

最可能的原因:php路径不正确或selinux已启用但未配置。

请检查您是否拥有 /usr/bin/text2wave 并且它是可执行的。 - arheops
我做。text2wave --help text2wave [选项] 文本文件 将文本文件转换为波形 - AWippler
你检查了SELinux吗?你尝试过禁用它吗?这取决于你的操作系统,通常在/etc/sysconfig/selinux中(更改后需要重新启动)。 - arheops
主机是Debian。SELinux未启用。 - AWippler
尝试执行以下操作:1)停止星号;2)使用“asterisk -vvvc”启动它;3)开启AGI调试模式;4)重新检查输出。 - arheops

0

您能否检查一下您的extensions.confextensions_custom.conf文件,如果分机号和优先级不连续,也会出现此错误。

请参考以下示例:

[context]
exten => 1,1,Answer()
exten => 1,2,AGI(your-agi-script)
exten => 1,3,Hangup()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接