php5.4.0的register globals设置

 更新时间:2016年11月25日 15:02  点击:1742
在php中register globals函数在php5.3.0开始移除在5.4.0开始废弃了,但还是有很多的网站都有这个函数,下面我来介绍一些解决办法。

php4.2.0的版本是没有用过,php官网提到:php最具争议的变化是php4.2.0版本配置中register_globals的On改为了Off,对此项依赖的是如此普遍以至于很多人不知道他的存在而以为php本来就是这么工作的,下面解释这个指令如何写出不安全的代码,但是要知道这个指令没有什么不安全的地方,只有不安全的代码。

当register_globals打开以后,很多代码都可以被注入比如html表单提交的内容,再加上php在使用变量的时候无需初始化,这就使得更容易出现不安全的代码。比如我将php.ini中register_globals设置为On开始状态:

 代码如下 复制代码


<?php
// 当用户合法的时候,赋值 $flag = true
if (is_user()) {
    $flag= true;
}

// 由于并没有事先把 $flag初始化为 false,
// 当 register_globals 打开时,可能通过GET user.php?flag=1 来定义该变量值
// 所以任何人都可以绕过身份验证
if ($flag) {
    include "/highly/sensitive/data.php";
}
?>  


 以上代码在register_globals = On的时候,由于$flag没有初始化,在后面判断的时候通过get方式的flag = 1也可以执行include。

本文章来给大家介绍php入门教程之工厂模式哦,工厂模式概念:实例化对象,用工厂方法替代new操作,有需要了解学习的朋友可参考。


工厂模式代码:

 

 代码如下 复制代码

<?php
//首先定义什么是人类
 interface Human {
    //人是愉快的,会笑的
    public function laugh();
    //人类还会哭,代表痛苦
    public function cry();
    //人类会说话
    public function talk();
}

//然后定义具体的人种
class YellowHuman implements Human {//黄色人种,这个翻译的不准确,将就点吧
    function cry() { var_dump( "黄色人种会哭");}
    function laugh() {var_dump( "黄色人种会大笑,幸福呀!");}
    function talk() {var_dump( "黄色人种会说话,一般说的都是双字节"); }
}
class WhiteHuman implements Human { //白色人种
    public function cry() {var_dump("白色人种会哭");}
    public function laugh() {var_dump("白色人种会大笑,侵略的笑声"); }
    public function talk() {var_dump("白色人种会说话,一般都是但是单字节!"); }
}
class BlackHuman implements Human { //黑色人种
    public function cry() {var_dump("黑色人种会哭");}
    public function laugh() {var_dump("黑色人种会大笑,侵略的笑声"); }
    public function talk() {var_dump("黑色人种会说话,一般都是但是单字节!"); }
}

//人种也定义完毕了,那我们把八卦炉定义出来:
class HumanFactory {
    //定一个烤箱,泥巴塞进去,人就出来,这个太先进了
    public static function createHuman( $c ){
        if ($c instanceof Human ) {//判断是否继承自Human
            return $c;
        }else {
            var_dump("必须跟HuMan有一腿");
        }
    }
}


var_dump("------------造出的第一批人是这样的:白人-----------------");
$whiteHuman = HumanFactory::createHuman( new WhiteHuman());
$whiteHuman->cry();
$whiteHuman->laugh();
$whiteHuman->talk();
    
 //女娲第二次造人,火候加足点,然后又出了个次品,黑人
var_dump("nn------------造出的第二批人是这样的:黑人-----------------");
$blackHuman = HumanFactory::createHuman(new BlackHuman());
$blackHuman->cry();
$blackHuman->laugh();
$blackHuman->talk();
    
//第三批人了,这次火候掌握的正好,黄色人种(不写黄人,免得引起歧义),备注:RB人不属于此列
var_dump("nn------------造出的第三批人是这样的:黄色人种-----------------");
$yellowHuman = HumanFactory::createHuman(new YellowHuman());
$yellowHuman->cry();
$yellowHuman->laugh();
$yellowHuman->talk();

在php中连接数据库多指是mysql数据库了,下面我来给php入门者介绍连接数据库实现方法与出现Call to undefined function mysql_connect()的解决办法。

最简单php连接数据库代码如下

 代码如下 复制代码

<?

$hostname_conn = "localhost";
$database_conn = "数据库名称";
$username_conn = "root";
$password_conn = "数据库密码";
$conn = mysql_pconnect($hostname_conn, $username_conn, $password_conn) or trigger_error(mysql_error(),E_USER_ERROR);

?>

包含到页面里面的时候用require_once,不用include了。

 

 代码如下 复制代码
<?php require_once('Connections/conn.php'); ?>

如果连接时出现错误提示:Call to undefined function mysql_connect()  说明你的配置未成功

解决办法

1.将libmysql.dll和php5ts.dll拷贝至windows目录下的system32下! 
2.修改php.ini  extension_dir = "d:phpext"
2.修改windows安装目录下的php.ini 去掉;extension=php_mysql.dll前面的分号; 

本文章来给大家介绍一篇很简单的入门教程就是php位操作了,各位有需要了解的朋友可参考。

1.&(与) 将数值转化为二进制后 都为1则为1否则为0

$a = 10; //1010
$b = 12; //1100
echo $a & $b; //得到的是8 => 1000     2.| (或) 将数值转化为二进制后 只要有一个是1则为1 否则为0

$a = 10; //1010
$b = 12; //1100
echo $a | $b; //得到的是14 => 1110     3.^ (异或)将数值转化为二进制后 相同的为0 不同的为1

$a = 10; //1010
$b = 12; //1100
echo $a ^ $b; //得到的是6 => 0110     4.~ (取非) 将数值转化为二进制后 1转为0 0转为1

$a = 10; //1010
echo ~$a; //结果是-11 => 1111111111111111111111111111111111111111111111111111111111110101     5.<< (左移) 左移几个位置就乘以几个2

$a = 10;
echo $a << 3; //结果是80     6. >> (右移) 右移几个位置除以几个2

$a = 80;
echo $a >> 3; //结果是10

在有些场合中需要以文件的形式来对内容进行存储,通常这时候需要对文件进行一系列的操作,PHP中对于文件的操作跟其他计算机程序设计语言对文件的操作类似,对于文件的操作主要包括三个部分,以及围绕这三部分提供的辅助性函数来完成文件操作的工作。

(1)文件的创建与打开;
(2)文件的操作;
(3)文件的关闭;

在PHP中,通过一系列的函数来完成文件的操作,常用的函数及其简要说明罗列如下:

//文件打开,完成文件打开(在文件不存在时可创建文件),依赖于文件中模式的不同而具有不同的操作
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
//$filename 打开或者要创建文件的路径及文件名,为了便于移植,使用反斜杠/为佳
//$mode 是文件打开的模式,有很多模式,比较常用的r,w,a,同样为了便于移植,建议mode中增加b(二进制)
//通常读文件为 rb ,写文件为 ab,分别表示以二进制读文件及以二进制向文件追加内容
//在文件打开操作过程中出现错误请首先检查文件所在的路径的权限设置
 

 代码如下 复制代码
//文件操作函数
 
//写操作相关函数
//把$string的内容写到文件指针$handle
int fwrite ( resource $handle , string $string [, int $length ] ) 
//函数是fwrite的别名函数
fputs()
 
//也能完成写操作,不同的是集成了fopen(),fwrite(),fclose(),使用该函数不用再打开关闭文件
int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
 
//读操作相关函数
//逐行读取
string fgets ( resource $handle [, int $length ] )
//逐行读,能够过滤标记
string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] )
//逐行读,能够根据定界符输出到数组
array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = ',' [, string $enclosure = '"' [, string $escape = '\' ]]]] )
//一次性读取一个文件并将文件内容发送到标准输出,包含了文件打开与文件关闭操作
int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )
//先要打开文件,然后将文件指针所指向的文件内容发送到标准输出
int fpassthru ( resource $handle )
//把结果发送到一个数组中
array file ( string $filename [, int $flags = 0 [, resource $context ]] )
//一次读取一个字符
string fgetc ( resource $handle )
//读取任意长度字节的内容
string fread ( resource $handle , int $length )
 
//文件关闭
bool fclose ( resource $handle )
 
//文件操作中常用的函数
//检查文件或目录是否存在
bool file_exists ( string $filename )
//获取文件大小,返回文件大小的字节数
int filesize ( string $filename )
//删除文件
bool unlink ( string $filename [, resource $context ] )
//复位文件指针位置
bool rewind ( resource $handle )
//在文件指针中定位
int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] )


函数的具体详细的说明在php.net上可以查到,下面练习一下文件的操作,练习名称为『简易日记』,需求如下:

(1)每日记录的内容以年-月-日.txt保存在数据目录下;
(2)首页写日记,并显示以往的记录;
(3)显示单页记录内容;

 

具体代码如下

首页(index.php)

 代码如下 复制代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>简易日记--php文件操作练习</title>
    <style>
      h1 {
         font-size:24px;
         border-bottom:1px solid #000;
         line-height:40px;
      }
      .active {
         line-height:22px;
         font-size:14px;
         background:#2cf;
         padding:8px;
         text-decoration:none;
      }
      .btn {
         width:100px;
         height:40px;
      }
    </style>
  </head>
  <body>
    <h1>我的日记本</h1>
    <p><span class="active">写日记</span></p>
    <form name="writediary" method="POST" action="diaryprocessed.php">
      <p>日记主题</p>
      <input type="text" name="diarytopic" size="60" maxlength="100" />
      <p>日记内容</p>
      <textarea name="diarycontents" rows="10" cols="53"></textarea>
      <p><input  class="btn" type="submit" name="save" value="保存" /></p>
    </form>
    <hr>
    <p><span class="active">日记列表</span> </p>
    <hr>
    <?php
      $handler = opendir($_SERVER['DOCUMENT_ROOT'] . '/phpcodes/diarydatas/');
      while (($diaryname = readdir($handler)) !== false) {
        if($diaryname != "." && $diaryname != ".." ) {
          $files[] = $diaryname;
        }
      }
      closedir($handler);
      foreach($files as $value) {
        echo "<a href=viewdiary.php?id=" . substr($value,0,(strlen($value)-4)) . ">$value</a>" . " | ";
      }
    ?>
  </body>
</html>


保存处理页(diaryprocessed.php)

 代码如下 复制代码
<?php
header('Content-Type:text/html; charset=utf-8');
 
$date = gmdate('Y-m-d', time() + 3600 * 8);
 
$diarytopic = $_POST['diarytopic'];
 
$diarycontents = $_POST['diarycontents'];
 
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
 
$output = $diarytopic . "n" . $diarycontents . "n";
 
$fp = fopen($DOCUMENT_ROOT . '/phpcodes/diarydatas/' . $date . '.txt', 'ab');
 
flock($fp,LOCK_EX);
 
if(!$fp) {
  echo "<p><strong>当前不能处理您提交的日志,请稍后再试!</strong></p>";
  echo "<a href="index.htm">返回</a>";
}
 
fwrite($fp,$output);
 
flock($fp,LOCK_UN);
 
fclose($fp);
 
echo '日记提交成功!';
echo "<a href="index.htm">返回</a>";


查看内容页(viewdiary.php)

 代码如下 复制代码

<?php
  $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>简易日记</title>
    <style>
      * { line-height: 32px; }
    </style>
  </head>
  <body>
    <a href="index.php">写日记</a>
    <hr>
    <?php
      $diaryname = $_GET['id'];
      $filepath = $DOCUMENT_ROOT . '/phpcodes/diarydatas/' . $diaryname . '.txt';
      if (file_exists($filepath)) {
        $fp = fopen($filepath, 'rb');
        echo nl2br(fread($fp,filesize($filepath)));
        fclose($fp);
      }
    ?>
  </body>
</html>

[!--infotagslink--]

相关文章

  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • win2003 安装软件之PHP5 图文安装教程

    本教程共分八篇:系统安装与设置篇、软件安装与设置篇、文件及文件夹权限篇、系统服务篇、安全策略篇、系统组件篇、注册表篇、软件安全篇。本篇讨论的是第二篇软件安装与设置篇的第七部分:安装软件之PHP 5 安装图解。 ...2016-01-27
  • vivo x9怎么设置默认输入法?vivo x9设置默认输入法教程

    本篇文章介绍了vivo x9如何设置默认输入法的方法,手机小白们快来了解一下吧。 问:vivo x9怎么设置默认输入法?答:其实设置默认输入法很容易,首先点击应用程序,然后点设...2017-01-22
  • Windows Server 2008 R2远程设置选项灰色解决方法

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

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

    PHP脚本实现Magento权限设置与缓存清理的实例代码有需要的朋友可参考一下。 代码如下 复制代码 <?php ## 设置文件644,目录755 function Al...2016-11-25
  • 深入分析为Visual Assist设置快捷键的方法

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

    如果要允许用户在站点中上载或下载文件,就需要在 Web 服务器上设置 FTP。无论站点是位于 Intranet 还是位于 Internet 上,使用 FTP 在所提供的位置中上载和下载文件的原理是相同的。...2016-01-27
  • goland设置颜色和字体的操作

    这篇文章主要介绍了goland设置颜色和字体的操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-04
  • C#如何更改Word的语言设置

    这篇文章主要为大家详细介绍了C#如何更改Word的语言设置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • Go 自定义package包设置与导入操作

    这篇文章主要介绍了Go 自定义package包设置与导入操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • IIS 环境下配置PHP5+MySql+PHPMyAdmin

    虽然主要是做.net开发的,但是,时不时的还要搞一下php,但是,php在windows下的配置,总是走很多弯路,正好前几天又配置了一下,因此总结在这里,做为自己的备忘,也希望给遇到问题的朋友们提供一些帮助。...2016-01-27
  • 三星s5820如何恢复出厂设置

    提示,恢复出厂前我们最好对数据进行一些备份哦,包括:联系人,短信,电话,视频,照片哦,恢复之后手机中的数据就丢失了。 具体方法 1.在待机模式下,点击【应用程序】。 2.点击...2016-09-20
  • Android设置密码的明文和密文显示例子

    设置密码的明文和密文显示这个现在的app中都具备这个功能了,我们下面一起来看看此功能如何实现吧,具体的代码如下所示。 我们经常会在一些软件上发现在密码输入框的...2016-09-20
  • win2003 WEB服务器NTFS权限设置图文方法

    Windows2003+IIS6.0的加固分为两部分,一部分是NTFS用户权限的配置,一部分是IIS6.0的配置。...2016-01-27
  • PHP4和PHP5的配置异同比较

    配置php4或者php5的过程中,php4,5的配置的步骤大致一样的,但是配置内容有一些差别。在LINUX等环境下编译,一般来说,只要编译的选项正确,配置也就正确了;在windows配置则需要注...2016-11-25
  • 小米如何恢复出厂设置

    小米手机使用的都是安卓系统,但好像不能按安卓系统恢复出厂设置来操作,下面我来介绍小米手机恢复出厂设置的具体方法,有需要的朋友可参考。 1、准备好小米手机刷机工...2016-09-20
  • thinkPHP5 tablib标签库自定义方法详解

    这篇文章主要介绍了thinkPHP5 tablib标签库自定义方法,结合具体实例形式分析了thinkPHP5标签库的定义、用法及相关注意事项,需要的朋友可以参考下...2017-05-21
  • PHP5正式版出炉

    Some of the key features of PHP 5 include: The Zend Engine II with a new object model and dozens of new features. XML support has been completely redone...2016-11-25
  • php7和php5的详细对比

    这篇文章主要介绍了php7和php5详细对比,对此感兴趣的同学,可以自己研究下...2021-04-19