file_put_contents并发性问题

file_put_contents() 存在高并发问题,Smarty中处理方式如下。

<?php

define("FILE_PUT_CONTENTS_ATOMIC_TEMP", dirname(__FILE__)."/cache");
define("FILE_PUT_CONTENTS_ATOMIC_MODE", 0777);

function file_put_contents_atomic($filename, $content) {
 
    $temp = tempnam(FILE_PUT_CONTENTS_ATOMIC_TEMP, 'temp');
    if (!($f = @fopen($temp, 'wb'))) {
        $temp = FILE_PUT_CONTENTS_ATOMIC_TEMP . DIRECTORY_SEPARATOR . uniqid('temp');
        if (!($f = @fopen($temp, 'wb'))) {
            trigger_error("file_put_contents_atomic() : error writing temporary file '$temp'", E_USER_WARNING);
            return false;
        }
    }
 
    fwrite($f, $content);
    fclose($f);
 
    if (!@rename($temp, $filename)) {
        @unlink($filename);
        @rename($temp, $filename);
    }
 
    @chmod($filename, FILE_PUT_CONTENTS_ATOMIC_MODE);
 
    return true;
 
}

?>

php删除session方法总结

php删除session方法总结:

1、unset($_SESSION['xxx']) 删除单个session,unset($_SESSION['xxx']) 用来unregister一个已注册的session变量。其作用和session_unregister()相同。
   session_unregister()在PHP5中已经废弃。

  unset($_SESSION) 此函数千万不可使用,它会将全局变量$_SESSION销毁,而且还没有可行的办法将其恢复。用户也不再可以注册$_session变量。

2、session_unset() 或者 $_SESSION=array() 删除多个session

3、session_destroy()结束当前的会话,并清空会话中的所有资源。该函数不会unset(释放)和当前session相关的全局变量(globalvariables),也不会删除客户端的session cookie.PHP默认的session是基于cookie的,如果要删除cookie的话,必须借助setcookie()函数。

总结:

session_destroy是注销所有的session变量,并且结束session会话;
session_unset()并不注销session变量,但把所有的session变量的值清空。

参考资料
http://stackoverflow.com/questions/17217777/difference-between-unset-and-session-unset-in-php
http://stackoverflow.com/questions/6455965/how-to-unset-a-specific-php-session-on-logout
http://php.net/manual/en/function.session-unset.php
http://stackoverflow.com/questions/5697822/session-unset-or-session-destroy
http://stackoverflow.com/questions/4303311/what-is-the-difference-between-session-unset-and-session-destroy-in-php

关于session_unset与session_destroy函数区别以及使用方法

本文章来介绍了关于session_unset与session_destroy函数区别以及使用方法。

session_unset()

释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id

代码如下
<?php
    session_start();
    $_SESSION['user'] = 'user1';
    $_SESSION['name'] = 'name1';
    session_unset();//删除所有$_SESSION变量
?>

session_destroy()

session_destroy()结束当前的会话,删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留
因此,释放用户的session所有资源,需要顺序执行如下代码:

代码如下
<?php
session_start();
$_SESSION['user'] = 'user1';
session_unset();//清空内存中的变量
session_destroy();//删除当前用户对应的session文件以及释放session id
?>