PHP报Warning session_start错误解决方案

合集下载

PHP应用程序的错误处理方法

PHP应用程序的错误处理方法

PHP应用程序的错误处理方法1. 引言PHP是一种开发网站的编程语言,广泛用于构建应用程序和动态网站。

在开发任何应用程序时,出现错误是不可避免的。

因此,了解PHP应用程序的错误处理方法对于开发人员至关重要。

2. 错误处理方法在PHP中,可以使用以下方法处理应用程序中的错误。

2.1. 错误报告默认情况下,PHP会向客户端显示错误报告。

这些报告可以帮助开发人员识别和修复错误,但对于终端用户来说可能过于技术性。

可以使用以下方法关闭错误报告。

在PHP代码中,使用以下指令关闭错误报告:error_reporting(0);在PHP配置文件中,将error_reporting设置为0:error_reporting=02.2. 错误日志错误日志是记录PHP应用程序中的错误的文件。

通过错误日志,开发人员可以查看应用程序中的错误信息并进行排除。

在PHP代码中,可以使用以下指令将错误日志写入文件:ini_set('error_log', '/path/to/error.log');在PHP配置文件中,可以设置以下参数将错误日志写入文件:error_log = /path/to/error.log2.3. 异常处理异常是在运行时发生的错误。

使用异常处理可以在异常发生时执行特定操作。

在PHP中,可以使用以下语法抛出异常:throw new Exception('Error message');可以使用try-catch语句捕获和处理异常:try {// 代码块} catch (Exception $e) {echo 'Caught exception: ', $e->getMessage(), "\n";}2.4. 自定义错误处理方法可以使用set_error_handler()函数自定义PHP应用程序的错误处理程序。

通过自定义错误处理程序,可以在出现错误时采取特定操作。

session()出错

session()出错
................
?>
将a.php保存为utf-8格式,结果用浏览器访问这个php文件,就会出现如下错误:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started
看见没有!如果选了这个选项,就会在页面的最前面输出2到4个字节!
而 session_start() 要求之前没有任何输出给客户端浏览器
二、
另外还有一个地方可能会出错,例如:
/--a.php--
?>
空行
空行
如果你包含a.php之后再来也会有这个问题,通常的建议是经常被包含的文件末尾不要有?>
又如:
在调用Session_Start()之前不能有任何输出.例如下面是错
误的.
==========================================
1行
2行<?PHP
3行 Session_Start();//之前在第一行已经有输出
4行.....
5行?>
==========================================
只需对php.ini中的Output_buffering进行设置,默认值为no,将这个修改为1就可以了。
原来:
Unicode 签名 (BOM) 可在文档中包括字节顺序标记 (BOM)。BOM 是位于文本文件开头的 2 到 4 个字节,可将文件标识为 Unicode,如果是这

教你如何使用php的session

教你如何使用php的session

教你如何使用php的session教你如何使用php的session学会php session可以在很多地方使用,比如做一个后台登录的功能,要让程序记住用户的session,其实很简单,看了下面的文章你就明白了。

PHP session用法其实很简单它可以把用户提交的数据以全局变量形式保存在一个session中并且会生成一个唯一的session_id,这样就是为了多了不会产生混乱了,并且session中同一浏览器同一站点只能有一个session_id,下面我们一起来看看关于session使用方法。

如何使用session,凡是与session有关的,之前必须调用函数session_start();为session赋值很简单,如:复制代码代码如下:<?phpSession_start();$Name = "这是一个Session例子";Session_Register("Name");//注意,不要写成:Session_Register("$Name");Echo $_SESSION["Name"];//之后$_SESSION["Name"]为"这是一个Session例子">在php4.2之后,可以为session直接赋值:复制代码代码如下:<?PHPSession_Start();$_SESSION["name"]="value";>取消session可以这样:复制代码代码如下:<?phpsession_start();session_unset();session_destroy();>读取 sessionPHP 内置的$_SESSION 变量可以很方便的访问设置的session 变量。

复制代码代码如下:<?phpsession_start();echo "登记的用户名为:".$_SESSION["username"]; //输出登记的用户名为:nostop>检查变量是否被登记为会话变量 session_is_registered语法:boobean session_is_registered(string name);这个函数可检查当前的session之中是否已有指定的变量注册,参数name就是要检查的变量名。

PHP环境错误解决方法整合

PHP环境错误解决方法整合

在windows下编程,当使用session_start()方法的时候,有时会报
session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/inpublisher/php1.php:1)这样的错误,说是已经有输出,用编辑器打,前面明明什么都没有,原来在使用AJAX的时候,也出现过这种情况,后来,把这个PHP 文件放到linux 中打开,会发现,在文件的最前面,会出现“锘 ”这样的一个字符(引号内),把它去掉以后,再运行,OK,运行正常。后来在网上搜索一些文件,给的解释是:UTF8文件的BOM(Byte Order Mark)标志,在保存的时候会自动存入!
然后重新启动web服务器
这一点很容易做到,但是做完这样的设置后还是连不上,错误的信息如下:
MS SQL Server 数据库连接错误!请检查数据库主机变量设置是否正确!!!
而主机的变量设置我是一遍一遍的检查,那些设置是一点问题都没有的,翻遍网页,找到了下面的这点蛛丝马迹:
资料:
after a few hour ,I found the problem was caused by
ntwdblib.dll ,which version is 7.00.839 ,when I replaced old ntwdblib.dll with the new
ntwdblib.dll ,which version is 8.00.194 ,all problem are solved.
I am trying to connect to SQL Server 2000 from PHP

PHP SESSION常见问题集锦及解决

PHP SESSION常见问题集锦及解决
注:此问题,会出 PHP4.1.2 中,更高版本,没有测试过。
6.问:用 session 做登录主页面后,其它页面怎么用 session 限制登录。。。 答:最简单的方法是 session_start(); if(!session_registered('login') ││ $login != true) { echo "你没有登陆";
exit; }
7.问:我用 session_register()注册了 session 变量,可是当我用 header 或用 javascript 的重定向语句, 那么在一下页面中,我却访问不到 session 所注册的变量值。请问如何解决?
问题的程序片段: session_start();
$ok = 'lov#39;); header("location : next.php"); ?>
问题 10:session_unregister() 和 session_destroy() 有何区别? session_unregister()函数主要作用是注消当前的一个 session 变量。不过要注意的是,如果你用 $HTTP_SESSION_VARS 或$_SESSION 在当前页面中引用过 session 变量,那么你可能需要和 unset() 配合 来注消 session 变量。 而 session_destroy()是清除当前的 session 环境。意思就是说,当你用 session_destroy()函数后,那 么你就不可能再用 session_is_registered()来检测 session 的变量了。但是需要注意的是他不能清除 global 中的 session 或使用了 session cookie 的中的 session.所以在用 session_destroy 之前,最好不要用 $HTTP_SESSION_VARS $_SESSION 来访问 session.(译自于 )

php Session错误解决方案

php Session错误解决方案

在windows下编程,当使用session_start()方法的时候,有时会报session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/inpublisher/php1.php:1)这样的错误说是已经有输出,用编辑器打,前面明明什么都没有,原来在使用AJAX的时候,也出现过这种情况,后来,把这个PHP文件放到linux中打开,会发现,在文件的最前面,会出现“锘”这样的一个字符(引号内),把它去掉以后,再运行,OK,运行正常。

后来在网上搜索一些文件,给的解释是:UTF8文件的BOM(Byte Order Mark)标志,在保存的时候会自动存入!不管它是干嘛的,现在的目的就是把它去掉,我总结的方法有下面三种:1、在Linux下打开,去掉后再保存2、用写字板打开,把光标放到最前后回车,然后再敲删除,重新回到第一行,这样最前面的那个字符就会去掉3、使用UltraEdit编辑器(很好用的一个编辑器,网上多的是,自己下去),打开高级----配置----Unicode/utf-8 检测,把自动检测UTF-8文件,自动检测没有BOM的Unicode文件等前面的勾全去掉,然后你再打开那个文件,就会发觉“锘”这个字符出现了,删除就OK 了笨方法:难道有很多页面的时候,你也这样做吗?在PHP页面首部直接设置OB_START();,就可以解决!解决办法:修改php.ini中的session.auto_start = 0 为session.auto_start = 1output_buffering =改为on或者任何数字。

然后别忘记重新启动...详细出处参考:/article/21136.htm。

Session失效的原因汇总及解决丢失办法

Session失效的原因汇总及解决丢失办法

Session失效的原因汇总及解决丢失办法昨天去GTSC⾯试,有⾯试官问我关于Session丢失之后怎么查的问题,说⽼实话,开发到现在很少碰到这样的情况,唯⼀想到的就是Session超时,还有就是做Session读写⽇志,发觉⾯试官听了之后不是很满意,汗!不管怎么说,是个学习的好机会,今天抽空查了⼀下⽹上关于这些问题的处理⽅法,总结⼀下,希望对⼤家有所帮助。

顺便提⼀下asp中Session的⼯作原理:asp的Session是具有进程依赖性的。

ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。

所以当inetinfo.exe进程崩溃时,这些信息也就丢失。

另外,重起或者关闭IIS服务都会造成信息的丢失。

Session的实现的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进⾏状态控制,由于Session本⾝就是⽤来做状态维护的,因此⽤HttpModule做Session是再合适不过了。

原因1:bin⽬录中的⽂件被改写,有⼀种机制,为了保证dll重新编译之后,系统正常运⾏,它会重新启动⼀次⽹站进程,这时就会导致Session丢失,所以如果有access数据库位于bin⽬录,或者有其他⽂件被系统改写,就会导致Session丢失原因2:⽂件夹选项中,如果没有打开“在单独的进程中打开⽂件夹窗⼝”,⼀旦新建⼀个窗⼝,系统可能认为是新的Session会话,⽽⽆法访问原来的Session,所以需要打开该选项,否则会导致Session丢失参考配置:原因3:似乎⼤部分的Session丢失是客户端引起的,所以要从客户端下⼿,看看cookie有没有打开原因4:Session的时间设置是不是有问题,会不会因为超时造成丢失原因5:IE中的cookie数量限制(每个域20个cookie)可能导致session丢失原因6:使⽤web garden模式,且使⽤了InProc mode作为保存session的⽅式解决丢失的经验1. 判断是不是原因1造成的,可以在每次刷新页⾯的时候,跟踪bin中某个⽂件的修改时间2. 做Session读写⽇志,每次读写Session都要记录下来,并且要记录SessionID、Session值、所在页⾯、当前函数、函数中的第⼏次Session操作,这样找丢失的原因会⽅便很多3. 如果允许的话,建议使⽤state server或sql server保存session,这样不容易丢失4. 在global.asa中加⼊代码记录Session的创建时间和结束时间,超时造成的Session丢失是可以在SessionEnd中记录下来的。

session失效的几种方法

session失效的几种方法

session失效的几种方法随着互联网的快速发展,越来越多的应用程序开始采用session来保存用户的状态信息。

然而,session失效是一个常见的问题,它可能会导致用户的信息丢失,给用户带来不好的体验。

本文将介绍session失效的几种方法,并提出一些解决方案。

一、session超时session的超时是指session在一定时间内没有活动就会自动失效。

这个时间可以通过服务器配置文件中的session.timeout参数进行设置。

一旦超过了这个时间,session就会自动失效。

这种情况通常是由于用户长时间不进行操作导致的,比如长时间没有点击或者提交表单等。

解决方法:1. 增加session的超时时间:可以通过修改服务器配置文件来增加session的超时时间,使得用户可以有更长时间来进行操作。

2. 提示用户:当用户的session即将失效时,可以通过弹窗或者提醒条等方式来提醒用户及时操作,从而避免session的失效。

二、服务器重启服务器在进行内存清理、系统维护、升级等操作时会导致session的失效。

这种情况通常是由服务器端的操作导致的,当服务器重启后,session会被清空,用户的状态信息也会丢失。

解决方法:1. 集裙部署:可以采用集裙部署的方式来避免单点故障,当一个服务器重启时,其他服务器可以继续提供服务,从而避免影响用户。

2. 定时备份:可以采用定时备份session的方式,将用户的状态信息保存到数据库中或者文件中,当服务器重启后可以将备份的session 信息还原,从而避免用户的信息丢失。

三、浏览器限制浏览器的限制也会导致session的失效,比如用户关闭浏览器、清除cookie、切换浏览器等操作都会导致session的失效。

这种情况通常是由于用户端的操作导致的,当用户进行了以上操作后,session就会失效。

解决方法:1. 使用cookie:可以将session的标识符保存到cookie中,当用户关闭浏览器后再次打开时,可以通过cookie来重新获取session,从而避免session的失效。

关于“Cannot start session without errors”

关于“Cannot start session without errors”

关于“Cannot start session without errors“Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.
最近装了php,结果,打开phpmyadmin的时候就出现了这样的错误,首先:在php 的目录下建立个文件夹tmp,这个有权限的问题,如果是ntfs的分区,就一定要添加evryone的控制权限,否则是没用的。

其次:在php.ini找到session.save_path 这一行,设成session.save_path =
"D:/WebDevelop/MyWeb/Temp"把分号弄掉。

这里要注意,php.ini里面有三处session.save_path ,如果只修改一个地方,还是不行的。

将php.ini中的session.auto_start的值改为1(启动),默认是0(禁用),
最后,是在phpmyadmin中找到,config.sample.inc.php,改成config.inc.php,找到$cfg['blowfish_secret'] 将后面的赋值,加入数字和字母组合。

全部修改完以后,重启iis 或者apach,就可以看到熟悉的phpmyadmin的登陆界面了。

php关闭warning问题的解决方法

php关闭warning问题的解决方法

你若盛开,蝴蝶自来。

php关闭warning问题的解决方法php关闭warning问题的解决方法在利用php做网页的时候,关闭php有时候会弹出warning的显示提示。

下面我为大家整理了php关闭warning问题的解决方法,期望能帮到大家!error_reporting 设定错误讯息回报的'等级2047我记得应当是E_ALL。

php.ini 文件中有很多配置设置。

您应当已经设置好自己的php.ini 文件并把它放在合适的名目中,就像在 Linux 上安装PHP 和 Apache 2 的文档说明中所示的那样(请参阅参考资料)。

在调试PHP 应用程序时,应当知道两个配置变量。

下面是这两个变量及其默认值:display_errors = Offerror_reporting = E_ALLE_ALL能从不良编码实践到无害提示到出错的全部信息。

E_ALL 对于开发过程来说有点太细,由于它在屏幕上为一些小事(例如变量未初始化)也显示提示,会搞糟扫瞄器的输出所以不建议使用2047,最好把默认值改为:error_reporting = E_ALL ~E_NOTICEPHP.ini中display_errors = Off失效的解决第1页/共3页千里之行,始于足下。

问题:PHP设置文件php.ini中明明已经设置display_errors = Off,但是在运行过程中,网页上还是会消失错误信息。

解决:经查log_errors= On,据官方的说法,当这个log_errors设置为On,那么必需指定error_log文件,假如没指定或者指定的文件没有权限写入,那么照样会输出到正常的输出渠道,那么也就使得display_errors 这个指定的Off失效,错误信息还是打印了出来。

于是将log_errors = Off,问题就解决了。

常常见到error_reporting(7)直意为:设定错误讯息回报的等级。

PHP错误Warning:Can...

PHP错误Warning:Can...

PHP错误Warning:Can...今天在测试以下代码时遇到该错误:复制代码代码如下:session_start();$_SESSION['username']=$username;echo "<script language='javascript'>location.href='../admin.php';</script>";exit();出现错误:复制代码代码如下:Warning: Cannot modify header information - headers already sent by...看了⼀些⽹上的⽅法也没解决,最后在php.ini配置output_buffering默认为4096就没有遇到这个错误了:output_buffering设置说明:Off: 表⽰关闭PHP输出缓存On: 打开⽆限⼤的输出缓存4096: 打开⼤⼩为4096Byte的输出缓存默认情况下,php buffer是开启的,⽽且该buffer默认值是4096,即4kb。

你可以通过在php.ini配置⽂件中找到output_buffering 配置.当echo,print等输出⽤户数据的时候,输出数据都会写⼊到php output_buffering中,直到output_buffering写满,会将这些数据通过tcp传送给浏览器显⽰。

你也可以通过ob_start()⼿动激活php output_buffering机制,使得即便输出超过了4kb数据,也不真的把数据交给tcp传给浏览器,因为ob_start()将php buffer空间设置到了⾜够⼤。

只有直到脚本结束,或者调⽤ob_end_flush函数,才会把数据发送给客户端浏览器。

关于output_buffering详细介绍可以参考:补充:当然你也可以通过去除BOM解决这个问题,建议以UTF-8⽆BOM格式编码。

session入库以及php高版本下session入库报错的解...

session入库以及php高版本下session入库报错的解...

session入库以及php高版本(7.2)下session入库报错的解决法们在php7.0下,实现session入库,代码如下:<?php//连接数据库functionconn(){$link=mysqli_connect('localhost','root','aa','php1',3306); mysqli_set_charset($link,'utf8');returntrue;}functionopen(){returnconn();}functionclose(){returntrue;}functionread($sess_id){global$link;$sql="selectsess_valuefromsesswheresess_id='{$sess_id}'"; $res=mysqli_query($link,$sql);if(mysqli_fetch_row($res)[0]){returnmysqli_fetch_row($res)[0];}return'';}functionwrite($sess_id,$sess_value){global$link;$time=time();$sql="insertintosessvalues('{$sess_id}','{$sess_value}','{$time}') onduplicatekeyupdatesess_value='{$sess_value}',sess_time='{$time}'"; returnmysqli_query($link,$sql);}functiondelete($sess_id){global$link;$sql="deletefromsesswheresess_id='{$sess_id}'";returnmysqli_query($link,$sql);}functiongc($lifetime){global$link;$nowtime=time();$time=$nowtime-$lifetime;$sql="deletefromsesswheresess_time<'{$time}'";returnmysqli_query($link,$sql);}session_set_save_handler('open','close','read','write','delete','gc');session_start();$_SESSION['name']="";运行一切正常,可一旦切换到高版本,例如7.2下,就会报错,Warning:session_start():Failedtoreadsessiondata:user(path:)或者其他莫名的错,解决法也很简单,只需要在read方法里面的returnmysqli_fetch_row($res)[0],在返回之前一下强制类型转换即可,即改成return(string)mysqli_fetch_row($res)[0];但没强制转换之前也字符串,为什么就不行呢?嘿嘿,你如果到传智来,就告诉你。

PHP警告错误处理办法

PHP警告错误处理办法

PHP警告错误处理办法对于⼀个PHP新⼿,遇到错误是⼀件很恼⽕的事情。

特别是当你写完⼀个页⾯去预览的时候,发现整个版⾯上⾯全是警告。

Notice: Use of undefined constant ALL_PS - assumed 'ALL_PS' in d:\wamp\www\cmsglobal.php on line 50 Notice: Undefined index: EaseTemplateVer in d:\wamp\www\cmslibs\template.core.php on line 51 Notice: Use of undefined constant uid - assumed 'uid' in d:\wamp\www\cmsglobal.php on line 54 Notice: Undefined index: uid in d:\wamp\www\cmsglobal.php on line 54 Notice: Use of undefined constant cuid - assumed 'cuid' in d:\wamp\www\cmsglobal.php on line 55 Notice: Undefined index: cuid in d:\wamp\www\cmsglobal.php on line 55 Notice: Use of undefined constant shell - assumed 'shell' in d:\wamp\www\cmsglobal.php on line 56 Notice: Undefined index: shell in d:\wamp\www\cmsglobal.php on line 56 Notice: Use of undefined constant cshell - assumed 'cshell' in d:\wamp\www\cmsglobal.php on line 57 Notice: Undefined index: cshell in d:\wamp\www\cmsglobal.php on line 57 Notice: Use of undefined constant username - assumed 'username' in d:\wamp\www\cmsglobal.php on line 58 Notice: Undefined index: username in d:\wamp\www\cmsglobal.php on line 58 Notice: Use of undefined constant cusername - assumed 'cusername' in d:\wamp\www\cmsglobal.php on line 59 Notice: Undefined index: cusername in d:\wamp\www\cmsglobal.php on line 59 Notice: Use of undefined constant id - assumed 'id' in d:\wamp\www\cmscompanyjob.php on line 10 Notice: Use of undefined constant id - assumed 'id' in d:\wamp\www\cmscompanyjob.php on line 14 Notice: Use of undefined constant content - assumed 'content' in d:\wamp\www\cmscompanyjob.php on line 16 Notice: Use of undefined constant content - assumed 'content' in d:\wamp\www\cmscompanyjob.php on line 16 Notice: Use of undefined constant description - assumed 'description' in d:\wamp\www\cmscompanyjob.php on line 17 Notice: Use of undefined constant description - assumed 'description' in d:\wamp\www\cmscompanyjob.php on line 17 Notice: Use of undefined constant provinceid - assumed 'provinceid' in d:\wamp\www\cmscompanyjob.php on line 18 Notice: Use of undefined constant cityid - assumed 'cityid' in d:\wamp\www\cmscompanyjob.php on line 19 Notice: Use of undefined constant hy - assumed 'hy' in d:\wamp\www\cmscompanyjob.php on line 20 Notice: Undefined variable: content in d:\wamp\www\cmslibs\template.core.php on line 557 进⼊⽹站会出现⼤量类似下⾯的提⽰,但是可以正常显⽰和运⾏ Notice: Use of undefined constant ctbTitle - assumed 'ctbTitle' in d:\ctb1.5\ctb\include\config.php on line 23... b答案:这些是 PHP 的提⽰⽽⾮报错,PHP 本⾝不需要事先声明变量即可直接使⽤,但是对未声明变量会有提⽰。

Pythonwarning警告出现的原因及忽略方法

Pythonwarning警告出现的原因及忽略方法

Pythonwarning警告出现的原因及忽略⽅法
python开发中经常遇到报错的情况,但是warning通常并不影响程序的运⾏,⽽且有时特别讨厌,下⾯我们来说下如何忽略warning错误。

在说忽略warning之前,我们先来说下如何主动产⽣warning错误,这⾥⽤到warnings模块,看如下代码:
import warnings
def fxn():
warnings.warn("deprecated", DeprecationWarning)
with warnings.catch_warnings():
warnings.simplefilter("ignore")
fxn()
这样就产⽣了warning错误
那么如何来控制警告错误的输出呢?很简单
import warnings
warnings.filterwarnings("ignore")
这样就忽略了警告错误的输出。

很简单吧~~
⼜有⼈要问如何忽略命令⾏下警告错误的输出呢?也⾮常简单:
python -W ignore yourscript.py
这样就OK了
内容扩展:
1)代码中警告
import warnings
warnings.filterwarnings("ignore")
2)忽略命令⾏下警告错误的输出:
python -W ignore yourscript.py
以上就是本次介绍的全部相关知识点,的⼩编结合了⼏篇相关内容,希望能够帮助到你。

PHP错误WARNING:SES...

PHP错误WARNING:SES...

PHP错误WARNING:SES...做开发的时候,操作session有时候会遇到这个问题:Warning: session_start() [function.session-start]……系统环境:WIN2003+IIS6+PHP5.2.12PHP出现类似如下错误:Warning: session_start()[function.session-start]: ...... failed: No such file or directory......等情况,可以偿试修改⼀下php.ini⽂件中的session.auto_start = 0 改为 session.auto_start = 1如果重启IIS后问题依然存在,那就是session变量需要系统的临时⽂件空间,并需要读写的权限。

在php.ini⾥找到session.save_path = ,设置⼀个有效的⽂件夹路径,例如:session.save_path = "c:\php5\session_temp" 并添加该⽂件夹的权限,让everyone有修改写⼊的权限即可。

PHP环境:OS:CentOS release 5.2 (Final)Apache:Server version: Apache/2.2.3Server built: Jan 15 2008 20:33:30php:PHP 5.1.6 (cli) (built: May 24 2008 14:07:53)Copyright (c) 1997-2006 The PHP GroupZend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies报错信息如下:复制代码代码如下:Warning:session_start()[function.session-start]:open(/var/lib/php/session/sess_itqfqua1554rmkgcb8u89ujem5,O_RDWR)failed:Permission denied(13)in www_path on line 9Warning:Unknown:open(/var/lib/php/session/sess_itqfqua1554rmkgcb8u89ujem5,O_RDWR)failed:Permission denied(13)in Unknown on line 0Warning:Unknown:Failed to write session data (files);Please verify that the current setting of session.sav_path is correct (/var/lib/php/session)in Unknown on line 0解决办法:⽅法1、注释掉/etc/php.ini中session.save_path = “/var/lib/php/session”⽅法2、查看apache⽤户和组,然后将该⽤户加到session⽂件夹所处的组中。

PHP中session_start函数详解使用方法

PHP中session_start函数详解使用方法

PHP中session_start函数详解使⽤⽅法⼀、官⽅ session_status() 返回值为:PHP_SESSION_DISABLED 会话是被禁⽤的。

PHP_SESSION_NONE 会话是启⽤的,但不存在当前会话。

PHP_SESSION_ACTIVE 会话是启⽤的,⽽且存在当前会话。

⼆、尝试打印var_dump(session_status()); 值总为int 1与官⽅描述不⼀样,google it,当打印时,会显⽰如此:1.0 ----> PHP_SESSION_DISABLED if sessions are disabled.2.1 ----> PHP_SESSION_NONE if sessions are enabled, but none exists.3.2 ----> PHP_SESSION_ACTIVE if sessions are enabled, and one exists.三、思考何时返回 0 或 2 。

1、尝试加上session_start(),打印出了2。

session_start();var_dump(session_status()); // int 2说明:PHP_SESSION_ACTIVE 是指使⽤了session_start() 启动新会话或者重⽤现有会话.2、尝试在session_start() 后使⽤ session_destroy(),期望得到0。

session_start();session_destroy();var_dump(session_status()); // int 1说明:结果输⼊1,证明,现在session状态为 “PHP_SESSION_NONE 会话是启⽤的,但不存在当前会话”。

3、于是思考,当session不能⽤时状态才为 “PHP_SESSION_DISABLED 会话是被禁⽤的”,即返回0。

解决php项目中session失效的方法

解决php项目中session失效的方法

解决php项目中session失效的方法今天下班坐班车,快到站的时候,上家公司的leader发了个qq 给我,意思是救火,下车后回来在电脑上详细问了下,leader的描述如下[cpp]view plain copyprint.jpg"tracking-ad" data-mod="popu_167">1.这个地址你帮我看下为啥上传完试卷发布任务设置答题卡的时候 session就没了因为这个项目一开始后台都是我一人开发的,因此很快就找到了问题所在。

流程为:用户通过js组件上传试卷,在上传试卷的方法中通过session存储刚刚上传的试卷详细信息,如名称、后缀、存入资源表的ID等,上传成功后,再点击页面上的其他选项,如学校、年级、难易度等,最后点击提交,在提交处理的方法里,一开始便判断刚刚上传的session值是否存在,不存在便跳到试卷首页。

我在此方法中打印了$_SESSION,没有值,奇怪了,以前还是好好的。

于是我问了下,啥时候开始的,leader说下午快下班时,老师打电话说上传试卷设置答题卡不成功,老跳转。

接着又问了下,动服务器环境了么,leader 说没有。

既然出现了问题,那就解决问题呗。

正好这段时间在看《PHP核心技术与最佳实践》一书,里面就对session和cookie有详细的描述,同时也加深了我对二者的理解。

于是我先打开php的配置文件,找到session相关的配置项,发现session.save_path为/data2/session,我记得以前都是设置为/data1/session的,怎么变了。

于是我退出来去看看此路径,一开始我以为是该目录权限不够,后来一看,压根就没有该目录,难怪每个session不会跨页面。

于是新建文件,设置权限,再上传,一切又恢复正常了。

写到这,我也想再唠叨下session相关的技术点。

session是存储在服务器端的,默认是以文件方式存储的(session.save_handler = files)。

phpsession目录找不到的错误Errorsession

phpsession目录找不到的错误Errorsession

phpsession目录找不到的错误Errorsession问题来源今天安装一个应用,发现提示Error session_start(): open(/var/lib/php/session error,估计是找不到写不了啥啥啥。

于是我就去该路径下去看看,果然没有这个路径,就直接在php 路径下创建了session目录,问题得以解决。

SESSION 的数据保存在哪里呢?当然是在服务器端,但不是保存在内存中,而是保存在文件或数据库中。

默认情况下,php.ini 中设置的SESSION 保存方式是files (session.save_handler = files),即使用读写文件的方式保存SESSION 数据,而SESSION 文件保存的目录由session.save_path 指定,文件名以sess_ 为前缀,后跟SESSION ID,如:sess_c72665af28a8b14c0fe11afe3b59b51b。

文件中的数据即是序列化之后的 SESSION 数据了。

如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path 为开始目录。

当写入SESSION 数据的时候,PHP 会获取到客户端的SESSION_ID,然后根据这个 SESSION ID 到指定的 SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件。

读取 SESSION 数据是也是类似的操作流程,对读出来的数据需要进行解序列化,生成相应的 SESSION 变量。

Refs•session_save_path•Error session_start(): open(/var/lib/php/session error•runtime config•cacti PHP 少见错误PHP Warning: session_start():open(/var/lib/php/session/ •php session 总结。

PHP使用Session遇到的一个Permission denied Notice解决办法

PHP使用Session遇到的一个Permission denied Notice解决办法

如果在ubuntu/Debian下, 采用apt安装的PHP, 那么在使用Session的时候, 就可能会有小概率遇到这个提示.代码如下:PHP Notice: session_start(): ps_files_cleanup_dir:&nbsp;&nbsp; opendir(/var/lib/php5) failed: Permission denied (13)&nbsp;&nbsp; in /home/laruence/www/htdocs/index.php on line 22这是因为, 在PHP中, 如果使用file_handler作为Session的save handler, 那么就有概率在每次session_start的时候运行Session的Gc过程.代码如下://有省略&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nrdels = -1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nrand = (int) ((float) PS(gc_divisor) * php_combined_lcg(TSRMLS_C));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (nrand &lt; PS(gc_probability)) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PS(mod)-&gt;s_gc(&amp;PS(mod_data), PS(gc_maxlifetime), &amp;nrdels TSRMLS_CC);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//有省略这个警告的原因是因为在apt的PHP中, session的默认目录/var/lib/php5的权限是733 with sticky bit, 也就是代码如下:drwx-wx-wt&nbsp; root&nbsp; root而一般PHP的worker都运行在非root身份下, 所以是没有权限来打开这个文件夹的(但是因为可以write, 所以不影响正常的Session文件读取). 于是在s_gc中的如下代码, 就会触发开头所说的Notice:代码如下://对于file handler来说, s_gc间接调用ps_files_cleanup_dir:&nbsp;&nbsp; dir = opendir(dirname);&nbsp;&nbsp;&nbsp; if (!dir) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; php_error_docref(NULL TSRMLS_CC, E_NOTICE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "ps_files_cleanup_dir: opendir(%s) failed: %s (%d)",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dirname, strerror(errno), errno);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (0);&nbsp;&nbsp;&nbsp; }当然, 在ubuntu/Debian下, 还是有gc回收的, 只不过是外部的cron进程来完成的, 默认的在/etc/cron.d/php5:,代码如下:09,39 *&nbsp;&nbsp;&nbsp;&nbsp; * * *&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; [ -x /usr/lib/php5/maxlifetime ]&amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/&nbsp;-type f -cmin +$(/usr/lib/php5/maxlifetime) -print0| xargs -n 200 -r -0 rm另外, 可以看到, 在判别s_gc是否运行的时候, 有俩个关键变量: PS(gc_divisor)和PS(gc_probability), 这俩个变量分别对应着session的运行时配置项的俩个同名配置项: session.gc_probability和session.gc_divisor, 他们分别默认为1和100.而php_combined_lcg是一个随机数发生器, 生成0到1范围的随机数, 所以上面的判别相当于:代码如下:rand &lt; probability / gc_divisor也就是说, 默认情况下, 差不多是100次能调用一次gc过程. 所以也就是小概率的可以看到这个Notice.要关闭这个Notice, 只需要设置:session.gc_probability = 0, 让s_gc完全没有运行的可能即可.当然, 你也可以改变这个文件夹的权限…更多信息请查看IT技术专栏。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PHP报Warning: session_start() [function.session-start]: 错误解决方案
发布日期:2013-04-03 浏览次数:1976
今天在配置php网站的时候,经常会在页首出现Warning: session_start() [function.session-start]: Cannot send session cache limiter,也不影响页面打开。

就到百度中查找了一下,实际解决了问题,先记录下来,以备后患,呵呵
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\orther object\phptest\session.php:1) in D:\orther
object\phptest\session.php on line 2
1. 如果用dreamwever的话并使用utf-8编码,请在某个页面上右键==>页面属性==>标题/编码,就会看到一个“包括Unicode 签名(BOM)(S)”的复选框,把它取消即可。

这是因为utf-8编码文件含有的bom原因,而php4,5都是不支持bom的。

2. 修改php.ini中的session.auto_start = 0 为 session.auto_start = 1
3. 还有一种方法直接给session_start()加上@session_start()就没事了。

4. 该信息说明在启用session的时候,已经有内容输出,可在最上面加 ob_start()。

ob是output buffering的简称,ob用对了,能加速网页的速度,但是盲目的加上ob函数,只会增加CPU额外的负担。

ob的基本作用。

1).防止在浏览器有输出之后再使用setcookie,或者header,session_start函数造成的错误。

2).捕捉对一些不可获取的函数的输出,比如phpinfo会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。

3).对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。

4).生成静态文件,其实就是捕捉整页的输出,然后存成文件,经常在生成HTML,或者整页缓存中使用。

最好用的办法
5. 在PHP文件头部直接加下屏蔽警告错误的代码:
PHP代码
<?php
//如有session_star(),放在session_star()后面
error_reporting(E_ERROR);
ini_set("display_errors","Off");
//你的php代码
?>。

相关文档
最新文档