首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unlink()不删除文件

Unlink()不删除文件
EN

Stack Overflow用户
提问于 2014-03-19 20:48:46
回答 2查看 1.1K关注 0票数 1

我在logout.php中有这段代码

代码语言:javascript
复制
  session_start(); 
  $FileLink = 'tmp/sess_'.session_id();
      //echo $FileLink ; shows the tmp/sess_3386911cc664626ffb3664c478c8ad55 file
  unlink($FileLink); 
  session_unset();
  session_destroy();

我读过很多文章说同样的方法,但我没有让会话文件被删除。

有什么不对劲吗?

我几乎什么都试过了。如果是文件,是可写的,是可读的,是路径,将路径更改为完全路径,什么都不工作,只是会话未设置,文件将是0字节,但不会删除。

有什么建议吗谢谢?

编辑 my php.ini

代码语言:javascript
复制
  session.save_handler = "files"
  session.save_path = "/home/website/public_html/gallery/tmp"
  session.use_cookies = 1
  session.use_only_cookies = 1
  session.name = "PHPSESSID"
  session.auto_start = 0
  session.cookie_lifetime = 0
  session.cookie_path = "/"
  session.cookie_domain = ""
  session.cookie_httponly = ""
  session.serialize_handler = "php"
  session.gc_probability = 1
  session.gc_divisor = 1000
  session.gc_maxlifetime = 1440
  session.bug_compat_42 = ""
  session.bug_compat_warn = ""
  session.referer_check = ""
  session.entropy_length = 0
  session.cache_limiter = "nocache"
  session.cache_expire = 180
  session.use_trans_sid = 0
  session.hash_function = 0
  session.hash_bits_per_character = 5

EDIT2文件夹权限

tmp文件夹是755,使用777尝试,仍然是一样的,即使文件是可读的或可写的,而且我得到了它们是正确的。

EN

回答 2

Stack Overflow用户

发布于 2014-03-19 21:23:42

您在使用什么操作系统,我在这里看到了一个非utf8字符:

代码语言:javascript
复制
echo $FileLink ; shows the tmp/sess_hkhgdfhghgöfhghggsöh file

我知道在ubuntu上那些角色会被一个替换吗?马克这可能就是问题所在?

尝试以下任何一种方法:

1)对文件夹执行readdir并输出文件名:

代码语言:javascript
复制
if ($handle = opendir('tmp')) {
    while (false !== ($entry = readdir($handle))) {
        echo "$entry\n";
    }
    closedir($handle);
}

2)将非字母数字替换为问号:

代码语言:javascript
复制
$FileLink = preg_replace("/[^A-Za-z0-9 ]/", '?', $FileLink);
unlink($FileLink); 

最后,session_id()给出了非utf8字符,我现在正在研究这个问题。

3)通过设置无效ID将文件所有权设置为NoBody:

代码语言:javascript
复制
chown($FileLink, 666);

4)在创建会话之前自己创建会话文件:

代码语言:javascript
复制
$fp = fopen('tmp/sess_3386911cc664626ffb3664c478c8ad55', 'w+');
fclose($fp);
session_id('3386911cc664626ffb3664c478c8ad55');
session_start();

您可以复制PHP用于创建会话名称的算法。我希望删除之后会很好。

票数 0
EN

Stack Overflow用户

发布于 2014-03-19 21:23:43

仅用于测试目的.

我不知道这是否有用,但下面的测试代码证明是成功的。

代码语言:javascript
复制
<?php
session_start();

$ses_id = session_id();
echo $ses_id;

$filename = 'test_folder/sess_'.$ses_id;
$fp = fopen($filename, 'w');
fwrite($fp,"");
fclose($fp);

unlink($filename);

编辑

在这一点上,我所能想到的就是,您可以尝试从上一页中获取会话的变量,然后它看起来可能如下所示:

第一页

代码语言:javascript
复制
session_start(); 
$ses_id = "sess_" .session_id();

echo '<a href="check_session.php">Check session</a>';

注销页

代码语言:javascript
复制
session_start(); 
$FileLink = 'tmp/sess_'.$ses_id;

unlink($FileLink); 
session_unset();
session_destroy();

Check session

代码语言:javascript
复制
<?php
session_start();

if(!empty($_SESSION)){
    echo "sess_" .session_id();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22517755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档