注销时重命名文件

Posted

技术标签:

【中文标题】注销时重命名文件【英文标题】:Renaming a file on log out 【发布时间】:2014-04-12 01:41:08 【问题描述】:

我正在尝试用 php 重命名一个文件,但由于某种原因它不起作用,我是否必须在 PHP 下激活一些特殊权限?

这是我的 php 文件代码

<?php
  if(!rename('file.php','filer.php'))
  
    echo "Couldn't rename file!";
  
  else 
  
    echo "file renamed succesfully!";
  
?>

当他们退出登录区域时,我正在尝试重命名我的/var/www 目录中的文件,这样他们就无法访问回击按钮。我的代码有错误吗?还是有其他方法可以防止这种情况发生?

【问题讨论】:

错误报告是否设置为 E_ALL? 这听起来是个糟糕的主意...文件怎么会被改回来?其他访问者将如何访问该文件?为什么不在会话中存储一个布尔值$loggedIn 并在他们注销时销毁会话。检查每个页面以确保他们已登录,否则重定向到登录页面。 哦,天哪,是的,当我完全诚实地回答时,我没有阅读底部。这确实是一个糟糕的想法,原因有很多,你应该按照 Travesty 的建议去做。 @travesty 谢谢你的想法,我们要清楚,你的意思是当我验证用户和密码时,创建一个变量 $loggedin 并将它作为 $_POST 传递给其他页面? 不,不是 $_POST。阅读如何使用PHP sessions。 【参考方案1】:

此文件夹/var/www/ 的默认权限为:chmod 755 /var/www/

“所有者读取、写入和执行”和“组和其他所有人读取和执行” (-rwxr-xr-x)

文件夹/var/www/file内的文件为:chmod 644 /var/www/file

我不知道您是否更改了权限或只是执行此命令,我们会工作。

chmod 777 /var/www/file.php

“所有者、组和其他所有人读取、写入和执行”

【讨论】:

让每个人都拥有文件的写权限是不是有点不安全? 是的,但他必须寻找正确的权限。【参考方案2】:

试试这个,然后......它会以新名称复制文件,然后他们会删除原始文件:

copy('file.php','filer.php');
unlink('file.php');

您不会尝试移动调用代码的文件,是吗?

【讨论】:

为什么这比rename()更可取? 不是,我只是给了 OP 不同的代码来做同样的事情,以防万一它起作用。我没有时间处理配置文件之类的,我只是突然在网站上阅读一些内容,甚至没有打算回答任何内容。 如果是这种情况,我深表歉意,因为没有任何答案,我只是在途中提供了一个短暂的想法。好吧,至少人们现在可以阅读这些 cmets。【参考方案3】:

PHP 必须具有对该文件的写入权限。 (我假设你有一个 UNIX 系统)。首先通过运行以下命令找出 PHP 运行的用户身份:

echo `whoami`;

在 PHP 解释器中。 (在我的系统上是www-data)。然后运行:

sudo chown www-data file.php

在 shell 中,与您想要的文件在同一目录中。当然,将www-data 更改为您系统上的PHP 用户。确保所有者具有写入权限。然后你就完成了; PHP 可以重命名这个文件。

【讨论】:

只是为了确保清楚,这些是围绕 whoami 的反引号,而不是引号。

以上是关于注销时重命名文件的主要内容,如果未能解决你的问题,请参考以下文章

[重命名应用程序中的树节点时重命名文件夹名称

在php中上传时重命名文件

在 Oozie 或 pig 运行时重命名文件夹

防止用户在从远程 ftp 服务器 cocoa 流式传输文件时重命名文件

如果已经存在该文件,则 Python 程序在覆盖时重命名文件名

在用户下载文件时重命名另一台服务器上的文件