我有一个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
答案 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__
中的最后一个目录,该目录不存在。