在php unlink中使用通配符

问题描述 投票:4回答:2

我目前正在创建一个PHP脚本来绘制来自数据库的一堆数据,将其排列成文本文件,然后运行GNUPlot脚本来生成图形。我已经完成了所有这些工作,现在我需要做的就是删除我不再需要的文本文件。

我一直在尝试的是从另一个论坛上的另一个主题得到的:

foreach( glob('US_A.2.6.*') as $file )
    {
        unlink($file);
    }

然而,问题是它不起作用。这些文件具有复杂的结束名称:

  • US_A.2.6.1.1a.txt
  • US_A.2.6.1.2a.txt
  • US_A.2.6.1.3a.txt
  • US_A.2.6.1.4a.txt
  • US_A.2.6.1.5a.txt
  • US_A.2.6.1.6a.txt

和更多。

php wildcard unlink
2个回答
6
投票

使用getcwd()检查您的工作目录。如果您与文本文件不在同一目录中,则需要指定路径。

另外,尝试回显glob()语句的输出,看看它是否找到了任何文件:

echo $file . PHP_EOL;
unlink($file);

您没有检查unlink()返回值,因此如果文件是不可写的,它可能会以静默方式失败(取决于您的error_reporting级别)。


0
投票

根据您的约束条件,您可以使用exec()调用生成更简洁的代码,但代价是可以减少跨平台的可移植性。我更喜欢给出绝对路径,我通常在所有脚本中包含的配置文件中对变量进行硬编码,因此:

define (FULL_DIRECTORY_PATH,'/whatever/your/path/is/');

...

exec('rm ' . FULL_DIRECTORY_PATH . 'US_A.2.6.*');

要么

define (BASE_PATH,'/base/path/');

...

exec('rm ' . BASE_PATH . 'additional/path/US_A.2.6.*');

该解决方案适用于Linux和其他UNIX系统。尽管在Windows上使用PHP并不常见,但您可以将其调整为适用于Windows服务器。

如果有任何用户提交的输入,使用exec()会有一些严重的安全风险;代码原样,它会很好,因为路径和文件名都是硬编码的。但是如果包含任何自定义输入,请确保使用escapeshellarg函数。

正如George Cummins所说,此解决方案不包括错误处理。如果您需要逐个文件地进行错误处理,我发现他的解决方案更好。但是,我通常使用像这里的设置,没有错误处理,清理自动生成的文件,并且我在使用这些结构10多年后从未遇到过任何问题。对于此类用途,通常仅在设置和测试期间需要错误处理,并且通常归结为正确设置目录权限。

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