php exec: плохая обратная косая черта в php или как? - PullRequest
2 голосов
/ 30 января 2012

У меня есть эта команда:

exec(sprintf('%s %s dump_data output', escapeshellarg($apps . 'pdftk' . DIRECTORY_SEPARATOR . 'pdftk.exe'), escapeshellarg(self::winEscapeShellArgFix($file, array()))), $output);

результат sprintf таков:

"\\127.0.0.1\binary\win32\pdftk\pdftk.exe" "//127.0.0.1/uploads\1-16knje01g1drjagii61j3515a94.pdf" dump_data output

запуск этой команды из exec не даст результата, но если я запусту ее из windowsCMD это будет работать правильно.После того, как я попробовал миллионы команд, я понял, что проблема в том, что php использует в качестве escape-обратной косой черты обратный слеш внутри вывода sprintf:

**\\**127......

Кто-нибудь знает, почему это происходит?У меня есть вся магия ВЫКЛ.

РЕДАКТИРОВАТЬ: , если я выполню:

exec("\\127.0.0.1\binary\win32\pdftk\pdftk.exe //127.0.0.1/uploads\1-16knje01g1drjagii61j3515a94.pdf dump_data output",$outarr);

или

exec('\\127.0.0.1\binary\win32\pdftk\pdftk.exe //127.0.0.1/uploads\1-16knje01g1drjagii61j3515a94.pdf dump_data output',$outarr);

это не будет работать

EDIT2: Я отлаживаю, и это не проблема сброса, команда на самом деле хороша, кажется, что это проблема exec, которая не возвращает результат.он работает на веб-сервере iis, но не работает на другом веб-сервере iis.

1 Ответ

2 голосов
/ 30 января 2012

albanx, это не sprintf делает это вам, это escapeshellarg, который добавляет обратную косую черту.http://php.net/manual/en/function.escapeshellarg.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...