0

これを実装するための私のこれまでのところそれほど悪くないバージョンは次のとおりです。

function bashFileConvert($file)
{
    return preg_replace('/([^\/\s]+\s+[^\/]+)(\/|$)/','"${1}"${2}',$file);
}

ファイル名にスペースがある場合、主に問題を処理します。

$flie = '/usr/local/my test file.txt'

while は Bash では認識されません。

だから私はに変換する必要があります

$file = '/usr/local/"my test file.txt"'

次のようなものを呼び出す前に:

exec('ls ' . $file);

しかし、引用符や「&」の問題など、他にも多くのコーナーケースがあります。

それで、この仕事をするための準備が整ったバージョンはありますか?

==================================

今私は escapeshellarg() を試しましたが、ここでは少し奇妙です:

$file = '/usr/local/apache2/resumes_txt/5/San Francisco/qtzhang/Device "Engineer"/Job Resume Qintao Zhang.pdf.txt';
echo escapeshellarg($file);

D:\\test>php test.php
"/usr/local/apache2/resumes_txt/5/San Francisco/qtzhang/Device  Engineer /Job Resume Qintao Zhang.pdf.txt"

この関数では、引用符がスペースに置き換えられているようです。

4

1 に答える 1

3

解決策は、PHP で escapeshellarg 関数を使用することです ( http://uk.php.net/manual/en/function.escapeshellarg.php )。

$file = escapeshellarg('/usr/local/my test file.txt');

exec('ls ' . $file);

引用符で囲み、引用符をエスケープします。

于 2009-06-04T09:49:26.133 に答える