Reber's Blog

会一点点编程、会一点点渗透


Python 编写规范

0x00 代码编排

1.缩进:使用4个空格缩进
2.行长度:每行不要超过80个字符
3.空行:顶级定义之间空两行,如函数或类的定义,方法定义、类定义与第一个方法之间都应该空一行。
4.分号:行尾不要有分号,也不要用分号将两条命令放在一行,除非是:
    1.长的导入模块语句。
    2.注释里的URL.
    3.可以使用圆括号实现隐式行连接

0x01文档编排

1.导入:模块注释->文档字符串->导入->模块全局变量->常量
        导入顺序:标准库导入->第三方库导入->应用程序指定库导入
2.import:不要在一行中import多个库,一行中只导入一个

0x02 空格

1.不要在逗号、分号、冒号前加空格,但应在他们后面加(除了在行尾)
2.二元操作符(赋值、比较、布尔)两边都加空格
3.当"="用于指示关键字参数或默认参数值是,不要再其两侧使用空格
4.","和"#"和"="不需要对齐,因为空格会成为维护的负担

0x03 注释

总体原则,错误的注释不如没有注释。
注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。
1.块注释:在一段代码前增加的注释。在"#"后加一空格。段落之间以只有"#"的行间隔。
2.行注释,在一句代码后加注释。进来少使用.
3.绝不要描述代码. 假设阅读代码的人比你更懂Python, 他只是不知道你的代码要做什么.

0x04 文档描述

1.为所有的共有模块、函数、类、方法写docstrings;非共有的没有必要,但是可以写注释(在def的下一行)。
2.如果docstring要换行,参考如下例子
class SampleClass(object):
    """Summary of class here.

    Longer class information....
    Longer class information....

    Attributes:
    likes_spam: A boolean indicating if we like SPAM or not.
    eggs: An integer count of the eggs we have laid.
    """

    def __init__(self):
        """Inits SampleClass with blah."""

0x05 命名规范

#类
1.类名使用大写字母开头的单词(如CapWords, 即Pascal风格)
2.类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。
3.类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
4.用双下划线(__)开头的实例变量或方法表示类内私有.

#函数
1.函数命名使用全部小写的方式,可以使用下划线。
2.变量也用小写加下划线的方式,即this_is_a_variable=1
3.常量命名使用全部大写的方式,可以使用下划线。

#包和模块
1.包命名尽量短小,使用全部小写的方式,不可以使用下划线。
2.模块名尽量短小,应该用小写加下划线的方式(如lower_with_under.py).
3.用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含).

1.尽量单独使用小写字母'l',大写字母'O'等容易混淆的字母。

0x06 Main

即使是一个打算被用作脚本的文件, 也应该是可导入的. 
并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行
代码应该在执行主程序前总是检查 if __name__ == '__main__'
    def main():
        ...

    if __name__ == '__main__':
        main()

0x07 字符串

避免在循环中用+和+=来累加字符串,可以将每个子串加入列表,然后再循环结束后使用.join连接列表
    items = ['<table>']
    for last_name, first_name in employee_list:
        items.append('<tr><td>%s, %s</td></tr>' % (last_name, first_name))
    items.append('</table>')
    employee_table = ''.join(items)
同一文件中保持使用字符串引号的一致性
多行字符串使用三重"双"引号,不过通常使用括号隐式连接

0x08 其他

括号:宁缺毋滥的使用括号
类:若一个类不继承自其它类,就显式的从object继承,即使是嵌套类
语句:通常每个语句独占一行,try/except一定不放在一行
文件和sockets:在文件和sockets结束时,显式的关闭它,推荐with语句管理文件

conky 配置

0x00 效果

使用软件conky可以在linux上看到系统的运行状态,效果如下: conky效果图

0x01 安装与配置

  1. 先安装conky:
    sudo apt-get install conky

  2. 在/home/username/下创建文件.conkyrc

    more...

RGB 颜色对照表

RGB

RGB颜色对照表

#FFFFFF#FFFFF0#FFFFE0#FFFF00
#FFFAFA#FFFAF0#FFFACD#FFF8DC
#FFF68F#FFF5EE#FFF0F5#FFEFDB
#FFEFD5#FFEC8B#FFEBCD#FFE7BA
#FFE4E1#FFE4C4#FFE4B5#FFE1FF
#FFDEAD#FFDAB9#FFD700#FFD39B
#FFC1C1#FFC125#FFC0CB#FFBBFF
#FFB90F#FFB6C1#FFB5C5#FFAEB9
#FFA54F#FFA500#FFA07A#FF8C69
#FF8C00#FF83FA#FF82AB#FF8247
#FF7F50#FF7F24#FF7F00#FF7256
#FF6EB4#FF6A6A#FF69B4#FF6347
#FF4500#FF4040#FF3E96#FF34B3
#FF3030#FF1493#FF00FF#FF0000
#FDF5E6#FCFCFC#FAFAFA#FAFAD2
#FAF0E6#FAEBD7#FA8072#F8F8FF
#F7F7F7#F5FFFA#F5F5F5#F5F5DC
#F5DEB3#F4F4F4#F4A460#F2F2F2
#F0FFFF#F0FFF0#F0F8FF#F0F0F0
#F0E68C#F08080#EEEEE0#EEEED1
#EEEE00#EEE9E9#EEE9BF#EEE8CD
#EEE8AA#EEE685#EEE5DE#EEE0E5
#EEDFCC#EEDC82#EED8AE#EED5D2
#EED5B7#EED2EE#EECFA1#EECBAD
#EEC900#EEC591#EEB4B4#EEB422
#EEAEEE#EEAD0E#EEA9B8#EEA2AD
#EE9A49#EE9A00#EE9572#EE82EE
#EE8262#EE7AE9#EE799F#EE7942
#EE7621#EE7600#EE6AA7#EE6A50
#EE6363#EE5C42#EE4000#EE3B3B
#EE3A8C#EE30A7#EE2C2C#EE1289
#EE00EE#EE0000#EDEDED#EBEBEB
#EAEAEA#E9967A#E8E8E8#E6E6FA
#E5E5E5#E3E3E3#E0FFFF#E0EEEE
#E0EEE0#E0E0E0#E066FF#DEDEDE
#DEB887#DDA0DD#DCDCDC#DC143C
#DBDBDB#DB7093#DAA520#DA70D6
#D9D9D9#D8BFD8#D6D6D6#D4D4D4
#D3D3D3#D2B48C#D2691E#D1EEEE
#D1D1D1#D15FEE#D02090#CFCFCF
#CDCDC1#CDCDB4#CDCD00#CDC9C9
#CDC9A5#CDC8B1#CDC673#CDC5BF
#CDC1C5#CDC0B0#CDBE70#CDBA96
#CDB7B5#CDB79E#CDB5CD#CDB38B
#CDAF95#CDAD00#CDAA7D#CD9B9B
#CD9B1D#CD96CD#CD950C#CD919E
#CD8C95#CD853F#CD8500#CD8162
#CD7054#CD69C9#CD6889#CD6839
#CD661D#CD6600#CD6090#CD5C5C
#CD5B45#CD5555#CD4F39#CD3700
#CD3333#CD3278#CD2990#CD2626
#CD1076#CD00CD#CD0000#CCCCCC
#CAFF70#CAE1FF#C9C9C9#C7C7C7
#C71585#C6E2FF#C67171#C5C1AA
#C4C4C4#C2C2C2#C1FFC1#C1CDCD
#C1CDC1#C1C1C1#C0FF3E#BFEFFF
#BFBFBF#BF3EFF#BEBEBE#BDBDBD
#BDB76B#BCEE68#BCD2EE#BC8F8F
#BBFFFF#BABABA#BA55D3#B9D3EE
#B8B8B8#B8860B#B7B7B7#B5B5B5
#B4EEB4#B4CDCD#B452CD#B3EE3A
#B3B3B3#B2DFEE#B23AEE#B22222
#B0E2FF#B0E0E6#B0C4DE#B0B0B0
#B03060#AEEEEE#ADFF2F#ADD8E6
#ADADAD#ABABAB#AB82FF#AAAAAA
#A9A9A9#A8A8A8#A6A6A6#A52A2A
#A4D3EE#A3A3A3#A2CD5A#A2B5CD
#A1A1A1#A0522D#A020F0#9FB6CD
#9F79EE#9E9E9E#9C9C9C#9BCD9B
#9B30FF#9AFF9A#9ACD32#9AC0CD
#9A32CD#999999#9932CC#98FB98
#98F5FF#97FFFF#96CDCD#969696
#949494#9400D3#9370DB#919191
#912CEE#90EE90#8FBC8F#8F8F8F
#8EE5EE#8E8E8E#8E8E38#8E388E
#8DEEEE#8DB6CD#8C8C8C#8B8B83
#8B8B7A#8B8B00#8B8989#8B8970
#8B8878#8B8682#8B864E#8B8386
#8B8378#8B814C#8B7E66#8B7D7B
#8B7D6B#8B7B8B#8B795E#8B7765
#8B7500#8B7355#8B6969#8B6914
#8B668B#8B6508#8B636C#8B5F65
#8B5A2B#8B5A00#8B5742#8B4C39
#8B4789#8B475D#8B4726#8B4513
#8B4500#8B3E2F#8B3A62#8B3A3A
#8B3626#8B2500#8B2323#8B2252
#8B1C62#8B1A1A#8B0A50#8B008B
#8B0000#8A8A8A#8A2BE2#8968CD
#87CEFF#87CEFA#87CEEB#878787
#858585#848484#8470FF#838B8B
#838B83#836FFF#828282#7FFFD4
#7FFF00#7F7F7F#7EC0EE#7D9EC0
#7D7D7D#7D26CD#7CFC00#7CCD7C
#7B68EE#7AC5CD#7A8B8B#7A7A7A
#7A67EE#7A378B#79CDCD#787878
#778899#76EEC6#76EE00#757575
#737373#71C671#7171C6#708090
#707070#6E8B3D#6E7B8B#6E6E6E
#6CA6CD#6C7B8B#6B8E23#6B6B6B
#6A5ACD#698B69#698B22#696969
#6959CD#68838B#68228B#66CDAA
#66CD00#668B8B#666666#6495ED
#63B8FF#636363#616161#607B8B
#5F9EA0#5E5E5E#5D478B#5CACEE
#5C5C5C#5B5B5B#595959#575757
#556B2F#555555#551A8B#54FF9F
#548B54#545454#53868B#528B8B
#525252#515151#4F94CD#4F4F4F
#4EEE94#4D4D4D#4B0082#4A708B
#4A4A4A#48D1CC#4876FF#483D8B
#474747#473C8B#4682B4#458B74
#458B00#454545#43CD80#436EEE
#424242#4169E1#40E0D0#404040
#3D3D3D#3CB371#3B3B3B#3A5FCD
#388E8E#383838#36648B#363636
#333333#32CD32#303030#2F4F4F
#2E8B57#2E2E2E#2B2B2B#292929
#282828#27408B#262626#242424
#228B22#218868#212121#20B2AA
#1F1F1F#1E90FF#1E1E1E#1C86EE
#1C1C1C#1A1A1A#191970#1874CD
#171717#141414#121212#104E8B
#0F0F0F#0D0D0D#0A0A0A#080808
#050505#030303#00FFFF#00FF7F
#00FF00#00FA9A#00F5FF#00EEEE
#00EE76#00EE00#00E5EE#00CED1
#00CDCD#00CD66#00CD00#00C5CD
#00BFFF#00B2EE#009ACD#008B8B
#008B45#008B00#00868B#00688B
#006400#0000FF#0000EE#0000CD
#0000AA#00008B#000080#000000

PHP 之封装 MySQL 类

0x00 config.inc.php内容如下

<?php
return array(
    'DB_HOST' => '192.168.188.134',
    'DB_NAME' => 'scoreboard', 
    'DB_USER' => 'score',
    'DB_PASS' => '123456',
    'DB_CHARSET' => 'utf8',
    'IS_LOG' => 1,//开启日志
    'LOGFILEPATH' => '../log.txt'//日志路径
);
/*
    $database = require('./config.php');
    echo $database['DB_TYPE'];   //输出'DB_TYPE'
*/

?>

0x01 表设计如下

create database scoreboard;
use scoreboard;

drop table if exists users;
create table users(
    id int not null auto_increment primary key,
    gid int not null default 'xiaoming' comment '组id',
    username varchar(20) not null default 'xiaoming' comment '用户名',
    password varchar(32) not null default '123456' comment '密码',
    sex varchar(2) not null default '0' comment '性别',
    totalscore int not null default '0' comment '个人总积分'
);

drop table if exists share;
create table share(
    id int not null auto_increment primary key,
    uid int not null,
    content varchar(1024) not null default 'content' comment '分享内容',
    comment varchar(1024) comment '点评',
    date varchar(15) not null default '20150101' comment '分享日期'
);

drop table if exists score;
create table score(
    id int not null auto_increment primary key,
    uid int not null default '0' comment '用户id',
    score int not null default '0' comment '用户单次积分',
);

grant all privileges on scoreboard.* to 'score'@'%' identified by '123456';

-- 或者只给特定权限
-- grant select,update,delete on scoreboard.* to 'score'@'%' identified by '123456';

flush privileges;

0x02 封装类如下

<?php

class mysql {
    private $logfilepath;
    private $is_log;
    private $hlog;
    private $conn;

    //构造函数
    public function __construct() {
        $config = include_once(dirname(__FILE__)."/../config/config.inc.php");
        $this->is_log = $config['IS_LOG'];
        $this->logfilepath = $config['LOGFILEPATH'];

        if ($this->is_log){
            $handle = fopen($this->logfilepath,"a+");
            $this->hlog = $handle;
        }

        $this->conn = $this->connect($config['DB_HOST'],$config['DB_USER'],$config['DB_PASS'],$config['DB_NAME'],$config['DB_CHARSET']);
    }

    //连接数据库
    public function connect($dbhost, $dbuser, $dbpass, $dbname, $dbcharset) {
        $this->conn = @mysql_connect($dbhost,$dbuser,$dbpass);
        if (!$this->conn) {
            $msg = "连接数据库失败:".mysql_error();
            $this->write_log($msg);
            die($msg);
        } else {
            if (!@mysql_select_db($dbname)) {
                $msg = "连接数据库成功,但选择数据库失败:".mysql_error();
                $this->write_log($msg);
                die($msg);
            } else {
                $msg = "连接数据库成功,且选择数据库成功";
                $this->write_log($msg);
            }
        }

        @mysql_query("set names ".$dbcharset);

    }

    //执行语句
    public function query($sql) {
        
        $result = @mysql_query($sql);

        if (!$result) {
            $this->write_log('mysql_query error:'.mysql_error());
        } else {
            $this->write_log('执行语句:'.$sql.' 且执行成功');
        }
        return $result;
    }

    //查询一条数据
    public function select_one($tab,$column = "*",$condition = '',$debug=False) {   //查询函数
        $condition = $condition ? ' where ' . $condition : NULL;
        $sql = "select $column from $tab $condition ";
        if ($debug) {
            echo '将执行语句:'.$sql.'<br />';
        } else {
            $result = $this->query($sql);
            $row = @mysql_fetch_assoc($result);
            return $row;
        }
    }

    //查询多条数据
    public function select_more($tab,$column = "*",$condition = '',$debug=False) {   //查询函数
        $condition = $condition ? ' where ' . $condition : NULL;
        $sql = "select $column from $tab $condition";
        if ($debug) {
            echo '将执行语句:'.$sql;
        } else {
            $result = $this->query($sql);
            $i = 0;
            $rows = array();
            while ($row = @mysql_fetch_assoc($result)) {
                $rows[$i] = $row;
                // print_r($rows[$i]);
                $i++; 
            }
            return $rows;
        }
    }

    //返回结果集
    public function echo_result($tab,$column = "*",$condition = '',$debug=False) {   //查询函数
        $condition = $condition ? ' where ' . $condition : NULL;
        $sql = "select $column from $tab $condition ";
        if ($debug) {
            echo '将执行语句:'.$sql.'<br />';
        } else {
            return $this->query($sql);
        }
    }

    //插入数据
    public function insert($tab,$arr,$debug=False) {
        $value = '';
        $column = '';
        foreach ($arr as $k => $v) {
            $column .= ",{$k}";
            $value .= ",'{$v}'";
        }
        $column = substr($column, 1);
        $value = substr($value, 1);

        $sql = "insert into $tab($column) values($value)";
        if ($debug) {
            echo '将执行语句:'.$sql;
        } else {
            $this->query($sql);
            $num = $this->affected_num();
            $this->write_log("受影响行数:".$num);
            return $num;    //返回受影响行数
        }
    }

    //获取最后插入的id
    public function insert_id() {
        $id = mysql_insert_id($this->link_id);
        $this->write_log('最后插入的id为:'.$id);
        return $id;
    }

    //更新数据
    public function update($tab,$arr,$condition = '',$debug=False) {
        if (!$condition) {
            die("error".mysql_error());
        } else {
            $condition = 'where ' . $condition;
        }
        
        $value = '';
        foreach ($arr as $k => $v) {
            $value .= "{$k}='{$v}',";
        }
        $value = substr($value,0,-1);

        $sql = "update $tab set $value $condition";
        if ($debug) {
            echo '将执行语句:'.$sql;
        } else {
            $this->query($sql);
            $num = $this->affected_num();
            $this->write_log("受影响行数:".$num);

            return $num;            
        }
    }

    //删除数据
    public function delete($tab,$condition='',$debug=False) {
        $condition = $condition ? ' where ' . $condition : NULL;
        $sql = "delete from $tab $condition";
        if ($debug) {
            echo '将执行语句:'.$sql;
        } else {
            $this->query($sql);
            $num = $this->affected_num();
            $this->write_log("受影响行数:".$num);
            return $num;    //返回受影响行数
        }
    }

    //返回受影响行数
    public function affected_num() {
        $num = @mysql_affected_rows();
        return $num;
    }

    //写入日志
    public function write_log($msg='') {
        if ($this->is_log){
            $text = date("Y-m-d H:i:s")." ".$msg."\r\n";
            fwrite($this->hlog,$text);
        }
    }

    //关闭数据库连接
    public function close() {  
        mysql_close($this->conn);
    }

    //析构函数
    public function __destruct() {
        if($this->is_log){
            fclose($this->hlog);
        }
    }
}

    //$db = new mysql();
    
    // //select_one($tab,$column = "*",$condition = '')
    // $rows = $db->select_more('share','*');
    // print_r($rows[0]);
    // print_r($rows[1]);

    // //insert($tab,$arr)
    // $arr = array();
    // $arr['uid'] = '3';
    // $arr['content'] = 'xss';
    // $arr['comment'] = 'very good';
    // $arr['date'] = '1464082630';
    // $db->insert('share',$arr);

    // //update($tab,$arr,$condition = '')
    // $arr = array();
    // $arr['content'] = 'xssxssxssxssxss';
    // $arr['comment'] = 'goodgoodgoodgood';
    // $condition = 'id > 5';
    // $db->update('share',$arr,$condition);

    //$db->delete("share","id between 10 and 15");

    //$db->close();
?>

PHP 之 MySQL 常用函数

0x00 处理函数

  1. mysql_connect(server,user,pwd,newlink,clientflag)
    连接服务器的函数,成功则返回MySQL标识,失败则返回FALSE

  2. mysql_select_db(database,connection)
    选择数据库的函数,成功则返回true,失败则返回false

    more...

win/ubuntu 双系统分区设置

win10和ubuntu双系统分区设置

  1. 硬盘采用uefi格式
  2. 硬盘首部留400M空间,是FAT16的格式,用来存放win的引导信息
  3. 在硬盘末尾给ubuntu划分50G左右空间
  4. ubuntu的/分区,格式为ext4,空间为40G
  5. ubuntu的/home分区,格式为ext4,空间为10G
  6. ubuntu的/boot分区,格式为ext4,空间为200M
  7. ubuntu的/swap分区,格式为swap,空间为200M
  8. ubuntu的引导分区为/boot

双系统磁盘分区

more...

XML 基础

0x00 XML简介

1、xml的设计宗旨是传输数据,而并非显示数据
2、xms是不作为的,它被设计用来结构化、存储以及传输信息
3、xml只是纯文本,独立于软硬件和应用程序
4、xml可供任何软硬设备读取数据
5、xml可以自定义标签
6、xml具有自我描述性
7、xml是对html的补充
8、xml常用于简化数据的存储和共享

more...

PHP 之上传与下载

0x00 上传

  • 客户端设置
    客户端使用form表单上传文件,在form表单中必须指明enctype和method属性的值
<html>
<head>
    <title>post</title>
</head>
<body>
    <form action="xx.php" mothod="post" enctype="multipart/form-data">
        <input type="file" value="myfile" /><br />
        <input type="submit" value="提交" />
    </form>
</body>
</html>

PHP 之目录与文件

0x00 目录的操作

<?php
  $path = "/var/www/html/php/dir.php";
  echo dirname($path)."<br />";  //返回上级路径
  echo basename($path)."<br />";  //返回文件名部分
  print_r(pathinfo($path));  //返回包含path信息的数组

  echo "<br /><br />";

  //readdir()从目录句柄读取条目,返回目录中的文件名,指针依次向后移动
  $path = "D:/phpStudy/WWW/php";
  $dh = opendir($path);
  while (false !== ($filename=readdir($dh))) {
    echo $filename."<br />";
  }
  rewinddir($dh);  //指针复位
  echo readdir($dh);
  closedir($dh);

  mkdir("./aaa");//创建文件夹aaa
  rmdir("./aaa");//删除文件夹aaa

  file_put_contents("aa.php", "");//创建文件aa.php
  unlink("./aa.php");//删除文件aa.php
?>
![箭头](/img/post/arrow.png)
![目录的操作](/img/post/dir.png)

0x01 文件的读写

  1. fopen(filename,mode)和fclose(filename,mode) fopen()打开文件的模式

例子:

<?php
	$file = fopen("test.txt","r");
	$file = fopen("/home/test/test.txt","r");
	$file = fopen("/home/test/test.gif","wb");
	$file = fopen("http://www.example.com/","r");
	$file = fopen("ftp://user:password@example.com/test.txt","w");
?>
  1. 读取内容
fread(h_file,length)  //读取打开文件的length个字节,返回读取的字符串  
fgets(h_file,length)  //读取一行返回length个字节,不加length时默认1024个字节,失败返回false  
fgetc(h_file)   //逐字读取
  1. file_get_content()和file_put_content()
file_get_content($filename)可以得到文件中的所有内容  
file_put_content($filename, $str)可以将字符串覆盖写入文件中  
file_put_content($filename, $str, FILE_APPEND)可以将字符串追加到文件中
  1. filetype()
filetype($filename)可以得到文件的类型

0x02 查看文件夹下的文件信息

<?php
	$path = "./";
	$filelist=array("filesystem.php");//要过滤掉的文件

	//浏览指定目录下的文件,并使用表格输出
	//path目录信息的过滤,判断path存在,并且是否是个目录
	if(!file_exists($path) || !is_dir($path)){
		die($path."目录无效!");
	}
	//2. 输出表头信息
	echo "<h3>{$path}目录下的文件信息<h3>";
	echo "<table width='600' border='0'>";
	echo "<tr bgcolor='#cccccc' align='left'>";
	echo "<th>序号</th><th>名称</th><th>类型</th><th>大小</th><th>创建时间</th>";
	echo "</tr>";

	//打开这个目录,并遍历目录下面的所有文件
	$dir = opendir($path);
	if($dir){
		$i=0;
		//遍历目录中的文件,并输出文件的信息
		while($f = readdir($dir)){
			if($f=="." || $f==".." || in_array($f,$filelist)){
				continue;//跳出本次循环,继续下一次遍历。
			}
			$file = trim($path,"/")."/".$f;
			$i++;
			echo "<tr>";
			echo "<td>{$i}</td>";
			echo "<td>{$f}</td>";
			echo "<td>".filetype($file)."</td>";
			echo "<td>".filesize($file)."</td>";
			echo "<td>".date("Y-m-d H:i:s",filectime($file))."</td>";
			echo "</tr>";
		}
		closedir($dir); //关闭目录
	}
	echo "<tr bgcolor='#cccccc' align='left'><td colspan='6'>&nbsp;</td></tr>";
	echo "</table>";
?>
![箭头](/img/post/arrow.png)
![查看文件夹下的文件信息](/img/post/file_info.png)

PHP 之字符串

0x00 特点

  1. 字符串可以使用数组的处理函数操作,但并不是真正的数组
  2. 双引号中的变量用{}括起来,因为字符串中若遇到$符号,解析器会尽可能多的获取后面的字符以组成一个合法的变量名
<?php
        $lamp = array('os' => 'Linux', 'webserver' => 'Apache', 'db' => 'Mysql', 'language' => 'PHP');
        
        echo "A OS is $lamp[os].";  // ok
        echo "A OS is $lamp['os'].";  // false
        echo "A OS is {$lamp['os']}.";  //ok
        echo "A OS is {$lamp[os]}.";  // ok

        echo "This square is $square->width meters broad."; //ok
        echo "This square is $square->width meters broad."; //ok
        echo "This square is $square->width meters broad."; //ok
?>

0x01 常用字符串输出函数

函数名功能描述
echo输出字符串
print()输出一个或多个字符串
die()输出一条消息,并退出当前脚本
printf()输出格式化字符串
sprintf()把格式化字符串写入到一个变量中

0x02 函数echo()

输出一个或多个字符串
void echo(string arg1 [,string …])

more...

Previous Page 15 of 18 Next Page