2013-07-02 83 views
0

我想用PHP來運行一個shell目錄作爲參數的命令。問題是,這個目錄名稱包含單引號和空格。在shell中,如果該目錄被稱爲「我是一個目錄」,這將是這樣的:
ls I\'m\ a \ directoryphp exec()參數包含空格

但是,我不能通過PHP調用時得到這個工作。我試過
exec('ls I\'m\ a\ directory')
和許多其他變化,但他們都沒有工作。有什麼建議麼?提前致謝!

+0

嘗試雙引號而不是單引號。 – Zzz

+0

仍然不工作:( –

+0

[PHP的exec()和路徑中的空格可能的重複](http://stackoverflow.com/questions/5489613/php-exec-and-spaces-in-paths) – 2013-07-03 00:18:41

回答

1

試試這個:

passthru('ls "I\'m a directory"'); 

exec()返回輸出的最後一行,這可能不是您所期望的。把它比作是:

exec('ls "I\'m a directory"', $outvar); 
print_r($outvar); 

我承擔所有看過精細的手工,但在這裏它,以防萬一:http://us1.php.net/manual/en/function.exec.php

實例驗證的概念會在FreeBSD:

501:~$ mkdir "I'm a directory" 
502:~$ ls -lrt 
drwxr-xr-x 2 cxj cxj  512 Jul 2 19:32 I'm a directory 
drwxr-xr-x 33 cxj cxj  2048 Jul 2 19:32 . 
503:~$ cd I\'m\ a\ directory/ 
504:~/I'm a directory$ touch foo bar baz 
505:~/I'm a directory$ cd .. 
506:~$ cat - > test.php 
<?php passthru('ls "I\'m a directory"'); ?> 
507:~$ cat test.php 
<?php passthru('ls "I\'m a directory"'); ?> 
508:~$ php test.php 
bar 
baz 
foo 
+0

我會嘗試,但是我懷疑這是個問題,確實是echo()只能得到輸出的最後一行,但不能爲空 例如,exec('ls〜')給我一個文件的名字 –

+0

不,我仍然沒有得到任何輸出 –

+0

你的系統是什麼?它適用於Mac OSX和FreeBSD。 – CXJ

1

您需要正確地使用雙斜槓來確保它們不會被字符串所吞噬。

您的問題的一部分是\'正在被吃掉並傳遞到命令行,只是'

比較這些:

echo 'ls I\'m\ a\ directory'; 
echo "\n"; 
echo "ls I\'m\ a\ directory"; //Note double quotes 
echo "\n"; 
echo 'ls I\\\'m\\ a\\ directory'; 
echo "\n"; 
echo "ls I\\\'m\\ a\\ directory"; //Note double quotes 

結果:

ls I'm\ a\ directory 
ls I\'m\ a\ directory 
ls I\'m\ a\ directory 
ls I\\'m\ a\ directory 

所以,你真正想要的是任一:

exec('ls I\\\'m\ a\ directory') 
exec("ls I\'m\ a\ directory") 
+0

仍然doesn 't work :( –

+0

Define「does not work」 – 2013-07-03 00:11:38

+0

因爲它不輸出任何內容我在發佈之前已經嘗試了兩個建議代碼適用於具有正常名稱的目錄 –