【问题标题】:How do I write a converter to change a PHP file into a Bash file?如何编写转换器以将 PHP 文件更改为 Bash 文件?
【发布时间】:2009-06-04 09:44:56
【问题描述】:

我目前实现这个的还不错的版本是:

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"

似乎使用此功能,引号被替换为空格。

【问题讨论】:

    标签: php filenames


    【解决方案1】:

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

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

    它会在它周围加上引号并为你转义引号。

    【讨论】:

    • 如果文件本身有“怎么办?
    • 似乎“被此功能替换为空格?我已经更新了我的帖子
    • 您在此处运行 windows - windows 不允许在文件名中使用双引号,这可能是 escapeshellarg 用空格替换它们的原因。 Linux 没有这样的限制,所以引号仍然存在(我已经测试过了)。
    猜你喜欢
    • 2017-12-30
    • 2022-01-20
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    相关资源
    最近更新 更多