转义 Windows 文件路径字符串以在 Linux 上的 PHP shell 命令中运行

问题描述 投票:0回答:1

我需要使用 php 从 Linux 机器打开存储在 Windows 文件服务器上的文件。不幸的是,有超过 700k 个文件,并且它们执行了各种典型的文件名操作。逗号、撇号、与号、括号、空格等等...几乎所有你能想到的他们对这些文件名所做的事情他们都做了。

是否有人有一个例程/函数/等等......可以转义所有可能需要转义的内容,将其转换为有效的linux路径,以便我的php脚本可以打开700k文件中的每个文件?

目前我正在使用这个,但是

  1. 真丑

  2. 每次遇到新事物,它都会成长

         $path = preg_replace('/\s+/', '\\ ', $path);
         $path = preg_replace('/\(/', '\\(', $path);
         $path = preg_replace('/\)/', '\\)', $path);
         $path = preg_replace('/\'/', '\\\'', $path);
         $path = preg_replace('/\,/', '\\,', $path);
         $path = preg_replace('/\&/', '\\&', $path);
    

例如,在下面的块中,我正在读取文档文件的文件名,将其转换为文本,并将文本输出存储在表的单元格中。但是,要运行转换,我需要命令才能找到该文件。

        $md5sum = rtrim(`md5sum -z "$path" | awk {'print $1'}`);
        $contents = mysqli_real_escape_string($dbh,`catdoc "$path"`);
        $sql3 = "insert into contents (path,type,md5sum,content) values ('".$path."','".$type."','".$md5sum."','".$contents."')";
        $results3 = mysqli_query($dbh,$sql3);

$path
将从 sql 结果填充并保存如下内容:

/mnt/windows/Clients/LORI'S OPEN FILES/morecharacters, andnowevenmore-dissolution-AT/Correspondences/This is a sample & text file.doc

我正在尝试通过 shell 传递此文件名。我使用 shell 实用程序将它们转换为 txt,并将通过 stdout 吐出的文本应用到变量,然后在 db 语句中使用该变量将文本存储在单元格中。

php linux path
1个回答
0
投票

Ilya Bursov 通过他的评论帮助解决了这个问题。转义引号并在文件名周围放置引号。当我这样做时,我的问题就解决了。

© www.soinside.com 2019 - 2024. All rights reserved.