从PHP执行Golang二进制文件';s shell_exec()函数

从PHP执行Golang二进制文件';s shell_exec()函数,php,go,Php,Go,我编译了一个golang二进制文件,它接受1个参数,生成一个PDF文件,然后将其上传到AWS S3。二进制文件在shell中工作得很好,但是当尝试使用PHP的shell_exec()、exec()、passthru()和service()函数执行它时,它将不会执行(没有错误消息或日志条目)。我甚至尝试过从PHP的shell_exec调用一个shell脚本(.sh),该脚本执行二进制文件(在shell中也可以正常工作),但没有效果 权限很好,PHP的shell\u exec()适用于所有其他实例

我编译了一个golang二进制文件,它接受1个参数,生成一个PDF文件,然后将其上传到AWS S3。二进制文件在shell中工作得很好,但是当尝试使用PHP的
shell_exec()
exec()
passthru()
service()
函数执行它时,它将不会执行(没有错误消息或日志条目)。我甚至尝试过从PHP的shell_exec调用一个shell脚本(.sh),该脚本执行二进制文件(在shell中也可以正常工作),但没有效果


权限很好,PHP的
shell\u exec()
适用于所有其他实例

shell_exec函数可能需要sudo的密码

sudo密码的Linux管道

shell_exec('echo "YOURPASS" | sudo -u root -S your_script.sh');



看来我找到了自己的答案:

事实证明,GoLang二进制文件在查找与二进制文件本身的目录路径相关的资产时遇到了问题。对于任何有同样问题的人来说,这会给你很大帮助。(请注意,@Intermernet的答案不是公认的答案)

在我的例子中,编译后的二进制文件无法从可执行工作目录中找到资产(pdf、图像等)

对于任何编译需要跟踪资产的便携式golang二进制文件的人,以下代码将是您的朋友:

ex, err := os.Executable()
if err != nil {
    panic(err)
}
exPath := filepath.Dir(ex)
请注意,
exPath
go-run
go-build
之间将不相同。因此,您需要使用构建版本进行测试


为什么我没有收到任何错误消息,我将保留另一个问题

如果没有看到错误消息,您如何知道它没有执行?没有消息就是好消息,没有?:)golang二进制文件显示所有AWS上载输出(ETAG),因此即使在I
echo shell\u exec(/path/to/binary)
时,它也应该输出一个响应您是否尝试在命令末尾添加
2>&1
?例如,如果您的命令是:
shell_exec('your_script.sh')它将变成
shell_exec('your_script.sh2>&1')
@mdexp刚刚尝试了您的建议的不同变体,但没有发现在php脚本中使用的YETPL提供执行字符串。我发现了我自己发布的问题。非常感谢您的投入!你能进一步解释一下吗?为什么需要使用sudo运行某些东西?