2010-04-15 23 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;