使用PHP调用C可执行文件

时间:2016-11-04 23:53:15

标签: php html c

我有一个c文件,我用一个名为“run”的可执行文件编译 并希望使用上传目录中的testfile.txt的argv [1]来运行它。

这似乎有效,但我不明白为什么。

exec(__DIR__ . '/run uploads/testfile.txt',$output);

C程序如下运行:

./run uploads/testfile.txt

在exec()命令的开头添加一个点使它不起作用,但我正在运行一个可执行文件,而不是一个文件(不是文件运行),为什么第一个例子工作但另一个不工作?

这不起作用,但它应该吗?

exec(__DIR__ . './run uploads/testfile.txt',$output);

./run是c可执行文件,argv[1]位于上传目录testfile.txt

4 个答案:

答案 0 :(得分:1)

假设__DIR__=='/foo/bar'

然后,__DIR__ . './run'将评估为不存在的/foo/bar./run

答案 1 :(得分:0)

点连接两个字符串。
__DIR__是一个神奇的常量,它是你的php文件目录而不是斜线终止(参见php doc) 假设__DIR__ = my_dir,如果您在run之前添加一个点,则会得到:

my_dir./run

答案 2 :(得分:0)

exec(__DIR__ . './run uploads/testfile.txt',$output);

__DIR__ has no / at the end

因此,您将尝试执行/home/me/project./run

例如,您可以运行/home/me/project/./run。点。指的是当前目录。

答案 3 :(得分:0)

您在运行程序时只需要.而不提供路径名。如果程序名称不包含/,则shell会在$PATH中搜索该程序。通过键入./run,它会告诉它查看当前目录而不是搜索它。

由于您通过预先__DIR__提供程序的完整路径,因此它不会搜索该程序。在这种情况下,没有必要在程序名称之前插入.,这会导致文件名不正确。它将.添加到__DIR__中的最后一个目录,该目录不存在。