php cookie注销 设置 输出和注销学习笔记

 更新时间:2016年11月25日 15:03  点击:2114
这是一个朋友在学php时的一个学习笔记,其功能就是设置cookie然后注销及输出cookie值的具体操作方法。

setcookie() 函数用于设置 cookie。

注释:setcookie() 函数必须位于 <html> 标签之前。

语法

setcookie(name, value, expire, path, domain);

下面看实例

 代码如下 复制代码


<?php
//注销cookie
if(isset($_GET['out'])){
setcookie('us',"");
echo "<script>location.href='index.php'</script>";
}

//设置cookie
if(isset($_POST['sub'])){
setcookie("us",$_POST['user'],time()+3600);
echo "<script>location.href='index.php'</script>";
}

//输出和注销cookie
if($_COOKIE['us']){
echo $_COOKIE['us'];
echo "<a href='index.php?out=out'>注销cookies</a>";
}

?>
<form method="post">
<input type="text" name="user">
<input type="password" name="pass">
<input type="submit" name="sub" value="提交">
</form>

inlcude带参数这个问题以前我没成功,今天看到一文章果断搞了了,如我可以这样include(\'a.php?site=www.111cn.net\')然后在调用a.php页面可直接$_GET[\'a\'];获取了。

具体方法详解


举例:假设在 index.php 中需要调用 inc.php?para=3 ,

inc.php

 代码如下 复制代码

<?php     echo $_GET['para']; ?>

下面的写法是无法得到正确结果的:

index.php

 代码如下 复制代码
<?php     include dirname(__FILE__).'/inc.php?para=3'; ?>

稍微变通一下,把$_GET变量在include之前定义,则可以正常运行:
index.php

 代码如下 复制代码
<?php     $_GET['para'] = 3     include dirname(__FILE__).'/inc.php; ?>

如果php.ini中开启了allow_url_include功能,则可以使用include url的方式:
index.php

 代码如下 复制代码

<?php     include 'http://www.yoururl.com/inc.php?para=3'; ?>

设置方法:php.ini中,找到如下行,改为On:

; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
allow_url_include = On

不过为了保证安全性,大部分的服务器都将allow_url_include 功能关闭,那样就只能视情况而定了。

文件上传分为两个部分,HTML显示部分和PHP处理部分,HTML部分主要是用来让用户来选择所要上传的文件,然后通过PHP中的$_FILES在后台接收,然后把文件上传到指定目录中。

HTML部分:

 

 代码如下 复制代码

<form action="upload.php" method="post" enctype="multipart/form-data">

上传:<input type="file" name="myfile" />

<input type="submit" name="submit" value="上传" />

</form>


说明:

form标答的action="upload.php"是指点击这个form中的submit的时候,这个上传命令会被发送到这个叫 upload.php的页面去处理。method="post"是指以post方式去送,enctype="multipart/form-data"属性规定了在提交这个表单时要使用哪种内容类型,在表单需要二进制数据时,比如文件内容,请使用"multipart/form-data",如果要上传文件,这个属性是必要的。input中的type="file"时,规定了应该把输入作为文件来处理,并且在input后面会有一个浏览的按钮。

PHP部分:

 代码如下 复制代码


<?php

if($_FILES['myfile']['name'] != '') {

if($_FILES['myfile']['error'] > 0) {

echo "错误状态:" . $_FILES['myfile']['error'];

} else {

move_uploaded_file($_FILES['myfile']['tmp_name'] , "uploads/" .

$FILES['myfile']['name']);

echo "<script>alert(上传成功!);</script>";

}

} else{

echo "<script>alert(请上传文件!);</script>";

}

?>


说明:

在解释这篇代码前,我们有必要了解以下知识。

$_FILES['myfile']['name'] 是指被上传文件的名称

$_FILES['myfile']['type'] 是指被上传文件的类型

$_FILES['myfile']['size'] 是指被上传文件的大小,单位为字节(B)

$_FILES['myfile']['tmp_name'] 是指被上传文件存在服务器中的临时副本文件名称,文件被移动到指定目录后临文件将被自动消毁。

$_FILES['myfile']["error"] 是指由文件上传中有可能出现的错误的状态码,关于各状态含义后在会说明。

首先,$_FILES['myfile']['name']中的myfile是指在上面HTML页面中上传文件标签的name值,根据这个我们才能知道我们正在处理的文件是哪一个input提交过来的,然后再来判断一下 $_FILES['myfile']['name'] 不是否为空,根据这个我们可以知道用户有没有上传文件,从而执行不同的操作。如果上传了文件并且状态是0就说明上传成功,我们就可以用 move_uploaded_file方法把上传的文件存放到指定目录,上面这个例子是指把上传的文件移动到同目录下的uploads文件夹下,这个路径是相对于这个PHP文件(既upload.php)的相对目录。比如,我们想把上传的文件移动到upload.php上一层叫user的文件夹中的话,我们就可以这样写:move_uploaded_file($_FILES['myfile']['tmp_name'] , "../user/" . $FILES['myfile']['name']),这种方法使用起来很方便、灵活,这样一个文件就被上传到服务器中了,可以打开服务器中的目录查看该文件。 允许用户上传文件是一个有巨大的安全风险的行为,因此,通常情况下,我们会对用户上传的文件做一些限制,如下:

 

 代码如下 复制代码

<?php

if($_FILES['myfile']['name'] != '') {

if($_FILES['myfile']['error'] > 0) {

echo "错误状态:" . $_FILES['myfile']['error'];

} else {

if($_FILES['myfile']['type'] == 'image/jpeg' or $_FILES['myfile']['type'] ==

'image/pjpeg' or $_FILES['myfile']['type'] == 'image/gif' &&

$_FILES['myfile']['size'] < 20480){

move_uploaded_file($_FILES['myfile']['tmp_name'] , "uploads/" .

$FILES['myfile']['name']);

echo "<script>alert(上传成功!);</script>";

} else {

echo "<script>alert(请上传小于2MB的jpeg或Gif类型的附件);<script>";

}

}

} else {

echo "<script>alert(请上传文件!);</script>";

}

?>

从上面的代码可以看出,我们规定了上传的文件类型必须是jpeg或者Gif并且必须小于2MB的文件($_FILES['myfile']['size']的默认单位是字节)。这里必须提到的是,对于IE浏览器,它识别jpg文件的类型必须是 pjpeg,而对于 FireFox,则必须是 jpeg,因此,我们必须对jpeg和pjpeg都作判断。这样一来,我们可以限制用户上传的一些危险的比如木马或者病毒脚本,来保证了服务器的安全运行。现在,一个上传文件程序就基本成形了。但时在有些时候,考虑到用户体验,我们还可以对用户上传过程中发生的错误作出一些提醒,让用户明白是哪里出了问题,我们会对$_FILES['myfile']['error']作出一些说明,先来看一下在PHP中对$_FILES['myfile']['error']常见6种状态的定义。

 代码如下 复制代码

$_FILES['teacher_pic']['error'] = 1 文件大小超过了PHP.ini中的文件限制

$_FILES['teacher_pic']['error'] = 2 文件大小超过了浏览器限制

$_FILES['teacher_pic']['error'] = 3 文件部分被上传

$_FILES['teacher_pic']['error'] = 4 没有找到要上传的文件

$_FILES['teacher_pic']['error'] = 5 服务器临时文件夹丢失

$_FILES['teacher_pic']['error'] = 6 文件写入到临时文件夹出错

错误信息状态为1时说明上传的文件超过了php.ini中的文件大小限制,此限制可以再php.ini中设置(Maximum allowed size for uploaded files.upload_max_filesize = 2M),这里是在第516行,这一句说定义了PHP中上传文件的最大字节数,默认情况下是2MB,这个设置是PHP全局上传限制,权限最高,即使$_FILES['myfile']['size']设为10MB,也只能上传2MB以下的文件。比如,在默认情况下,如果规定$_FILES['myfile']['size'] < 10MB,在用户上传文件大于2MB的情况下,就会现在$_FILES['teacher_pic']['error'] = 1的情况,一般来说,我们须要把$_FILES['myfile']['size']的值设定在upload_max_filesize值之下(设大了也没用,呵呵)。当然,你完全可以把php.ini中的upload_max_filesize值调的更大,但实际应用中,我们考虑到服务器的负载能力,不建议upload_max_filesize的值超过20MB,这样会造成网站附件增大,这在论坛社区上可以很明显的看出来。了解了这些,我们就可以对错误状态作出定义,我们再来完善一下代码:

 代码如下 复制代码

<?php

if($_FILES['myfile']['name'] != ''){

if($_FILES['myfile']['error'] > 0){

switch($_FILES['myfile']['error']){

case 1:

echo "文件大小超过了PHP.ini中的文件限制!";

break;

case 2:

echo "文件大小超过了浏览器限制!";

break;

case 3:

echo "文件部分被上传!";

break;

case 4:

echo "没有找到要上传的文件!";

break;

case 5:

echo "服务器临时文件夹丢失,请重新上传!";

break;

case 6:

echo "文件写入到临时文件夹出错!";

break;

}

} else {

if($_FILES['myfile']['type'] == 'image/jpeg' or $_FILES['myfile']['type'] == 

'image/pjpeg' or $_FILES['myfile']['type'] == 'image/gif' && 

$_FILES['myfile']['size'] < 20480) {

move_uploaded_file($_FILES['myfile']['tmp_name'] , "uploads/" . 

$FILES['myfile']['name']);

echo "<script>alert(上传成功!);</script>";

} else {

echo "<script>alert(请上传小于2MB的jpeg或Gif类型的附件);<script>";

}

}

} else {

echo "<script>alert(请上传文件!);</script>";

}

?>


我们可以使用switch语句来对6种错状态作出定义,这样来下,在发生错误的时间,用户就会明白,是哪里出了问题。但是还有一种情况就是,用户上传的文件在指定的目录中已经存在,这里我们可以使用file_exists方法来判断一下:

 代码如下 复制代码


<?php

if($_FILES['myfile']['name'] != ''){

if($_FILES['myfile']['error'] > 0){

switch($_FILES['myfile']['error']){

case 1:

echo "文件大小超过了PHP.ini中的文件限制!";

break;

case 2:

echo "文件大小超过了浏览器限制!";

break;

case 3:

echo "文件部分被上传!";

break;

case 4:

echo "没有找到要上传的文件!";

break;

case 5:

echo "服务器临时文件夹丢失,请重新上传!";

break;

case 6:

echo "文件写入到临时文件夹出错!";

break;

}

} else {

if($_FILES['myfile']['type'] == 'image/jpeg' or $_FILES['myfile']['type'] == 

'image/pjpeg' or $_FILES['myfile']['type'] == 'image/gif' && 

$_FILES['myfile']['size'] < 20480) {

if (!file_exists("uploads/" . $_FILES["myfile"]["name"])) {

move_uploaded_file($_FILES['myfile']['tmp_name'] , "uploads/" . 

$FILES['myfile']['name']);

echo "<script>alert(上传成功!);</script>";

} else{

echo "<script>alert(您上传的文件已经存在!);</script>";

}

} else {

echo "<script>alert(请上传小于2MB的jpeg或Gif类型的附件);<script>";

}

}

} else {

echo "<script>alert(请上传文件!);</script>";

}

?>

只是上传文件最原始的方法,这样更容易自己理解,使用时大家可以考虑把它写成类,现在我们再来总结一下上传中的逻辑判断顺吧。

1. 先判断是否上传文件

2. 如果有再来判断上传中是否出错

3. 如果出错,则提示出错信息

4. 如查没出错,再判断文件类型

5. 如果类型符合条件,再判断指定目录中有没有存在该文件

6. 如果没有就把该文件移至指定目录

eval()函数是php中一个大家都希望禁止的函数,eval()函数非常的危险哦,下面我来给大家介绍php中eval()函数的一些问题与解决办法。

一直以来感觉eval()函数似乎不能做赋值运算?网上有些文章也这样说过!

比如eval("$a=;");这个式子就会提示错误!

是不是eval()函数执行的代码不能做赋值运算了呢,其实不是。这是因为双引号里的变量名被转义了,试问,常量怎么能被赋值呢?

不过PHP中,单引号里的变量名就不会被转义了,上面的代码改成eval('$a=;');这样就没错误了哦!

eval()一个有意思的PHP函数

通过代码测试,不做更多解释:

 代码如下 复制代码

Parse error: syntax error, unexpected 'echo' (T_ECHO) in E:webwwwswoole_testeval.php(4) : eval()'d code on line 1 

 word! 

 */
              

 ?>

二、当 字符串 里有不合法的php代码时,报错。相信大家也都知道!

 

 代码如下 复制代码


 <?php 

            

 $str = '你好,世界! echo "Hello,";'; 

 $content = eval('?>'.$str);  // 注意,此时eval里 加了  "?>" 字符串 

 echo 'word!'; 

 // 执行结果:  

 /* 

  你好,世界! echo "Hello,";word! 

 */
            

 ?>

三、此时,字符串里面有不合法的 php 代码,但是,不报错了。

-因为前面加了"?>"(php结束符),它已经将后面的“字符串”全部当作“字符串”了,是吧!

下面在(三)的基础上,在字符串里嵌入<?php ... ?>模块,相当于html文件里嵌入 php代码一样。它会怎样呢?

 代码如下 复制代码

 <?php 

       

 $str = '你好,世界! <?php echo "Hello,"; ?>'; 

 $content = eval('?>'.$str); 

 echo 'word!'; 

 // 执行结果:  

 /* 

  你好,世界! Hello,word! 

 */

 ?>

OK!它会识别 “字符串” 里的 php模块并执行!

 

上面的例子其实说明了 eval('?>'.$str) 和 eval($str)的作用。

其实,eval($str)的 $str 里面,

如果字符串包含有<?php ... ?>时,

那么$str字符串就必须在<?php ... ?>前加上 “?>”个php的结束符。


 在Ecshop的模版引擎里面,就用了eval('?>'.$str)这种方法,来解析模版中嵌入的php模块---当然在此之前,先将标签解析翻译成了php代码。

星座判断很简单我们要统计出每个星期所有日期时间段了,然后获取日期进行查询即可了,下面我给大家举两个实例,有需要的同学可参考。

星座:我是根据这个时间表写的,该时间表未必准确。

'水瓶座'=>'(1/22-2/21)',   '双鱼座'=>'(2/22-3/21)',

'白羊座'=>'(3/22-4/21)',   '金牛座'=>'(4/22-5/21)',

'双子座'=>'(5/22-6/21)',   '巨蟹座'=>'(6/22-7/21)',

'狮子座'=>'(7/22-8/21)',   '处女座'=>'(8/22-9/21)',

'天秤座'=>'(9/22-10/21)',  '天蝎座'=>'(10/22-11/21)',

'射手座'=>'(11/22-12/21)',  '摩羯座'=>'(12/22-1/21)'


根据日期判断星座函数

 代码如下 复制代码

function yige_constellation($month, $day) {
 // 检查参数有效性
 if ($month < 1 || $month > 12 || $day < 1 || $day > 31) return false;
 
 // 星座名称以及开始日期
 $constellations = array(
  array( "20" => "宝瓶座"),
  array( "19" => "双鱼座"),
  array( "21" => "白羊座"),
  array( "20" => "金牛座"),
  array( "21" => "双子座"),
  array( "22" => "巨蟹座"),
  array( "23" => "狮子座"),
  array( "23" => "处女座"),
  array( "23" => "天秤座"),
  array( "24" => "天蝎座"),
  array( "22" => "射手座"),
  array( "22" => "摩羯座")
 );
 
 list($constellation_start, $constellation_name) = each($constellations[(int)$month-1]);
 
 if ($day < $constellation_start) list($constellation_start, $constellation_name) = each($constellations[($month -2 < 0) ? $month = 11: $month -= 2]);
 
 return $constellation_name;
}

下面这个更全面可直接根据生日检查年龄,生肖,星座

 代码如下 复制代码

<?php

/**

* 根据生日中的月份和日期来计算所属星座

*

* @param int $birth_month

* @param int $birth_date

* @return string

*/

function get_constellation($birth_month,$birth_date)

{

//判断的时候,为避免出现1和true的疑惑,或是判断语句始终为真的问题,这里统一处理成字符串形式

$birth_month = strval($birth_month);

 

$constellation_name = array(

      '水瓶座','双鱼座','白羊座','金牛座','双子座','巨蟹座',

      '狮子座','处女座','天秤座','天蝎座)','射手座','摩羯座'

      );

 

if ($birth_date <= 22)

{

  if ('1' !== $birth_month)

  {

   $constellation = $constellation_name[$birth_month-2];

  }

  else

  {

   $constellation = $constellation_name[11];

  }

}

else

{

  $constellation = $constellation_name[$birth_month-1];

}

 

return $constellation;

}


/**

* 根据生日中的年份来计算所属生肖

*

* @param int $birth_year

* @return string

*/

function get_animal($birth_year)

{

//1900年是子鼠年

$animal = array(

    '子鼠','丑牛','寅虎','卯兔','辰龙','巳蛇',

    '午马','未羊','申猴','酉鸡','戌狗','亥猪'

    );

 

$my_animal = ($birth_year-1900)%12;

return $animal[$my_animal];

}


/**

* 根据生日来计算年龄

*

* 用Unix时间戳计算是最准确的,但不太好处理1970年之前出生的情况

* 而且还要考虑闰年的问题,所以就暂时放弃这种方式的开发,保留思想

*

* @param int $birth_year

* @param int $birth_month

* @param int $birth_date

* @return int

*/

function get_age($birth_year,$birth_month,$birth_date)

{

$now_age = 1; //实际年龄,以出生时为1岁计

$full_age = 0; //周岁,该变量放着,根据具体情况可以随时修改

 

$now_year   = date('Y',time());

$now_date_num  = date('z',time()); //该年份中的第几天

$birth_date_num = date('z',mktime(0,0,0,$birth_month,$birth_date,$birth_year));

 

$difference = $now_date_num - $birth_date_num;

if ($difference > 0)

{

  $full_age = $now_year - $birth_year;

}

else

{

  $full_age = $now_year - $birth_year - 1;

}

 

$now_age = $full_age + 1;

 

return $now_age;

}


?>

[!--infotagslink--]

相关文章

  • phpems SQL注入(cookies)分析研究

    PHPEMS(PHP Exam Management System)在线模拟考试系统基于PHP+Mysql开发,主要用于搭建模拟考试平台,支持多种题型和展现方式,是国内首款支持题冒题和自动评分与教师评分相...2016-11-25
  • JS使用cookie实现DIV提示框只显示一次的方法

    本文实例讲述了JS使用cookie实现DIV提示框只显示一次的方法。分享给大家供大家参考,具体如下:这里运用JavaScript的cookie技术,控制网页上的提示DIV只显示一次,也就是当用户是第一次打开网页的时候才显示,第二次自动隐藏起...2015-11-08
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • vue项目中js-cookie的使用存储token操作

    这篇文章主要介绍了vue项目中js-cookie的使用存储token操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-14
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • Smarty模板学习笔记之Smarty简介

    1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
  • 什么是cookie?js手动创建和存储cookie

    什么是cookie? cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。 有关cookie的例子: 名字 cookie 当访...2014-05-31
  • php Observer观察者模式之学习笔记

    当我们在星际中开地图和几家电脑作战的时候,电脑的几个玩家相当于结盟,一旦我们出兵进攻某一家电脑,其余的电脑会出兵救援。 那么如何让各家电脑知道自己的盟友被攻击了...2016-11-25
  • python爬虫用request库处理cookie的实例讲解

    在本篇内容里小编给大家整理的是一篇关于python爬虫用request库处理cookie的实例讲解内容,有需要的朋友们可以学习参考下。...2021-02-21
  • Windows Server 2008 R2远程设置选项灰色解决方法

    最近公司环境有几天Windows Server 2008R2的服务器因为没有激活导致过期后都不能远程,连接显示器后发现远程设置的地方为灰色了...2016-01-27
  • vivo x9怎么设置默认输入法?vivo x9设置默认输入法教程

    本篇文章介绍了vivo x9如何设置默认输入法的方法,手机小白们快来了解一下吧。 问:vivo x9怎么设置默认输入法?答:其实设置默认输入法很容易,首先点击应用程序,然后点设...2017-01-22
  • 基于C#后台调用跨域MVC服务及带Cookie验证的实现

    本篇文章介绍了,基于C#后台调用跨域MVC服务及带Cookie验证的实现。需要的朋友参考下...2020-06-25
  • PHP 日期函数 学习笔记介绍

    举一个简单的date例子 我将使用echo命令把内容输出到我们的客户端(浏览器)。我将使用下面的代码做为基础代码。 代码如下 复制代码 <!DOCTY...2016-11-25
  • Windows 2016 服务器安全设置

    最近公司的网站升级Windows 2016服务器,选择安装了最新版的Windows 2016,以前使用Windows服务器还是Windows 2003系统,发现变化还是挺多的,依次记录下来以备后面查阅...2020-10-05
  • PHP脚本实现Magento权限设置与缓存清理

    PHP脚本实现Magento权限设置与缓存清理的实例代码有需要的朋友可参考一下。 代码如下 复制代码 <?php ## 设置文件644,目录755 function Al...2016-11-25
  • chrome监听cookie变化与赋值问题

    这篇文章主要介绍了chrome监听cookie变化与赋值问题,cookie监听与赋值操作需要manifest文件里声明权限问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-10-22
  • win2008之IIS7中FTP设置技巧

    如果要允许用户在站点中上载或下载文件,就需要在 Web 服务器上设置 FTP。无论站点是位于 Intranet 还是位于 Internet 上,使用 FTP 在所提供的位置中上载和下载文件的原理是相同的。...2016-01-27
  • 深入分析为Visual Assist设置快捷键的方法

    本篇文章是对为Visual Assist设置快捷键的方法进行了详细的分析介绍,需要的朋友参考下...2020-04-25