PHP:antiword和上传的文件

时间:2011-11-02 07:58:00

标签: php ms-word exec doc

我正在创建一些代码,将word文档的内容上传到服务器,提取文本,然后将其插入数据库。

exec("PATH=$PATH:/home1/myserver/bin && antiword " . 
     $_FILES['file']['tmp_name'], $mycontent);

出于某些奇怪的原因,$ mycontent始终是一个空数组。谷歌没那么有用。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

你的exec引用中的$ PATH试图转换为PHP $ PATH而不是BASH $ PATH。

您可以转义$(\$)或使用单引号。

通常,您应该使用escapeshellarg()escapeshellcmd()来使事情更安全一些。这本来可以防止这种情况发生。此外,如果您使用用户输入调用exec(),它将有助于防止它们转义您的命令并调用自己的恶意shell命令。

修改
实际上,出于某种原因,您的文件名/路径可能会出现问题。开始简单吧。

这是否有效:

exec('/home1/myserver/bin/antiword ' . 
          escapeshellarg($_FILES['file']['tmp_name']), $mycontent);

如果没有,那是什么:

echo '/home1/myserver/bin/antiword ' . 
          escapeshellarg($_FILES['file']['tmp_name']);

您必须创建一个要测试的文件,并将其替换为$ _FILES中的文件。但这是否直接来自命令行呢?