如何编写转换器将PHP文件更改为Bash文件?

时间:2009-06-04 09:44:56

标签: php filenames

到目前为止,我实现这个目标并不是那么糟糕:

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

当文件名中有空格时,主要处理问题,如

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

虽然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"

似乎这个函数,引号被替换为空格。

1 个答案:

答案 0 :(得分:3)

解决方案是在PHP(http://uk.php.net/manual/en/function.escapeshellarg.php)中使用escapeshellarg函数:

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

exec('ls ' . $file);

它会将引号括起来并为你转义引号。