PHP: антислово и загруженный файл - PullRequest
0 голосов
/ 02 ноября 2011

Я создаю некоторый код, который будет загружать содержимое текстового документа на сервер, извлекать его текст и вставлять в базу данных.

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

По какой-то странной причине $ mycontent isвсегда пустой массив.Google не был таким полезным.Кто-нибудь знает, что я делаю не так?

1 Ответ

1 голос
/ 02 ноября 2011

$ PATH в вашей цитате exec пытается преобразоваться в то, чем является ваш PHP $ PATH, а не в BASH $ PATH.

Вы можете либо экранировать $ (\$), либо использовать одинарные кавычки.

В общем, вы должны использовать escapeshellarg() или escapeshellcmd(), чтобы сделать вещи немного безопаснее.Это предотвратило бы эту ситуацию.Кроме того, если вы вызываете exec() с пользовательскими вводами, это поможет предотвратить побег вашей команды и вызов собственных вредоносных команд оболочки.

РЕДАКТИРОВАТЬ
На самом деле у вас могут возникнуть проблемыс вашим именем файла / пути по какой-то причине.Просто начни просто.

Работает ли это:

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

Если нет, то что это:

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

Вам нужно будет создать файл для проверки и заменить его нафайл в $ _FILES.Но работает ли это прямо из командной строки?

...