我想用PHP來運行一個shell目錄作爲參數的命令。問題是,這個目錄名稱包含單引號和空格。在shell中,如果該目錄被稱爲「我是一個目錄」,這將是這樣的:
ls I\'m\ a \ directory
php exec()參數包含空格
但是,我不能通過PHP調用時得到這個工作。我試過exec('ls I\'m\ a\ directory')
和許多其他變化,但他們都沒有工作。有什麼建議麼?提前致謝!
我想用PHP來運行一個shell目錄作爲參數的命令。問題是,這個目錄名稱包含單引號和空格。在shell中,如果該目錄被稱爲「我是一個目錄」,這將是這樣的:
ls I\'m\ a \ directory
php exec()參數包含空格
但是,我不能通過PHP調用時得到這個工作。我試過exec('ls I\'m\ a\ directory')
和許多其他變化,但他們都沒有工作。有什麼建議麼?提前致謝!
試試這個:
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
我會嘗試,但是我懷疑這是個問題,確實是echo()只能得到輸出的最後一行,但不能爲空 例如,exec('ls〜')給我一個文件的名字 –
不,我仍然沒有得到任何輸出 –
你的系統是什麼?它適用於Mac OSX和FreeBSD。 – CXJ
您需要正確地使用雙斜槓來確保它們不會被字符串所吞噬。
您的問題的一部分是\'
正在被吃掉並傳遞到命令行,只是'
。
比較這些:
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")
仍然doesn 't work :( –
Define「does not work」 – 2013-07-03 00:11:38
因爲它不輸出任何內容我在發佈之前已經嘗試了兩個建議代碼適用於具有正常名稱的目錄 –
嘗試雙引號而不是單引號。 – Zzz
仍然不工作:( –
[PHP的exec()和路徑中的空格可能的重複](http://stackoverflow.com/questions/5489613/php-exec-and-spaces-in-paths) – 2013-07-03 00:18:41