I'm trying to run a java jar fi开发者_开发技巧le from the command line and within the the execution it gives a path. Withing this path their are spaces and this is causing the issue.
ie
foreach($paths as $path):
$f = `java -jar /OCR/ocr.jar /Folder/$path /ocr/output.txt`;
echo "<pre>$output</pre>";
endforeach;
If you can see the space in between the Sub Folder name causes the issue.
By command line it would be (which works)
java -jar /OCR/ocr.jar /Folder/Sub\ Folder/filetoocr.pdf /ocr/output.txt
any suggestions how I can resolve this ??
Hope you can advise
Use escapeshellarg():
escapeshellarg() adds single quotes around a string and quotes/escapes any existing single quotes allowing you to pass a string directly to a shell function and having it be treated as a single safe argument.
and maybe 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;
$f = "java -jar /OCR/ocr.jar /Folder/Sub\\ Folder/filetoocr.pdf /ocr/output.txt";
echo "<pre>$output</pre>";
or
$f = 'java -jar /OCR/ocr.jar "/Folder/Sub Folder/filetoocr.pdf" /ocr/output.txt';
echo "<pre>$output</pre>";
add the same \
in PHP?
Use quotes?
$f = `java -jar /OCR/ocr.jar '/Folder/Sub Folder/filetoocr.pdf' /ocr/output.txt`;
Why not escape
the space
even in the back ticks:
$f = `java -jar /OCR/ocr.jar /Folder/Sub\ Folder/filetoocr.pdf /ocr/output.txt`;
精彩评论