【问题标题】:Why PHP rename() is deleting files?为什么 PHP rename() 正在删除文件?
【发布时间】:2018-02-13 17:52:27
【问题描述】:

我无法确定我的代码有什么问题。 这行代码是删除文件而不是重命名文件。

for($i=0;$i<(7-$n);$i++){   
    rename($location."/".($last-$i).".txt", $location."/".($last-$i-$n).".txt");
    rename($location."/".($last-$i).".bmp", $location."/".($last-$i-$n).".bmp");            
}

我已经回显了源文件名和目标文件名,它看起来对我来说是正确的。 我正在用 unlink() 函数做同样的“变量沙拉”,它的行为符合预期。 我尝试制作自己的 rename() 函数:

function myRename($old, $new){
  $content = printFile($old); //this function returns the content of a file.
  unlink($old);
  $file = fopen($new, "w");
  fwrite($file,$content);
  fclose($file);
}

发生同样的错误。所有重命名的文件最终都被删除。 这让我觉得我做的“可变沙拉”有一个愚蠢的错误。 但我不知道是什么。回显的结果对我来说是正确的。 PHP 没有给我任何与问题相关的警告。

回显结果:

来源:“data/directory_exemple/47.txt” 目的地:“data/directory_exemple/46.txt”

感谢您的帮助!

编辑:看起来只有一个文件被重命名。其余的被删除。 可能是逻辑错误。

【问题讨论】:

  • 运行 php 脚本的用户是否对您尝试重命名文件的文件夹具有写入权限?
  • Erm,您正在尝试将 47.txt 重命名为 46.txt 但肯定 46.txt 已经存在
  • @JonathanKortleven 如果他们不这样做,那么肯定什么都不会改变
  • 尝试在调用rename() 之后回显您的重命名调用,看看流程是否有意义。就像echo "rename(".$location."/".($last-$i).".txt", $location."/".($last-$i-$n).".txt");";&lt;br&gt; 你可能会发现,当你想要帕尔马大蒜味的时候,你会在沙拉中加入便便面包丁。
  • @RiggsFolly 真丢脸!我觉得你是对的!我发誓我是这么想的。但是我非常渴望尽快完成这个项目,以至于我一直坚持要在不存在的地方寻找错误。谢谢你帮助我!正如我所料,这确实是一个愚蠢的错误。

标签: php rename file-rename


【解决方案1】:

你下面的功能正常工作

function myRename($old, $new){
  $content = printFile($old); //this function returns the content of a file.
  unlink($old);
  $file = fopen($new, "w");
  fwrite($file,$content);
  fclose($file);
}

我已经用示例文件测试了你的 myRename() 函数,它重命名了。

确保你有正确的路径,从printFile()获取内容和写权限

【讨论】:

  • 并不是说这是错误的,但是只要 OP 在取消链接之前读取旧文件的内容,这有什么关系呢?
  • @MagnusEriksson,你是对的。即使我们先取消链接,它也会保留文件的内容。编辑了我的答案
  • 这实际上已经从一个答案变成了一个评论。将 OP 的原始代码发布为“它可以工作”并提供一些关于检查内容的建议并不是一个好的答案。
猜你喜欢
  • 2019-05-18
  • 2015-06-24
  • 2023-03-05
  • 2011-08-19
  • 2020-05-08
  • 1970-01-01
  • 2012-03-01
  • 2018-06-18
  • 2017-06-06
相关资源
最近更新 更多