命令不适用于PHP exec(),但如果通过提示运行则运行正常

时间:2012-11-21 07:09:59

标签: php linux system exec shellexecute

我正在尝试使用SWATH(http://www.cs.cmu.edu/~paisarn/software.html)来处理我的项目。基本上程序会将句子分解成一组单词。我安装了所有东西,并尝试通过命令提示符(Mac上的终端)运行该命令。

我跑了一个命令

swath -u u -m long < in_OdwJYw.txt > test.txt

该程序工作得很好,并提供了正确的输出test.txt和细分词

所以我将代码实现到我的PHP文件中。我用这个方法

exec("swath -u u -m long < in_OdwJYw.txt > test.txt");

没有显示错误“test.txt”文件已创建,但内部没有任何内容(0字节)

我的问题是为什么命令适用于运行提示以及为什么我不使用exec()system()或shell_exec()。

谢谢!

1 个答案:

答案 0 :(得分:2)

编辑:原创帖子由OP编辑。代码段是:

exec("swath -b "|" -u u -m long < in_OdwJYw.txt > test.txt");

您必须转义命令字符串。这样的事情应该会有所帮助。

exec("swath -b \"|\" -u u -m long < in_OdwJYw.txt > test.txt");

详细说明,您的字符串将在exec("swath -b \"这个地方剪切。管道在命令字符串之外。我认为你的命令的其余部分将被忽略,只有第​​一部分将在exec中运行。

要包括剩下的你必须逃避你的特殊字符,在这种情况下你的"。当您使用带语法高亮的编辑器时,您会看到它更好。

Here你在php esaping中有一个简单的例子。

print_r()命令的输出exec()通常很有用。所以你可以看到发生了什么。