2010-04-15 25 views
0

我想从命令行运行java jar文件,并在执行它给出了一个路径。有了这条道路,他们是空间,这是造成这个问题。PHP的路径问题运行反引号/ 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 2010-04-15 12:41:30

+0

我自己找到了答案,只要在路径上添加引号就可以解决问题!即$ f ='java -jar /OCR/ocr.jar'/ Folder/$ path'/ ocr/output.txt'; – Lee 2010-04-15 14:40:19

回答

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

加入PHP一样\

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()将围绕一个字符串和报价单引号/逃脱任何现有的单引号 允许您将字符串直接传递给shell函数,并将其作为单个安全参数对待

,也许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;