作者 主題: shell_exec的特殊符號  (閱讀 2793 次)

0 會員 與 1 訪客 正在閱讀本文。

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
shell_exec的特殊符號
« 於: 2012-10-23 17:13 »
假設目錄名稱為: test'123
然後把取得的目錄名稱指定給$file,
執行: shell_exec("mv \"{$file}\" \"目標目錄\"");
以上ok..

假設目錄名稱改為: test"123
因為"的原因,則無法順利執行,
於是我必須改成:
shell_exec("mv '{$file}' '目標目錄'");

但如果目錄名稱同時有兩個符號,例如: test'123"456
請問有解嗎?

ps.不使用shell_exec可以解決這個問題,但想知道這狀況是否有解

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5403
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: shell_exec的特殊符號
« 回覆 #1 於: 2012-10-23 17:38 »
看你是要用 ' 還是要用 " 吧. 然後把檔名中的該字元換成 \' 或 \" 吧.

不過... 最好用 escapeshellarg() 處理吧.
代碼: [選擇]
$file = "test'123";
shell_exec("mv ".escapeshellarg($file)." /tmp/");
$file = 'test"123';
shell_exec("mv ".escapeshellarg($file)." /tmp/");

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
Re: shell_exec的特殊符號
« 回覆 #2 於: 2012-10-23 17:53 »
看你是要用 ' 還是要用 " 吧. 然後把檔名中的該字元換成 \' 或 \" 吧.

代碼: [選擇]
$file = scandir取得含有兩個跳脫字元目錄名..
shell_exec("mv ".addslashes($file)." /tmp/");
改了一下,似乎行不通,請教tommy大,上面這樣的問題是出在哪裡?
(不是應該跳脫在檔名外部嗎? 為何是跳脫檔名,這樣是否會file not found...??)

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5403
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Re: shell_exec的特殊符號
« 回覆 #3 於: 2012-10-23 23:08 »
有什麼理由要用 addblashes() 取代 escapeshellarg() ?
前者並不是針對 shell 處理的.

joeyhsy

  • 活潑的大學生
  • ***
  • 文章數: 290
    • 檢視個人資料
Re: shell_exec的特殊符號
« 回覆 #4 於: 2012-11-02 15:51 »
tommy大抱歉,最近工作突然忙了起來,忘了來回覆~~

addslashes是亂入,這個問題有一些複雜的其他因素,我自己再多多嘗試一下,希望能夠找出最好的方式,萬分謝謝您!