【问题标题】:Run C++ Executable on Linux Server Using PHP使用 PHP 在 Linux 服务器上运行 C++ 可执行文件
【发布时间】: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 并尝试一下。感谢您的帮助。

标签: php c++ linux


【解决方案1】:

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

【讨论】:

  • exec() 被允许且安全模式未启用。
猜你喜欢
  • 2013-09-13
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2015-08-21
  • 1970-01-01
相关资源
最近更新 更多