【问题标题】:Executing a C program from PHP从 PHP 执行 C 程序
【发布时间】:2016-10-23 10:08:23
【问题描述】:

我正在执行一个 C 程序,即“.exe”,它是来自 PHP 的可执行文件。

我有一个带有 HTML 的界面,每当我点击一个按钮时它都会调用一个 PHP 文件。

在 PHP 上,它调用一个 shell 脚本。 所以在 PHP 上,我使用以下内容:

echo shell_exec('sh auto_script.sh');

shell文件执行程序.exe如下:

./import -file.txt

import 是我的可执行 C 程序 .exe,而 file.txt 是我目前正在硬编码的输入。

可执行文件 'import' 存储在与调用的 php 文件相同的目录中。

当我在终端上执行 shell 脚本时,它会以必要的输出正确执行。

但是当我尝试从 PHP 执行它时它不起作用。到目前为止,我已授予文件的完全权限。

【问题讨论】:

  • 脚本cd 是否指向包含import 程序的目录? ./ 表示在当前工作目录中查找程序。
  • 您需要在shell_exec() 的参数周围加上引号。
  • 是的,导入是一个可执行文件,它与 php 文件位于同一目录中,并且我在 shell_exec 中的参数周围有引号。
  • 2>&1 添加到shell_exec() 的参数末尾,以便您看到任何错误消息。
  • 如果脚本使用任何 bash 扩展,您应该将其作为 bash auto_script.sh 运行,而不是 sh auto_script.sh

标签: php c bash shell


【解决方案1】:

快速查看[ shell_exec ] 联机帮助页显示shell_exec 具有以下定义:

字符串 shell_exec ( 字符串 $cmd )

这意味着参数应该是一个字符串,这确实意味着它应该在引号内。顺便说一句,无论如何,您在这里不需要中介脚本,所以这样做:

echo shell_exec('./import "-file.txt"'); //Using relative paths

已经说过将二进制文件放在脚本文件夹中是个坏主意,但我希望以上内容可以帮助您继续前进。

【讨论】:

  • 当我通过 shell 脚本执行 C 程序时,它会抛出一个分段错误错误,但是当我单独执行它时,它不会抛出任何错误
猜你喜欢
  • 2014-07-20
  • 2017-08-15
  • 2013-08-14
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多