重命名服务器文件错误(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]的主要内容,如果未能解决你的问题,请参考以下文章