删除目录和文件的问题
Issue with deleting directory and files
我试图在单击按钮后删除包含任何文件的目录和其中的其他目录,但是我遇到了问题。
我收到的错误是-
PHP Fatal error: Uncaught exception 'UnexpectedValueException' with
message
'RecursiveDirectoryIterator::__construct(http://...@alink.co.uk/):
failed to open dir: not implemented' in
这是与 -
相关的代码部分
$dir = 'http://www.thisismylink.co.uk/userfolder/' . $row['email'] . "/";
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($it,
RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {
if ($file->isDir()){
rmdir($file->getRealPath());
} else {
unlink($file->getRealPath());
}
}
rmdir($dir);
现在结构是-
用户邮箱 ($dir)
- 图片
- picture.png
- 视频
- video.mp4
我想要做的是删除 'User Email' 目录中的所有内容以及 'User Directory' 本身
您似乎在使用完整的 URL 作为顶级目录。不应该是:
$dir = 'userfolder/' . $row['email'] . "/"; //Relative to your script
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($it,
RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {
if ($file->isDir()){
rmdir($file->getRealPath());
} else {
unlink($file->getRealPath());
}
}
rmdir($dir);
这确实一种相当危险的处理问题的方式;我并不是要回避您的实际问题,但是请考虑保留一个包含 "directories" 及其关联对象的数据库。删除用户时,将数据库中的标志设置为 "toBeRemoved" 或类似的东西。
然后每隔一段时间,让一个 cron/计划任务通过并查询要删除的目录列表,然后删除数据库条目/将其标记为已更新。
问题是,无论您认为它多么安全,脚本都可能被利用,或者从基于 web/user 的输入中产生不可预测的结果。
如果这些错误是基于许可的,使用上述思路将允许在 "root" 用户级别完成此操作,而不必担心系统文件在您的代码被破坏时被删除坏用户(或好心用户击中了错误的事件组合)。
我试图在单击按钮后删除包含任何文件的目录和其中的其他目录,但是我遇到了问题。
我收到的错误是-
PHP Fatal error: Uncaught exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::__construct(http://...@alink.co.uk/): failed to open dir: not implemented' in
这是与 -
相关的代码部分$dir = 'http://www.thisismylink.co.uk/userfolder/' . $row['email'] . "/";
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($it,
RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {
if ($file->isDir()){
rmdir($file->getRealPath());
} else {
unlink($file->getRealPath());
}
}
rmdir($dir);
现在结构是-
用户邮箱 ($dir)
- 图片
- picture.png
- 视频
- video.mp4
我想要做的是删除 'User Email' 目录中的所有内容以及 'User Directory' 本身
您似乎在使用完整的 URL 作为顶级目录。不应该是:
$dir = 'userfolder/' . $row['email'] . "/"; //Relative to your script
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($it,
RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {
if ($file->isDir()){
rmdir($file->getRealPath());
} else {
unlink($file->getRealPath());
}
}
rmdir($dir);
这确实一种相当危险的处理问题的方式;我并不是要回避您的实际问题,但是请考虑保留一个包含 "directories" 及其关联对象的数据库。删除用户时,将数据库中的标志设置为 "toBeRemoved" 或类似的东西。
然后每隔一段时间,让一个 cron/计划任务通过并查询要删除的目录列表,然后删除数据库条目/将其标记为已更新。
问题是,无论您认为它多么安全,脚本都可能被利用,或者从基于 web/user 的输入中产生不可预测的结果。
如果这些错误是基于许可的,使用上述思路将允许在 "root" 用户级别完成此操作,而不必担心系统文件在您的代码被破坏时被删除坏用户(或好心用户击中了错误的事件组合)。