我需要使用 php 从 Linux 机器打开存储在 Windows 文件服务器上的文件。不幸的是,有超过 700k 个文件,并且它们执行了各种典型的文件名操作。逗号、撇号、与号、括号、空格等等...几乎所有你能想到的他们对这些文件名所做的事情他们都做了。
是否有人有一个例程/函数/等等......可以转义所有可能需要转义的内容,将其转换为有效的linux路径,以便我的php脚本可以打开700k文件中的每个文件?
目前我正在使用这个,但是
真丑
每次遇到新事物,它都会成长
$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 语句中使用该变量将文本存储在单元格中。
Ilya Bursov 通过他的评论帮助解决了这个问题。转义引号并在文件名周围放置引号。当我这样做时,我的问题就解决了。