wp_delete_file_from_directory()
云策文档标注
概述
wp_delete_file_from_directory() 是一个 WordPress 函数,用于在文件路径位于指定目录内时删除该文件。它通过验证文件路径是否在目录内来确保安全删除。
关键要点
- 函数接受两个必需参数:$file(要删除文件的绝对路径)和 $directory(目录的绝对路径)。
- 返回布尔值:成功时返回 true,失败时返回 false。
- 内部使用 wp_is_stream() 处理流路径,wp_normalize_path() 规范化路径,并检查文件是否在目录内(使用 str_starts_with() 和 trailingslashit())。
- 如果文件路径不在目录内或路径无效,函数返回 false。
- 最终调用 wp_delete_file() 执行删除操作。
代码示例
function wp_delete_file_from_directory( $file, $directory ) {
if ( wp_is_stream( $file ) ) {
$real_file = $file;
$real_directory = $directory;
} else {
$real_file = realpath( wp_normalize_path( $file ) );
$real_directory = realpath( wp_normalize_path( $directory ) );
}
if ( false !== $real_file ) {
$real_file = wp_normalize_path( $real_file );
}
if ( false !== $real_directory ) {
$real_directory = wp_normalize_path( $real_directory );
}
if ( false === $real_file || false === $real_directory || ! str_starts_with( $real_file, trailingslashit( $real_directory ) ) ) {
return false;
}
return wp_delete_file( $file );
}注意事项
- 确保提供绝对路径,否则可能导致删除失败或安全风险。
- 函数在 WordPress 4.9.7 版本中引入。
- 相关函数包括 wp_delete_file()、wp_is_stream()、wp_normalize_path() 和 trailingslashit()。
- 被 wp_delete_attachment_files() 用于删除附件文件。
原文内容
Deletes a file if its path is within the given directory.
Parameters
$filestringrequired-
Absolute path to the file to delete.
$directorystringrequired-
Absolute path to a directory.
Source
function wp_delete_file_from_directory( $file, $directory ) {
if ( wp_is_stream( $file ) ) {
$real_file = $file;
$real_directory = $directory;
} else {
$real_file = realpath( wp_normalize_path( $file ) );
$real_directory = realpath( wp_normalize_path( $directory ) );
}
if ( false !== $real_file ) {
$real_file = wp_normalize_path( $real_file );
}
if ( false !== $real_directory ) {
$real_directory = wp_normalize_path( $real_directory );
}
if ( false === $real_file || false === $real_directory || ! str_starts_with( $real_file, trailingslashit( $real_directory ) ) ) {
return false;
}
return wp_delete_file( $file );
}
Changelog
| Version | Description |
|---|---|
| 4.9.7 | Introduced. |