【问题标题】:PHP Rename and illegal filenamePHP重命名和非法文件名
【发布时间】:2013-06-11 19:34:29
【问题描述】:

我在重命名现有文件时遇到了一个奇怪的问题:

我的服务器上有一系列需要通过文件选择对话框选择然后重命名的 html 文件。

打开对话框的表单通过 JavaScript 调用并正确打开对话框,允许选择文件并重命名它,直到我遇到一个包含一些(可能)非法字符的文件。此时我得到一个文件未找到错误。

重命名的来源和目的地相同,只是需要更改文件名。

适用于其他文件的我的代码如下(为了清楚起见,对变量进行了重命名):

$dest_path = realpath(dirname(dirname(__FILE__))) . $miDestination ;
$targefile = $dest_path  .  basename( $_FILES["thesrcfile"]["name"]);
$newName = $dest_path . $anewname . ".html";
rename($targefile,$newName);

如前所述,这可以正常工作,直到我到达一个名称如下的文件:

These are "very" strangely-named file's!.html

从这里我得到一个找不到文件的错误。所有权限都是正确的,并且此代码已与更明智的命名文件一起正常工作。顺便说一句,我无法控制文件的名称,它们可以包含任何字符。

任何人都可以提出一种方法来获得重命名功能以将这些文件识别为存在并相应地重命名它们吗?

非常感谢

最大

【问题讨论】:

  • 生成随机名称,永远不要接受原始名称。
  • 查看this
  • @zerkms:原始文件通过另一个进程复制到它们的位置 - 我无法控制名称,直到它们到达所需的文件夹,此时我想重命名它们。
  • @CORRUPT:该代码究竟如何帮助我重命名文件?
  • @MaxVK 您可以尝试使用它将文件名转换为文件系统兼容的名称。例如,您可以在$newName = $dest_path . $anewname . ".html"; 之前将其应用于$anewname

标签: php


【解决方案1】:

trim()str_replace() 将所有非法字符转换为 $anewname var

【讨论】:

  • 正如我在另一条评论中提到的,更改字符串肯定是无关紧要的,因为字符串表示重命名之前存在的文件 - 更改字符串将无法找到文件?
  • 所以你的 $_FILES["thesrcfile"]["name"] 比 PHP 找不到?
  • 是的。该文件已经存在(没有我的干预),我正在尝试对其进行重命名,但是,由于其中的字符,文件名本身无法被识别。我可以清理字符串,但这只是意味着它不会匹配文件本身,因此找不到文件实际上是正确的。
  • 你能看到已经上传的文件名吗?看看有什么不同?例如:这些%20are%20%22very%22%20strangely%2Dnamed%20file%27s%21.html
  • 文件在文件对话框中被看到和选择,从表单中触发。我可以读取文件名并将其打印到控制台,但是当我尝试对其执行任何操作时 PHP 无法找到它。所看到的文件名与应有的完全一样,PHP 就是找不到它。
猜你喜欢
  • 2014-09-09
  • 2014-01-20
  • 2020-04-05
  • 2011-10-30
  • 2014-09-18
  • 2013-08-31
  • 2021-04-07
  • 2015-01-11
  • 1970-01-01
相关资源
最近更新 更多