php中fgetcsv windows和linux兼容问题
设置区域:简体中文,UTF-8编码
代码如下 | 复制代码 |
setlocale(LC_ALL, 'zh_CN.UTF-8'); |
我们先来讲述一下利用session来登录
登录页面05.php的代码如下:
代码如下 | 复制代码 |
<?php session_start() ; //初始化session if (isset ($_SESSION['shili'])){ header ("Location:shili.php") ; //重新定向到其他页面 exit ; } ?> <script language="javascript"> function checklogin (){ if ((login.username.value!="") && (login.password.value!="")) return true //判断用户名和密码不为空,返回TRUE else{ alert ("昵称或密码不能为空!") } } </script> <style type="text/css"> .style1 { font-size: 13px; font-family: "黑体"; font-weight: normal; color: #0099FF; } </style> <div align="center"> <table width="260" border="1" bgcolor="#D8EFFA"> <form name="login" method="post" action="06.php" onSubmit="return checklogin()"> <tr align="center"> <td height="30" colspan="2"><span class="style1">管理系统登录</span></td> </tr> <tr> <td width="90" align="center" class="style1">管理员: </td> <td width="170" height="20" align="left" valign="middle"><input name="username" type="text" id="username" size="20"></td> </tr> <tr> <td align="center" class="style1">密码: </td> <td height="20" align="left" valign="middle"><input name="password" type="password" id="password" size="20"></td> </tr> <tr> <td align="center" class="style1">  ; </td> <td height="20" align="center"><input type="submit" name="Submit" value="登 录"></td> </tr> </form> </table> </div> |
该程序是一个管理员登录界面,首先初始化session,然后通过检测session变量是否已经注册来检测用户是否已经登录过,如果登录过,则无需再次登录,直接定向到其他页面。这里还使用了javascript来判断是否输入了用户名和密码。
验证登录的页面
06.php的代码如下:
代码如下 | 复制代码 |
<?php session_start () ; //初始session if (isset ($_SESSION['shili'])){ header ("Location:shili.php") ; //重新定向到其他页面 exit ; } //登录过的话立即结束 $shili_name=$_POST['username'] ; //获取参数 $password=$_POST['password'] ; //验证管理员名称和密码是否正确,这里采用直接验证,没有连接数据库 if ($shili_name=="mr" and $password=="mrsoft"){ session_register ("shili") ; //注册新的变量,保存当前会话的昵称 $shili = $shili_name ; echo "<font color=red>登录成功!</font>" ; header ("Location:shili.php") ; //登录成功重定向到管理页面 }else{ echo "<table width='100%' align=center><tr><td align=center>" ; echo "账号或密码错误,或者不是管理员账号<br>" ; echo "<font color=red>登录失败!</font><br><a href='http://wyl072.blog.163.com/blog/05.php'>请重新输入</a>"; echo "</td></tr></table>" ; } ?> |
该程序同样是先通过session变量检测用户是否已经登录,如果没有,则要对输入的用户名和密码进行验证,正确则注册session变量,输出登录成功!。如不正确,则提示登录失败。
这是一个简单的用户登录验证的程序,通过session变量阻止了那些没有登录而直接浏览的用户。如果想要对某个页面限制浏览的用户,可以使用同样的方式,只要把如下的代码放在该页面的开头即可:
代码如下 | 复制代码 |
<?php session_start () ; |
利用session_id实现共享登录
先,多服务器共享session问题,这个大家应该都能够理解的,当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器。用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就要通过一个session的唯一标识来共享这个session了——具体session的共享超出了本文的范围,请自行查阅资料。
第二个用途就是,验证同一用户的不同会话,这个比较难理解。这样说吧,一个用户并非通过浏览器来请求连接,而是通过socket或者其它方式来请求数据的时候,我们首先要对他进行用户登录验证,验证成功之后,就下发一个sessionid给他,然后他每次请求的时候就携带这个sessionid,我们通过这个sessionid来判断session是否已经存在,如果存在我们就认定用户已经登录……
对于第一个问题,我们可以把sessionid保存在数据库中得以实现,这个方法比较安全而且应用广泛,但是不是我们讨论的范围哦
首先验证的时候产生一个sessionid;
代码如下 | 复制代码 |
<?php |
客户端携带sessionid这个变量来请求数据
代码如下 | 复制代码 |
<?php |
好了不问题己得到了很好的解决有需要了解的朋友可以参考一下。
这句是在php开发中会碰的一些问题,看这提示我们都知道是变量未定义,那么下面来解决Notice:undefined index方法,一,这个因为是变量未定义我们只要找到相关的位置加上
代码如下 | 复制代码 |
function _get($str){ 或 isset($_GET['你的变量'])?$_GET['你的变量']:''; |
上面我们只举了get的用法还有post也一样,只要把上面的get改成post.
还有一种程序的全局定义方法
代码如下 | 复制代码 |
if (!$cfg['debug']) { |
这样我们只要对变量debug进行设置0或1对错误提示进行开关了
其它网页提供的方法
方法1:服务器配置修改
修改php.ini配置文件,error_reporting = E_ALL & ~E_NOTICE
方法2:在出现notice代码之前加上@,@表示这行有错误或是警告不要输出,@$username=$_post['username'];
注:如果你是利用了全局定义或在修改php.ini配置文件这样所有错误提示都不会出,这样对于开发测试来讲是相当的麻烦的,建义利用程序的方法,关闭错误提示最在在服务器上设置。
今天学习php的时候遇到了这个错误:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:xampphtdocsmyblogindex.php on line 15
源代码是:
代码如下 | 复制代码 |
<?php $sql="select entries.*,categories.cat from entries,categorie where entries.cat_id=categories.id order by dateposted desc limit 1;"; |
百度了一下,找到了解决办法!他出错的原因是因为数据库中没有数据导致musql_fetch_assoc()函数返回值为false,所以下面的$row['']使用就出错了!
所以在使用mysql_fetch_assoc() 函数的时候先对$result做判断!
代码如下:
代码如下 | 复制代码 |
<?php $sql="select entries.*,categories.cat from entries,categorie where entries.cat_id=categories.id order by dateposted desc limit 1;"; ?> |
这样就不会报错了!
----------------------------------------------------------------------------------------------------------------------------------
注释:mysql_fetch_assoc() 函数
定义和用法
mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组。
返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false。
语法
mysql_fetch_assoc(data)参数 描述
data 必需。要使用的数据指针。该数据指针是从 mysql_query() 返回的结果。
提示和注释
注释:mysql_fetch_assoc() 和用 mysql_fetch_array() 加上第二个可选参数 MYSQL_ASSOC 完全相同。它仅仅返回关联数组。这也是 mysql_fetch_array() 初始的工作方式。
提示:如果在关联索引之外还需要数字索引,用 mysql_fetch_array()。
注释:本函数返回的字段名是区分大小写的。
在php中我们用到最常用的错误机制有try catch{}这个来处理可以很方便面的捕捉到错误,但在php中对于很多还提供了错误查看和错误关闭这个可以在php.ini中处理也可以在文件最开始加个error_display(0);来不显示错误代码如下 | 复制代码 |
<?php |
那么正确的写法应该如下:
代码如下 | 复制代码 |
<?php |
一、PHP错误处理的三种方式A、简单的die()语句;
等价于exit();
例:
代码如下 | 复制代码 |
if(!file_exists('aa.txt')){ |
简洁写法:
代码如下 | 复制代码 |
file_exits('aaa.txt') or die('文件不存在'); |
B、自定义错误和错误触发器
1、错误处理器(自定义错误,一般用于语法错误处理)
创建自定义错误函数(处理器),该函数必须有能力处理至少两个参数(error_level和errormessage),但是可以接受最多五个参数(error_file、error_line、error_context)
语法:
function error_function($error_level,$error_message,$error_file,$error_line,$error_context)
//创建好后还需要改写set_error_handler();函数
set_error_handler('error_function',E_WARNING);//这里error_function对应上面创建的自定义处理器名,第二个参数为使用自定义错误处理器的错误级别;
错误报告级别(了解即可)
这些错误报告级别是错误处理程序旨在处理的错误的不同的类型:
值 常量 描述
2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
8 E_NOTICE Run-time 通知。
脚本发现可能有错误发生,但也可能在脚本正常运行时发生。
256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
4096 E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
8191 E_ALL 所有错误和警告,除级别 E_STRICT 以外。
(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)
2、错误触发器(一般用于处理逻辑上的错误)
需求:比如要接收一个年龄,如果数字大于120,就认为是一个错误
传统方法:
if($age>120){
echo '年龄错误';exit();
}
使用触发器:
if($age>120){
//trigger_error('错误信息'[,'错误等级']);这里错误等级为可选项,用于定义该错误的级别
//用户定义的级别包含以下三种:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE
trigger_error('年龄错误');//这里是调用的系统默认的错误处理方式,我们也可以用自定义处理器
}
//自定义处理器,与上面相同
function myerror($error_level,$error_message){
echo 'error text';
}
//同时需要改变系统默认的处理函数
set_error_handler('myerror',E_USER_WARNING);//同上面,第一个参数为自定义函数的名称,第二个为错误级别【这里的错误级别通常为以下三种:E_USER_WARNING 、E_USER_ERROR 、E_USER_NOTICE】
//现在再使用trigger_error就可以使用自定义的错误处理函数了
练习题:
代码如下 | 复制代码 |
<?php |
相关文章
- VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
- 这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
- 这篇文章主要为大家详细介绍了C#创建一个简单windows窗体应用的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了Powershell 查询 Windows 日志的方法,需要的朋友可以参考下...2020-06-30
- 这篇文章主要介绍了jquery自定义插件开发之window的实现过程的相关资料,需要的朋友可以参考下...2016-05-09
- 这篇文章主要介绍了C#实现windows form限制文本框输入的方法,涉及C#限制文本框输入的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 本文实例讲述了JS实现不使用图片仿Windows右键菜单效果代码。分享给大家供大家参考,具体如下:这里演示JS不使用图片仿Windows右键菜单效果,这款代码灵活使用了文鼎字,配合CSS和JS做出了这个和系统右键菜单很相似的东东。...2015-10-23
- 本篇文章主要介绍了详解Windows下安装Nodejs步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...2017-05-22
C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法
这篇文章主要介绍了C# Windows API应用之基于GetDesktopWindow获得桌面所有窗口句柄的方法,结合实例形式分析了GetDesktopWindow函数用于获取窗口句柄的具体使用方法与相关注意事项,需要的朋友可以参考下...2020-06-25- 作为一个新生事物,Linux吸引了不少眼球,但是它能否快捷、方便地与Windows资源共享,是一个很重要的问题。大家知道,Windows之间可以利用“网络邻居”来实现资源共享,而Linux...2016-11-25
- 这篇文章主要介绍了利用C#修改Windows操作系统时间,帮助大家更好的利用c#操作系统,感兴趣的朋友可以了解下...2020-12-08
C#3.0使用EventLog类写Windows事件日志的方法
这篇文章主要介绍了C#3.0使用EventLog类写Windows事件日志的方法,以简单实例形式分析了C#写windows事件日志的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25浅谈vue 组件中的setInterval方法和window的不同
这篇文章主要介绍了浅谈vue 组件中的setInterval方法和window的不同,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-30- 下面小编就为大家带来一篇jquery自定义插件——window的实现【示例代码】。小编觉得挺不错的,现在分享给大家,也给大家做个参考...2016-05-09
JS实现pasteHTML兼容ie,firefox,chrome的方法
这篇文章主要介绍了JS实现pasteHTML兼容ie,firefox,chrome的方法,涉及javascript针对页面元素的动态操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2016-06-24Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1的解决方法
这篇文章主要为大家详细介绍了Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-07-06- 这篇文章主要介绍了C#实现控制Windows系统关机、重启和注销的方法,涉及C#调用windows系统命令实现控制开机、关机等操作的技巧,非常简单实用,需要的朋友可以参考下...2020-06-25
Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程详解
Windows Server 2016 上配置 APACHE+SSL+PHP+perl怎么配置?小编推荐了一篇介绍Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程,有需要的同学快来看看吧! ...2017-07-06- web打印 window.print()介绍,需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了Windows窗口消息,以实例形式详细罗列了Windows窗口消息,非常具有实用价值,需要的朋友可以参考下...2020-04-25