使用PHP在Linux服务器上运行C++可执行文件

3
我在托管服务器上有一个C++二进制文件(由Arvixe托管)。我在我的网站上有一个表单,需要3个输入。我使用PHP将这3个输入放入一个文件中。我试图从PHP中调用我的C++应用程序。该应用程序需要2个参数,第一个是包含输入的文件,第二个是输出文件。
当我在终端上运行时,该应用程序在我的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中应该使用什么来向终端发送命令并执行它?

你把它编译成Linux二进制文件了吗?你不能直接从Mac复制粘贴到Linux。这个二进制文件是“model1”,对吗? - Brigand
正确。那可能是我的问题。我能在我的 Mac 上将它编译成 Linux 二进制文件吗? - hanleyhansen
我认为这取决于架构,但是有交叉编译技术。我自己没有经验,但看起来gcc/g++是一个不错的解决方案。还有这篇维基百科文章。 - Brigand
只要架构匹配,如果不使用相同的指令集,您的服务器将不知道该怎么处理它。 - Brigand
1
我知道。我的意思是,假设二进制编译是问题所在,那么在相同的操作系统和架构下编译应该可以解决我的问题。而且它是x86_64。我会下载CentOS并尝试一下。感谢您的帮助。 - hanleyhansen
显示剩余3条评论
1个回答

0

大多数商业共享主机都在安全模式下运行PHP,这会禁止exec()函数或者至少将其限制在特定目录中。可以通过一个简单的可执行文件来检查。


允许使用exec()函数且安全模式未启用。 - hanleyhansen

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