2010-04-15 5 views
0

J'essaie d'exécuter un fichier jar java à partir de la ligne de commande et dans l'exécution il donne un chemin. Avec ce chemin, ils sont des espaces et cela cause le problème.Problème de chemin PHP en cours d'exécution backticks/exec()

-à-dire

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

Si vous pouvez voir l'espace entre le nom du sous dossier, le problème.

par ligne de commande, il est (qui fonctionne)

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

des suggestions comment je peux résoudre ce ??

espère que vous pouvez conseiller

+0

Désolé j'ai ajouté une workld plus réel. Comme vous pouvez voir le chemin vient d'une boucle – Lee

+0

J'ai trouvé la réponse moi-même, Juste en ajoutant une citation autour du chemin a résolu le problème! c'est-à-dire $ f = 'java -jar /OCR/ocr.jar '/ Dossier/$ chemin'/ocr/output.txt'; – Lee

Répondre

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

ou

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

ajouter le même \ en PHP?

0

Utilisez des guillemets?

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

Pourquoi ne pas escape le space même dans le dos tiques:

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

Utilisation escapeshellarg():

escapeshellarg() ajoute des guillemets simples autour d'une chaîne et citations/échappe à toute apostrophes existants vous permettant de passer directement une chaîne à une fonction shell et de la traiter comme un seul argument de sécurité.

et peut-être 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; 
Questions connexes