2011-12-19 67 views
3

我的托管服务器上有一个C++二进制文件(使用Arvixe FYI托管)。我在我的网站上有一个需要3个输入的表单。我把这3个输入,并使用PHP将它们放入一个文件。我正试图从PHP中调用我的C++应用程序。该应用程序需要2个参数,第一个是带有输入的文件,第二个是需要输出的文件。使用PHP在Linux服务器上运行C++可执行文件

当我使用终端运行时,该应用在我的Mac上正常工作,但是当我将它放在托管服务器上时,该应用未运行。

这里是我的脚本PHP代码:

$user = JFactory::getUser(); 
$time_date = date("m-d-Y").time(); 
$file1 = "model1_".$user->id."_".$time_date."_input.txt"; 
$file2 = "model1_".$user->id."_".$time_date."_output.txt"; 
$path1 = "/home/hhansen/public_html/ads/".$file1; 
$path2 = "/home/hhansen/public_html/ads/".$file2; 

$file_handle = fopen($path1,'w'); 

$content = trim($_POST['form']['Input 1'])."\r\n"; 
$content .= trim($_POST['form']['Input 2'])."\r\n"; 
$content .= trim($_POST['form']['Input 3'])."\r\n"; 

fwrite($file_handle,$content); 
fclose($file_handle); 

$output = exec("/home/hhansen/public_html/ads/./model1 $path1 $path2",$retval); 

是否有人可以提供一些线索?输入文件正在直接创建。我对服务器内的应用程序具有执行权限。我不确定可执行文件是否完全没有运行,或者它是否因为权限问题或其他原因而没有生成输出。

  • 它是我的语法吗?
  • 我使用了错误的功能吗?
  • 我应该在PHP中使用什么命令将命令发送到终端并执行此操作?
+0

你把它编译成Linux二进制文件吗?你不能从Mac复制和粘贴到Linux。二进制文件是“model1”,对吗? – FakeRainBrigand 2011-12-19 00:35:51

+0

正确。这可能是我的问题。无论如何,我可以将它编译到我的Mac上的Linux二进制文件? – hanleyhansen 2011-12-19 00:41:40

+0

我认为它是依赖于架构的,但是有[交叉编译技术](http://www.gc-linux.org/wiki/Cross-compiling)。我没有经验做我自己,但它看起来像gcc/g ++将是一个很好的解决方案。还有[维基百科文章](http://en.wikipedia.org/wiki/Cross_compiler#GCC_and_cross_compilation)。 – FakeRainBrigand 2011-12-19 00:56:44

回答

0

大多数商业共享主机以安全模式运行PHP,它不允许使用exec()或至少将其限制为特殊目录。用简单的可执行文件检查。

+0

exec()被允许并且安全模式未被启用。 – hanleyhansen 2011-12-19 00:46:29