我目前正在创建一个PHP脚本来绘制来自数据库的一堆数据,将其排列成文本文件,然后运行GNUPlot脚本来生成图形。我已经完成了所有这些工作,现在我需要做的就是删除我不再需要的文本文件。
我一直在尝试的是从另一个论坛上的另一个主题得到的:
foreach( glob('US_A.2.6.*') as $file )
{
unlink($file);
}
然而,问题是它不起作用。这些文件具有复杂的结束名称:
和更多。
使用getcwd()检查您的工作目录。如果您与文本文件不在同一目录中,则需要指定路径。
另外,尝试回显glob()语句的输出,看看它是否找到了任何文件:
echo $file . PHP_EOL;
unlink($file);
您没有检查unlink()返回值,因此如果文件是不可写的,它可能会以静默方式失败(取决于您的error_reporting级别)。
根据您的约束条件,您可以使用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多年后从未遇到过任何问题。对于此类用途,通常仅在设置和测试期间需要错误处理,并且通常归结为正确设置目录权限。