重命名服务器文件错误(http 包装器不支持重命名)[PHP]

Posted

技术标签:

【中文标题】重命名服务器文件错误(http 包装器不支持重命名)[PHP]【英文标题】:Renaming Server File Error (http wrapper does not support renaming) [PHP] 【发布时间】:2018-10-21 14:33:32 【问题描述】:

在我的页面上,用户可以上传文档,这些文档将保存在用户特定的文件夹中。目录存储在一个 url 中:http://localhost/folder/user/documentA_user_timestamp.ext 在数据库中。

用户还可以删除文件,这会删除数据库中的文件条目,但我希望将文件移动到指定的存档文件夹。但是,当 php rename() 尝试执行其工作时,我总是会收到此错误消息:

http wrapper 不支持在...中重命名

我似乎无法理解错误消息并找出它的原因

$filepath = $_POST['file'];
$archivePath = FILESYS_DOCS_ARCHIVE . basename($filepath);

if (!file_exists(FILESYS_DOCS_ARCHIVE))
    mkdir(FILESYS_DOCS_ARCHIVE, 0777);


$success = rename($filepath, $archivePath);

if ($success)
    echo "SUCCess";
 else 
   echo $archivePath;

【问题讨论】:

php 是否显示一些错误?你检查过php错误日志吗? 调用重命名命令时$filepath$archivePath的值是多少?我猜其中至少有一个包含 URL 而不是磁盘上的路径。另请显示完整的错误消息,而不是其中的 sn-p。谢谢 @Sakezzz 问题中已经提到了错误... @ADyson 两个值都是 url: "localhost/folder..." 我必须将它们转换为目录路径 "C:/...." 吗? 是的。否则,它会尝试向该 URL 发出 HTTP 请求,显然您无法通过 HTTP 重命名文件。不要忘记 PHP 是在你的服务器上执行的,所以它可以直接访问服务器磁盘,在这个过程中不需要通过 URL 或任何东西来引用它。 【参考方案1】:

使用这个

$dir = str_replace('http://','',base_url()); rename($dir.'旧文件名', $dir.'/新文件名')

【讨论】:

请在您的代码中添加一些解释,以便其他人更好地理解它。

以上是关于重命名服务器文件错误(http 包装器不支持重命名)[PHP]的主要内容,如果未能解决你的问题,请参考以下文章

Python curses 不支持重定向

由于苹果链接器错误,应用程序重命名后单元测试无法运行

Elixir重命名并包装Erlang模块?

将我的程序与 Windows 资源管理器的重命名事件挂钩

怎样用asp实现,下载指定网址文件,并重命名后保存到本地服务器上?

解决方案资源管理器 VS 2015 中的文件重命名