【问题标题】:How to rename a folder with content in it? - PHP如何重命名包含内容的文件夹? - PHP
【发布时间】:2018-01-25 17:54:41
【问题描述】:

我想重命名一个包含文件的文件夹,但它不起作用。在数据库中它已成功更改,但文件夹没有获得新名称。

代码:

if (file_exists("user/$log_username")) {
    rename("user/$log_username", "user/$un");
}

文件夹中有一些照片和文件,但我想问题是我想在服务器上运行文件夹时重命名它。当我想重命名他/她的文件夹时,用户已登录,但如果我首先注销用户,$log_username 将等于没有。有什么解决办法吗?

【问题讨论】:

  • 将文件夹复制到新名称并删除旧文件夹?
  • 好,我试试
  • 你得到什么错误信息?
  • @Andreas 复制并不总是一个简单的选择,因为文件夹可能包含 TB 的数据,并且会使服务器耗尽磁盘空间(或者至少可以说效率低下)
  • @OliverMGrech 从同一个驱动器复制到同一个驱动器只是一个问题或重新索引文件。它们不是真实复制的,您自己尝试一下,您会发现您可以在几秒钟内复制 TB 的数据。

标签: php directory rename


【解决方案1】:

试试这个:

rename(realpath(dirname(__FILE__)).'/myoldfolder',realpath(dirname(__FILE__)).'/mynewfolder');

应该使用绝对链接而不是相对链接

【讨论】:

  • 试过这个代码:rename(realpath(dirname(user)).'/$log_username',realpath(dirname(user)).'/$un');它说:注意:使用未定义的常量用户 - 假定为“用户”
  • 不要将其用作常量,而是用作字符串 dirname(FILE)).'user/$log_username' FILE 是一个 PHP 魔法常量:php.net/manual/en/language.constants.predefined.php aww。 stackoverflow 重新配置了代码 _ _ FILE _ _ 没有空格...
【解决方案2】:

将文件夹复制到新名称,并在用户登录后删除旧文件夹,以确保在用户登录时一切正常。
或者可能当用户的会话结束时可以永远保持登录状态。选择合适的。

// Copy the folder
copy("user/$log_username", "user/$un");

 //Update database
 //Some code here

 // When user logs out
 Unlink("user/$log_username");

【讨论】:

  • 如果目录不为空,rmdir() 失败。
  • 投反对票有点不公平,因为我使用了错误的功能,不是吗?我的意思是友好的评论就足够了?
  • 每当我对问题或答案进行投票时,我都会将鼠标悬停在箭头上方并阅读工具提示。它说:“这个答案没用”。我会再次否决它,但这是不可能的:unlink() 不删除目录,只删除文件。 copy() 也只复制文件,它不能递归工作。
  • @axiac,你是对的。我看到了这个通知Warning: copy(): The first argument to copy() function cannot be a directory。我怀疑这个答案是如何被接受的。
【解决方案3】:

你可以在php中使用linux命令:

exec("mv $oldname $newname");

【讨论】:

  • 仅当您运行自己的 VPS 或 DS 时。大多数共享主机提供商阻止 exec
猜你喜欢
  • 1970-01-01
  • 2021-08-08
  • 2010-11-22
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 2011-11-30
  • 1970-01-01
相关资源
最近更新 更多