2010-04-15 2 views
0

Я пытаюсь запустить java-файл jar из командной строки и в ходе выполнения он задает путь. С этим путем они являются пробелами, и это вызывает проблему.Ошибка PHP-пути, выполняющего backticks/exec()

т.е.

foreach($paths as $path): 
$f = `java -jar /OCR/ocr.jar /Folder/$path /ocr/output.txt`; 
echo "<pre>$output</pre>"; 
endforeach; 

Если вы можете видеть пространство между именем подпапки вызывает проблему.

По командной строке это будет (который работает)

java -jar /OCR/ocr.jar /Folder/Sub\ Folder/filetoocr.pdf /ocr/output.txt 

любые предложения, как я могу решить эту проблему ??

Надеется, что вы можете посоветовать

+0

К сожалению я теперь добавил более реальный workld. Как вы видите, путь приходит из цикла – Lee

+0

Я сам нашел ответ, просто добавив цитату вокруг пути, разрешившего проблему! т.е. $ f = 'java -jar /OCR/ocr.jar '/ Folder/$ path'/ocr/output.txt'; – Lee

ответ

0
$f = "java -jar /OCR/ocr.jar /Folder/Sub\\ Folder/filetoocr.pdf /ocr/output.txt"; 
echo "<pre>$output</pre>"; 

или

$f = 'java -jar /OCR/ocr.jar "/Folder/Sub Folder/filetoocr.pdf" /ocr/output.txt'; 
echo "<pre>$output</pre>"; 
0

Использовать цитаты?

$f = `java -jar /OCR/ocr.jar '/Folder/Sub Folder/filetoocr.pdf' /ocr/output.txt`; 
0

Почему не escapespace даже в спину клещи:

$f = `java -jar /OCR/ocr.jar /Folder/Sub\ Folder/filetoocr.pdf /ocr/output.txt`; 
1

Использование escapeshellarg():

escapeshellarg() добавляет одинарные кавычки вокруг строки и кавычки/ускользает все существующие одиночные кавычки позволяя передавать строку непосредственно в функцию оболочки и обрабатывать ее как один безопасный аргумент.

и, возможно, escapeshellcmd()

$cmd = sprintf(
    'java -jar %s %s %s', 
    escapeshellarg('/OCR/ocr.jar'), 
    escapeshellarg('/Folder/Sub Folder/filetoocr.pdf'), 
    escapeshellarg('/ocr/output.txt') 
); 
echo 'Debug: cmd=', $cmd; 
Смежные вопросы