2011-08-25 87 views
4

这有点复杂。 :-)我有一个用PHP编写的网站,需要调用.NET编写的外部程序,在Mono下运行。它调用程序有:从PHP调用单声道

/path/mono /path/executable arguments... 

按通常(我也试图把这个变成一个bash脚本,并调用脚本本身的PHP)。

据我所知,一切都按照要求设置。 Mono本身运行正常,可执行文件(或脚本)具有可执行权限,所有者都可以。如果我从服务器上的命令行(Debian Lenny)发出上面的命令行(或者调用提到的脚本),那么一切正常,我的可执行文件无错地执行,所以也可以确定正确的设置。但是,如果PHP调用相同(使用exec(),system()或任何其他变体),我立即从Mono获得6的退出代码,并且我的可执行文件根本不运行(为了测试它,我使用“Hello World”可执行文件,它只发出单个输出行并返回0)。编译没有任何额外的依赖,只是一个真正的“你好词”。这是绝对肯定的,这个程序不会返回退出代码6,它必须来自单声道,但我找不到它在任何地方记录。

我可以从PHP调用其他任何东西,所以它不是安全模式或任何类似的限制,它们会阻止我从PHP执行外部程序。

感谢您的任何想法...

+0

单已经很大支持Web服务。如果你只是试图执行用.NET编写的东西,为什么不通过服务暴露它? –

+0

你是通过网络服务器还是从命令行调用PHP脚本?请记住,在CLI模式下,PHP的设置通常是非常不同的。 SAPI模式。 –

+0

使用'exec()'是一个非常非常糟糕的主意。 – skolima

回答

2

尝试在命令行,但与运行的网络服务器(WWW的数据或Apache)用户执行单。

ej。

#su apache 
$/path/to/mono /path/to/program.exe 

,我已经使用EXEC的共同问题是一个不同的环境变量(看,如果是bash或什么Apache是​​用sh),权限用户/阿帕奇组等