我有一个名为images的文件夹,位于用户的文件夹中,如:
图像
当我从数据库中删除一个用户时,我还想删除该用户的所有文件和文件夹。所有这些都在一个包含函数的类中,但是当我执行函数时,我的整个文件夹图像都会被删除。。。
我已经检查了是否选择了正确的用户,路径是否正确。当我在测试的时候。php文件它工作得很好,但在我的函数中它被破坏了。
如果单击“删除”按钮,则转到此功能:
$user = new user();
$id = $_db->mysqli->real_escape_string($_POST['id']);
$query = "SELECT * FROM users WHERE id = '" .$id."'";
$result = $_db->mysqli->query($query);
$userNumb = $result->num_rows;
$finalUserNumb = $userNumb;
if ($finalUserNumb > 0) {
$user->deleteUser($id);
}
通过给定的id获取用户信息
public function userSelsectByID($selector, $id)
{
$query = "SELECT " .$selector. " FROM users WHERE id ='" .$id."'";
$result = $this->mysqli->query($query);
$userInfo = $result->fetch_assoc();
$itemResult = $userInfo[$selector];
return $itemResult;
}
删除文件功能
public function delete_files($target)
{
if(is_dir($target)){
$files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned
foreach( $files as $file ){
$this->delete_files( $file );
echo "Deleted ".$file." succesfull...</br>";
}
rmdir( $target );
} elseif(is_file($target)) {
unlink( $target );
}
}
删除用户功能
public function deleteUser($id)
{
$user = "DELETE FROM users WHERE id = '$id'";
$userResult = $this->mysqli->query($user);
$uren = "DELETE FROM uren WHERE user_id = '$id'";
$urenResult = $this->mysqli->query($uren);
$cookieLogin = "DELETE FROM cookieLogin WHERE user_id = '$id'";
$cookieLoginResult = $this->mysqli->query($cookieLogin);
$gebruikersnaam = str_replace(' ', '_', $this->userSelsectByID('gebruikersnaam', $id));
$this->delete_files('/sites/domain.nl/www/admin/images/'.$gebruikersnaam);
}
我想删除带有用户名的文件夹,但实际上整个图像文件夹都被删除了。。。我试了很多,但都不管用:(
能帮我的人?
我想你错过了星星前的一个斜线
$files = glob( $target . '/*');
让我们做一些分析。
$this-
这可能出错的唯一方法是如果您的用户名是一个空字符串。
在deleteUser
功能中,您可以在从数据库中选择用户用户名之前删除该用户。
我怀疑这会导致出现这种情况-
您需要调整操作顺序,以确保在将用户名从数据库中删除之前检索到该用户名,以及在将其传递给
$this之前确保用户名和用户目录存在-
public function deleteUser($id)
{
$gebruikersnaam = str_replace(' ', '_', $this->userSelsectByID('gebruikersnaam', $id));
$userImagesPath = '/sites/domain.nl/www/admin/images/'.$gebruikersnaam;
$user = "DELETE FROM users WHERE id = '$id'";
$userResult = $this->mysqli->query($user);
$uren = "DELETE FROM uren WHERE user_id = '$id'";
$urenResult = $this->mysqli->query($uren);
$cookieLogin = "DELETE FROM cookieLogin WHERE user_id = '$id'";
$cookieLoginResult = $this->mysqli->query($cookieLogin);
if (!empty($gebruikersnaam) && is_dir($userImagesPath)) {
$this->delete_files($userImagesPath);
}
}
作为在函数中递归使用
glob
的替代方法。我建议改为使用递归DirectoryIterator。
这将允许您按删除顺序检索所有文件和目录的列表:
给定一个
/home/fyrye/test/images
- user1
- 2018-12
- image1.jpg
- image2.jpg
- 2019-01
- image1.jpg
- image2.jpg
- user2
- 2019-01
- image1.jpg
- image2.jpg
- 2018-12
- image1.jpg
- image2.jpg
然后删除
user1
目录及其内部的所有内容。
$directory = '/home/fyrye/test/images/user1';
$ri = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS | FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO),
RecursiveIteratorIterator::CHILD_FIRST
);
/**
* @var string $path
* @var \SplFileInfo $splFileInfo
*/
foreach ($ri as $path => $splFileInfo) {
if ($splFileInfo->isDir()) {
rmdir($path);
echo 'deleted directory: ' . $path;
} elseif ($splFileInfo->isFile()) {
unlink($path);
echo 'deleted file: ' . $path;
}
}
rmdir($directory);
echo 'deleted directory: ' $directory;
结果:
deleted file: /home/fyrye/test/images/user1/2018-12/image1.jpg
deleted file: /home/fyrye/test/images/user1/2018-12/image2.jpg
deleted directory: /home/fyrye/test/images/user1/2018-12
deleted file: /home/fyrye/test/images/user1/2019-01/image1.jpg
deleted file: /home/fyrye/test/images/user1/2019-01/image2.jpg
deleted directory: /home/fyrye/test/images/user1/2019-01
deleted directory: /home/fyrye/test/images/user1
我有一个包含一些文件路径的长文本。 我想做的是从其中删除路径。文件路径都类似于: 我知道使用“^/all”将选择以/all开头的句子,并选择以.js$结尾的句子。但我无法将这些合并在一起以选择整个文件路径。 毕竟,正则表达式应该放在下面的代码上以删除路径。 我能为它写正则表达式吗?有什么工具吗?
嗨,伙计们,所以我写了一个程序在C++它可以我开始调试参数通过cmd。例如: example.exe filepathoftxtfile 程序打开并读取txt文件。这一切都很正常,但如果txt文件位于包含空格的路径中,例如c:/users/jhon/test4/space4,则由于空格键的原因,程序将其检测为不止一个参数。有没有什么方法可以在调试参数中加入参数,而忽略单个参数的空格?另一件事是,我
问题内容: 我正在从网上下载一个zip文件。它包含文件夹和文件。使用解压缩他们和。将文件名指定为。 所以我正在创造新的 但问题是它引发了异常:。我知道它正在创建子文件夹和。 我的问题是:如何通过路径上方创建包含子目录的文件? 问题答案: 用这个: 尽管您可以不检查结果而做,但是检查操作的返回值被认为是最佳实践。因此,首先检查现有目录,然后检查是否成功创建(如果尚不存在)。 参考: File.get
问题内容: 我想从创建的可执行文件中 删除 所有路径信息。 我正在编译这样的代码: 上面的go build命令中的示例程序集的一部分: 注意:不建议使用:,如果您将其推荐为解决方案,则可能导致可执行文件损坏。 问题答案: 使用-trimpath标志删除路径信息: 更多信息: 传递给并将从elf二进制文件中删除所有路径信息。 您可以使用以下方法检查结果: 尽管有人说它已经修复,但在go社区中使用工具
本文向大家介绍php删除一个路径下的所有文件夹和文件的方法,包括了php删除一个路径下的所有文件夹和文件的方法的使用技巧和注意事项,需要的朋友参考一下 php遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件的代码,通过递归方式实现达到清空一个目录的效果,代码简单实用。 也适合在thinkphp中清理缓存,在thinkphp中可以把下面代码写入./Application/A
问题内容: 我只想从完整路径到文件获取文件夹路径。 例如,我想要得到(不包括)。 我已经尝试过这样的事情: 但是它给了我这样的结果: 这不是我需要的结果(为)。 关于如何获取文件路径的任何想法? 问题答案: 您几乎可以使用该功能了。您只需要加入字符串,如下所示。 虽然,我建议使用该函数来执行此操作,但是您只需要传递字符串即可,它将为您完成工作。由于您似乎在Windows上,因此也考虑使用该功能。一