【发布时间】:2012-01-07 00:42:59
【问题描述】:
我的托管服务器上有一个 C++ 二进制文件(由 Arvixe 托管,仅供参考)。我的网站上有一个表格,需要 3 个输入。我采用这 3 个输入并使用 PHP 将它们放入一个文件中。我正在尝试从 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”,对吗?
-
正确。那可能是我的问题。无论如何我可以在我的 Mac 上将它编译成 Linux 二进制文件吗?
-
我认为它依赖于架构,但是有cross-compiling techniques。我自己没有经验,但看起来 gcc/g++ 会是一个很好的解决方案。还有这个wikipedia article。
-
也许我应该在 linux 机器上编译它吧?你认为这会解决我的问题吗?
-
我知道。我是说假设二进制编译是问题,然后在同一架构中的同一操作系统中编译应该可以解决我的问题。它是 x86_64。我将下载 CentOS 并尝试一下。感谢您的帮助。