PHP技术基础

1.php4种标签风格及3种注释风格

i.标签风格

a.XML风格

<?php

echo "hello world!";

?>

b.ASP风格

<%

echo "hello world!";

%>

c.脚本风格

<script language="php">

echo "hello world!";

</script>

d.极简风格

<?echo "hello world!";?>

注意:当使用极简风格和ASP风格时需要在php.ini文件中配置short_open_tag和asp_tags设置为on

ii.注释风格

a.c++风格的单行注释 //

b.c++风格的多行注释 /**/

c.shell风格的注释 #

2.php脚本执行的3种参数传递与解析

a.$argc和$argv 传递参数

<?php

echo "接收到{$argc}个参数";

print_r($argv);

?>

执行结果: php.exe  .\hello.php   hello world -a 123

paras count : 5Array

(

[0] => .\hello.php

[1] => hello

[2] => world

[3] => -a

[4] => 123

)

b.getopt()函数解析参数

<?php

$param_arr = getopt(‘a:b:c:‘);

print_r($param_arr);

?>

执行结果:php test.php -a 345 -b 12q3

Array

(

[a] => 345

[b] => 12q3

)

c.提示用户输入

<?php

fwrite(STDOUT,‘请输入您的博客名:‘);

echo ‘您输入的信息是:‘.fgets(STDIN);

?>

3.php数据类型

php的变量使用$开头,属于动态数据类型,数据类型包括:

boolean string integer float  array object resource null值

数据类型的定义:

a.string 单引号和双引号字符串的区别

同shell中的单双引号的区别相同,双引号的字符串需要先执行递归的变量替代

$a=‘hello world‘;

echo "hi,$a";

b1.string的界定符输出

目的:增强可读性

$string=<<<std

hi,

hello world

std; //结束

b2.格式化字符串

$formatted = sprintf ("hello,%s", "world");

printf($formatted);

c.array3种定义

$array=array("v1","v2");//数值自动键,从0开始

$array[key]="vkey";//字符指定键

$array=array(key1=>v1,key2=>v2) //字符键和数字键可以混用

d.null值

通常会用于变量申明

$str=null;

is_null($str) //true

$str="str"

is_null($str) //false

unset($str)

is_null($str) //true

e.数据类型之间的强制转换

$str="123"

$num=(integer)$str

$bl=(boolean)$str

f.数据类型检测函数

is_bool(),is_string,is_float(),is_double(),is_integer(),is_int(),is_null(),is_array(),is_object(),is_numeric()

g.常量定义函数

define(string 常量名,值,true/false大小写敏感)

bool defined(string 常量名) //判断该常量是否已经定义

define("ms",123)

echo ms+24;

h.php预定义常量

__FILE__  PHP程序文件名

__LINE__  PHP当前文件行数

PHP_VERSION

PHP_OS    执行PHP的OS

...

i.string的+运算和。运算

string + :表示将字符串转换成数字再执行+  (只转换字符串首部的数字,首部为字母则结果为0)

string . :表示将字符串拼接

$n="3.14r";

$m=1;

echo $n.$m , $n+$m  //3.14r1  4.14

4.变量

a.变量的引用定义&

$i="hello"

$j=&$i

$i="$i,world"

echo $i  // hello,world

echo $j  // hello,world

b.变量的3种作用域

i.局部变量

函数中定义的变量,作用域为整个函数

ii.全局变量

函数以外的变量,作用域为当前PHP文件,但函数内部不可用,除非在函数中申明global才可作用于函数中

iii.静态变量

定义于函数中,函数结束时不会被释放

<?php

$msg="hello"; //全局变量

function hello(){

static $msg1="hello";//静态变量

global $msg; //函数中使用全局变量

$msg1="hello" //局部变量

}

?>

c.变量的递归性(可变变量)

$a="hello,world";

$b="a"

echo $$b  //将输出hello,world

d.php预定义变量

$_SERVER[‘SERVER_ADDR‘] //当前运行脚本所在的服务器IP

$_SERVER[‘SERVER_NAME‘] //...服务器名

$_SERVER[‘REQUEST_METHOD‘] //请求方法

$_SERVER[‘REMOTE_ADDR‘] //

$_SERVER[‘REMOTE_HOST‘] //

$_SERVER[‘REMOTE_PORT‘] //

$_SERVER[‘SCRIPT_FILENAME‘] //当前脚本的绝对路径

$_SERVER[‘SERVER_PORT‘] //

$_SERVER[‘DOCUMENT_ROOT‘] //当前脚本的文档根目录

$_COOKIE //通过HTTPCookie传递到脚本的信息(数组)

$_SESSION //包含与所有回话有关的信息(数组)

$_POST //包含通过POST方法传递的相关信息(数组)

$_GET //包含通过GET方法传递的相关信息(数组)

$_GLOBALS //所以已定义的全局变量组成的数组,变量名是该数组的索引(数组)

6.运算符

c语言中的所有运算符适用于PHP,并有其他运算符:

@:错误屏蔽运算符,可以屏蔽表达式产生的错误

[email protected](5/0) ;//防止系统报错,使得程序可以继续运行

7.函数

a.函数定义与调用

function fun_name($arg1,&$arg2,$arg3=value,...){

}

function exap($num){

return $num+10;

}

echo exap(10);

特点:入参的传递有2种值传递和引用传递,参数可以有默认值

b.函数作为变量值时的调用(变量函数)

$fun="exap";

$fun(10);

c.函数返回值得引用<=>函数的引用

$a=&exap(10)

echo $a."<p>";

unset($a) //解引用或解变量

8.流控制语句

a.if,switch,while,do...while,for与C语言相同

b.foreach 用于数组和对象

foreach(array_expression as $value) 或者 foreach(array_expression as $key => $value)

8.字符串处理

a.trim(string str[,string charlist]),ltrim,rtrim

默认删除字符串左右两边所有的空格,\0,\t,\n,\x0B,\r

b.字符串转义

"\",addcslashes(),stripcslashes()

例子:$m1="select * from t where book=‘m‘";

$m="select * from t where book=\‘m\‘";

$m=addcslashes($m1)

也可以去转义

stripcslashes($m)

c.子字符串

string substr(string str,int start[,int len])

d.比较字符串

int strcmp(string str1,string str2)

int strnatcmp(string str1,string str2) 不区分大小写

int strncmp(string str1,string str2,int len)

e.字符串查找

string strstr(string str,string findstr) 返回findstr第一次出现的位置到str末尾的子字符串

int substr_count(string str,string findstr) 查找子字符串出现的次数

f.字符串替代

string str_ireplace(string new_substr,string old_substr,string str[,int count替代次数])

string substr_replace(string str,string repl,int star[,int len])

g.分割字符串

array explode(string sep,string str[,int limit限制返回值最多包含的元素])

h.合成字符串

string implode(string glue,array)

9.正则表达式

a.bool ereg/eregi(string pattern,string str[,returnarray]) 在字符串str中匹配pattern模式, 将匹配的字符放在返回数组中;如果匹配成功返回true,否则返回false。

b.string ereg_replace/eregi_replace(string pattern,string rep,string str) 使用rep替代 str中所有匹配pattern的子串,返回最后替代的结果

c.array split/spliti(string pattern,string str[,int limit]) 使用pattern分割str,返回 分割后的数组,最后返回limit个元素

d. array preg_grep(string pattern ,array input) 使用pattern匹配数组array中的所有元素, 返回完全匹配的元素(而不是部分匹配);pattern必须使用"/.../"包围

e.preg_match/preg_match_all(string pattern,string str [,array matches]) 使用pattern 匹配str中所有的子串并返回,返回匹配的次数

f. string preg_quote(string str[,string delimiter]) 将str中的所有特殊字符自动转义, delimiter字符串指定的所有字符也将被转义(即加上一个‘\’)

g.mixed preg_replace(mixed pattern, mixed replacement,mixed str[,int limit])  使用pattern在str中匹配,将匹配的子串替代为replacement,最多替代limit次

h.mixed preg_replace(mixed pattern, callback ck,mixed str[,int limit])  与上述函数相同,但是是使用ck函数的返回值来替代,ck的入参是一个数组,该数组是每一个匹配返回的所有分组

i.array preg_split(string pattern,string str[,int limit]) 使用pattern模式分割str。

10.数组

print_r(mixed)可以打印数组

each()和list()

explode()字符串拆分成数组

implode()数组组合成字符串

int count(array[,int mode]) 统计数组元素个数(mode==1递归统计)

mixed array_search(key,array) 在array中查找键值,如果找到返回键值;否则返回FALSE

mixed array_pop(array) 获取并删除数组中的最后一个元素,如果数组为空则返回null

int array_push(array,mixed v1[,v2,...]) 向数组尾部插入元素,并返回数组中的元素总数

array array_unique(array) 删除数组中重复的元素

11.php与web表单交互数据

a.表单用于浏览器发送数据到服务器,并使用action指明使用哪个url进行表单数据的处理。浏览器的数据只能通过表单来传送。表单的元素较多:checkbox,submit,reset,button,textarea...

b.GET和POST提交表单的区别:使用GET提交的表单将会将表单数据作为参数附加到url中进行提交;而POST方法不会。

c.关于全局变量$_POST,$_GET,$_SESSION

$_POST:数组格式,POST方法传递表单,使用表单元素的元素名获取元素值:$_POST[‘user‘] .

$_GET :数组格式,GET方法传递表单,使用表单元素的元素名获取元素值:$_GET[‘user‘]

$_SESSION:session传参获取变量。使用表单元素的元素名获取元素值:$_SESSION[‘user‘]

根据表单元素的不同,传回来的‘user‘键对应的值有可能是一个数组

d.在web中嵌入php脚本的方法只有2种:

使用HTML标记<?php...?>编写php脚本;对表单元素的value属性进行赋值

<?php

include("index.php");//可以引用外部文件解耦合,多次引用将多次包含,如果只引用一次可以使用require_once

require_once("index.php");  //require

?>

<?php

$hidden="yg0025";

?>

<input type="hidden" name="ID" value="<?php echo $hidden;?>">

$re=require("...")函数及其变种都具有返回值,返回调用的php文件中return函数的值

<?php

return "hello";

?>

include 和require的执行过程都是先将代码原本的拷贝到当前文件再执行。

return的效果也可以理解成将代码返回。return后面的代码将不会被拷贝。

这种拷贝有一个缺陷就是:同名变量或类有可能产生错误。

12.php与JavaScript交互

a.js的一些常识

js是一种由浏览器运行解析的脚本(也可以由服务器执行)。可以在不与服务器交互的条件下实现动态网页。

事件驱动:js是基于对象的语言。采用了事件驱动,当激发了某些事件时将执行相应的js代码。

js事件相应模式:<input type="submit" name="submit" value="检测" onClick="check()">

js的常用事件:onclick,ondblclick,onmousedown,...可以在网上查询js常用事件

与html解耦合:<script src=url language="JavaScript"></script> 包含外部文件

在页面底部(</body>之前)引入js脚本,原因:由于js加载阻塞页面,而HTML是下载多少渲染多少,因此我们把它至于页面底部,让UI线程先执行完再加载js脚本

13.日期与时间

14.cookie与session

cookie:

a.cookie是从一个web页面到下一个web页面的数据传递方法,存储在客户端;session是让数据在页面中持续有效的方法,存储在服务器端。功能:记录访客的信息;在页面之间传递变量;将所查看的Internet页缓存在cookie临时文件夹中;

b.php设置cookie

必须写在文件开头

<?php

setcookie("tmcookie","www.baidu.com");//生命周期默认为浏览器会话周期

setcookie("tmcookie","www.baidu.com",time()+60);//有效期60秒

setcookie("tmcookie","www.baidu.com",time+60,"/tm/",".baidu.com",1); //设置有效目录和域名

setcookie("tmcookie","",time()-1);//删除cookie

?>

浏览器会定时清流cookie,即使是未过期cookie也可能在cookie容量满时被清理

session

a.session以随机且唯一的session_id为文件名保存在服务器的文件中,该session_id则是保存在cookie中

写session:

<?php

session_start();

$_SESSION["admin"]="hello";//完成写session

?>

读session

<?php

if(!empty($_SESSION[‘admin‘])) //将判断cookie中是否存在session_id和‘admin’字段,否则均返回null

$user=$_SESSION[‘admin‘]

?>

删除session

unset($_SESSION[‘admin‘]);

$_SESSION=array();//删除所有session

session_destory();//彻底销毁会话,确定会话结束时,应该这么做

b.session的过期时间(只有存在cookie时才能使用)

i.session_set_cookie_params将设置session_id的过期时间

<?php

session_set_cookie_params(1*60);

session_start();

$_SESSION["admin"]=‘hello‘

?>

ii.setcookie设置session_id的过期时间

<?php

session_start();

setcookie(session_name(),session_id(),time()+60,‘/‘);

$_SESSION["admin"]=‘hello‘

?>

c.session只能使用当前session,如果想用上一个session,那是不可能的,因为无法得知session id。

d.session_id的4种传递方式

i.通过cookie传递,默认.需要客户端浏览器打开cookie。

ii.设置php.ini中的session.use_trans_sid=1,让PHP自动跨页面传递session_id

iii.通过GET方法,隐藏表单传递session_id

iv.使用文件或者数据库存储session_id,在页面间传递中手动调用

15.php的图形图像处理技术

16.php文件处理

17.php面向对象

a.定义

与c++相似

final class demo{

public function __construct(){         //构造函数

echo __METHOD__.":".__LINE__."\n";

}

public function func($param){ //普通函数

$param++;

echo "method func $paramn";

}

public function __destruct(){         //析构函数

echo __METHOD__.":".__LINE__."\n";

echo $this->sex;

}

//public $name = 123+456;   错误:初始化时不能带有计算

static $a = ‘$a‘;

const  A = ‘A‘;

public $name = ‘凤姐‘;

protected $sex = ‘男+女‘;

private $age = 23;

}

类的构造及成员的调用:$demo = new demo(); $demo->func(1);

成员的可见性有:public protected private 3种

其它修饰符:static final const

成员的调用方式: $this->property

b.类中的魔术方法(具有一定意义的方法)

i. 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此

ii. 从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法,接下来列出一些魔术方法,如果大家想详细了解可以针对某一个进行查询了解,这里就不大篇幅的介绍了。

b1.__construct() 构造方法

__destruct()析构方法

b2.__autoload() 自动加载魔术方法。有的时候,在文件众多的项目中,要一一将所需类的文件都 include 进来,PHP 提供了 __autoload()方法,它会在试图使用尚未被定义的类时自动调用。 通过调用此函数,脚本引擎在PHP 出错失败前有了最后一个机会加载所需的类。

加入在Person.php中存在Person类,则当在另一个文件中调用时可以这样:

<?php

function __autoload($class_name)

{

require_once $class_name.‘.php‘;

}

//当前页面 Pserson 类不存在则自动调用 __autoload() 方法,传入参数 Person

$p1 = new Person("张三","20");

$p1 -> say();

?>

b3.__get()  当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名。

__set()  给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值。 这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。

__isset() 当在一个未定义的属性上调用isset()函数时调用此方法

__unset() 当在一个未定义的属性上调用unset()函数时调用此方法

<?php

class Person {

private $name;

private $sex;

private $age;

//__set()方法用来设置私有属性

function __set($property_name, $value) { //在属性赋值时会被调用

echo "在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值<br />";

$this->$property_name = $value;

}

//__get()方法用来获取私有属性

function __get($property_name) {

echo "在直接获取私有属性值的时候,自动调用了这个 __get() 方法<br />";

return isset($this->$property_name) ? $this->$property_name : null;

}

}

$p1=new Person();

$p1->name = "张三";

echo "我的名字叫:".$p1->name;

?>

运行该例子,输出:

在直接设置私有属性值的时候,自动调用了这个 __set() 方法为私有属性赋值

在直接获取私有属性值的时候,自动调用了这个 __get() 方法

我的名字叫:张三

b4.__call( $method, $arg_array )  当调用一个未定义的方法是调用此方法,这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方法,如果本类中不存在__call()方法就去找父类中的__call()方法。

b5.__clone()如果想复制一个对象则需要使用clone方法

如果想在克隆后改变原对象的内容,需要在类中添加一个特殊的 __clone() 方法来重写原本的属性和方法。__clone() 方法只会在对象被克隆clone的时候自动调用。

<?php

class Person {

private $name;

private $age;

function __construct($name, $age) {

$this->name = $name;

$this->age = $age;

}

function say() {

echo "我的名字叫:".$this->name;

echo " 我的年龄是:".$this->age."<br />";

}

function __clone() {

$this->name = "我是假的".$this->name;

$this->age = 30;

}

}

$p1 = new Person("张三", 20);

$p1->say();

$p2 = clone $p1;

$p2->say();

?>

b6.

__toString()方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时

__sleep()  串行化的时候用

__wakeup 反串行化的时候调用

__set_state()当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)

__invoke当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。

__callStatic(PHP 5.3.0以上版本有效) 是为了处理静态方法调用

c.继承与多态

c1.范围解析操作符(::)

作用:范围解析操作符或者更简单地说是一对冒号,可以用于访问静态成员,类常量,还可以用于覆盖类中的属性和方法。self,parent 和 static这三个特殊的关键字是用于在类定义的内部对其属性或 方法进行访问的。范围解析操作符(::)与类名连用,可以用于访问静态成员、方法和常量;与parent连用,可以访问被覆盖类中的成员和方法。

<?php

class MyClass

{

protected function myFunc() {

echo "MyClass::myFunc()\n";

}

}

class OtherClass extends MyClass

{

// 覆盖了父类的定义

public function myFunc()

{

// 但还是可以调用父类中被覆盖的方法

parent::myFunc();

echo "OtherClass::myFunc()\n";

}

}

$class = new OtherClass();

$class->myFunc();

/**

* 输出结果 ->

* MyClass::myFunc()

* OtherClass::myFunc()

*/

function mycall(MyClass $a){  //函数的入参可以指明类型也可以不指明

$a->myFunc();

}

mycall(new OtherClass());  多态

?>

c2.接口interface与实现implements

class 子类 extends 父类 implemtns 接口1, 接口2, ...

{

......

}

interface User{

function getDiscount();

function getUserType();

}

//VIP用户 接口实现

class VipUser implements User{

// VIP 用户折扣系数

private $discount = 0.8;

function getDiscount() {

return $this->discount;

}

function getUserType() {

return "VIP用户";

}

}

d.对象的序列化与反序列化->存储

序列化完整过程包括两个步骤:一个是序列化,就是把对象转化为二进制的字符串,serialize() 函数用于序列化一个对象;另一个是反序列化,就是把对象被序列转化的二进制字符串再转化为对象,unserialize() 函数来反序列化一个被序列化的对象。这样整个过程下来,对象内的类型结构及数据都是 完整的。

<?php

$p1 = new Person("张三", 20);

$p1_string = serialize($p1);

//将对象序列化后写入文件

$fh = fopen("p1.text", "w");

fwrite($fh, $p1_string);

fclose($fh);

$p2 = unserialize(file_get_contents("p1.text"));

$p2 -> say();

?>

18.php加密技术

19.php操作mysql数据库

resource mysql_connect("hostname","username","password"); //成功返回连接conn,失败返回null

mysql_select_db(string dbname[,resource conn]);//选择使用的数据库 mysql_query("dbname"[,conn])

$result=mysql_query(string query[,resource conn]);//适合所有sql语句,语句中不能加";"

$info=mysql_fetch_array($result[,int result_type]); 从数组结果中获取递归一行信息,返回数组;如果是select则$info的键为字段的名字,如果到底尾部则false

$info=mysql_fetch_object($result[,int result_type]); 获取一行作为对象,成员为字段名

$info=mysql_fetch_row($result[,int result_type]); 返回数组,但是是以下标索引的。

int mysql_num_rows()获取查询结果中总的记录数

20.php的PDO

a.支持的数据库

PDO支持MS SQL SERVER,MYSQL,ODBC,ORACLE,POSTGRE SQL等。

需要的php版本:php5.1以上

b.当数据库发生变化时只需要修改PDO的DSN数据源名称

c.PDO连接mysql

$dbh = new PDO(‘mysql:host=localhost;dbname=test‘, ‘root‘, ‘nsfocus123‘);

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "INSERT INTO user VALUES (‘5‘, ‘xiaohua‘);";

$stmt = $dbh->prepare($sql);

$stmt->execute();

echo $dbh->lastinsertid();

$sql = "SELECT * FROM user";

$stmt = $dbh->prepare($sql);

$stmt->execute();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ // print_r($stmt->fetchAll()  以列名为索引的数组

print_r($row);

}

关于fetch的参数取值:

PDO::FETCH_ASSOC      从结果集中获取以列名为索引的关联数组。

PDO::FETCH_NUM        从结果集中获取一个以列在行中的数值偏移量为索引的值数组。

PDO::FETCH_BOTH       这是默认值,包含上面两种数组。

PDO::FETCH_OBJ        从结果集当前行的记录中获取其属性对应各个列名的一个对象。

PDO::FETCH_BOUND  使fetch()返回TRUE,并将获取的列赋给在bindParm()方法中指 定的相应变量。

PDO::FETCH_LAZY      创建关联数组和索引数组,以及包含列属性的一个对象,从而可以在这三种接口中任选一种。

21.ThinkPHP架构

22.一些有用的函数

a.trigger_error("输出信息", E_USER_ERROR);触发fatal错误,并退出程序执行

b.exit(0); 退出当前进程

c.$pid = pcntl_fork(); 创建子进程,需要pcntl模块

23.php的模块安装方法

a.下载需要安装的源码,编译生成.so或.dll

b.将动态库复制到php安装目录下的ext目录中

c.修改安装目录下的php.ini配置文件,在[php]字段中添加 extension=***.so

e.php -m |grep *** 查看模块是否安装成功

时间: 2024-10-10 05:47:05

PHP技术基础的相关文章

49 Linux操作系统原理、虚拟化技术基础原理

04 虚拟化技术基础原理 一.配置虚拟化网络 1.编辑配置文件 #关闭NetworkManager [[email protected] ~]# service NetworkManager stop [[email protected] ~]# chkconfig NetworkManager off    [[email protected] ~]# chkconfig --list NetworkManager NetworkManager  0:关闭  1:关闭  2:关闭  3:关闭

html技术基础

1.如何动态修改下拉列表的默认选中项 两种方法,第一种嵌入java代码:原理是首先获取需要选中项,然后用java代码控制那个标签内需要添加selected,其中Wish是放在request中的一个对象,仅此而已 <select name="wish.visible"> <%int visible=((Wish)request.getAttribute("wish")).getVisible(); %> <option value=&qu

加密和解密技术基础与OpenSSL

加密和解密技术基础与OpenSSL 加密和解密技术基础(01) 1.了解Linux  service  and  securityOpenSSL:为网络通信提供安全及数据完整性的一种安全协议 2.一般都是C/S通信,此种通信客户端有什么特性?服务端有什么特性呢?(1)两台主机上的通信方式?主机通信实际是进程间通信.通信方式:socket (套接字)ip:port          客户端cip:port<-->服务器端 scip:port(2)如何让客户知道自己的主机和端口呢?把某些众所周知的

《C#语言和数据库技术基础》单词必备

<C#语言和数据库技术基础> 第一章1..NET Framework   框架2.sharp            尖锐3.application      应用程序4.developer        开发者5.network          网络6.build            建造,建筑7.console          控制台8.debug            调试9.namespace        命名空间10.project         项目11.solution 

微信公众号开发【技术基础】(三):百度应用引擎BAE的使用与应用部署

百度应用引擎(BAE)是百度推出的网络应用开发平台,开发者使用BAE不需要进行服务器的配置.维护等繁琐的工作,也不需要进行域名的申请.备案等工作,而只需要上传自己的WEB应用即可在公网上访问.使用及部署应用的步骤如下: 1.注册百度账号,并在百度云官网注册.审核成为开发者,还需要进行身份证实名认证才能申请BAE,实名认证审核大概需要2.3个工作日(以上步骤略,见官网介绍). 百度云首页:https://cloud.baidu.com/ 2.注册.审核通过之后,登录https://cloud.ba

JNI技术基础(2)——从零开始编写JNI代码

书接上文: <JNI技术基础(1)——从零开始编写JNI代码> 2.编译源程序HelloWorld.java并生成HelloWorld.class 3.生成头文件HelloWorld.h 在Linux控制台输入命令:javah –jni HelloWorld 生成HelloWorld.h头文件 //HelloWorld.h /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header

微信公众号开发技术基础(二):外网映射工具ngrok的简介和使用

本文结构:(一)用法(二)示例(三)qydev ngrok的下载链接及相关网站 微信公众号开发的时候,微信服务器是需要访问我们的一个公网服务器地址的,但我们又是在本地调试自己的程序的,那怎样让微信服务器能访问到我们本地的服务器呢?那就需要用外网映射工具,将本地IP映射成公网IP,这样就能在公网上访问本地服务了,这里使用ngrok.ngrok原版程序的服务器是在国外的,访问速度极慢或者干脆访问不了,所以这里提供一个服务器搭建在国内的基于ngrok的一个软件:qydev,百度网盘下载链接见文章结尾.

软件开发技术基础复习要点

软件开发技术基础复习要点 1.生存周期: 指一个软件从提出开发要求开始,经过需求分析.设计.制造.调试.使用.维护,直到软件产品被淘汰为止的整个过程. 2.简述软件工程的基本原理: 用分阶段的生命周期计划严格管理: 坚持进行阶段评审: 实行严格的产品控制: 采纳现代程序设计技术: 结果应该能清楚地审查: 开发小组应小而精: 承认不断改进软件工程实践的必要性. 3.简述产生软件危机的原因和解决办法: 原因:开发软件所需的高成本与软件产品的低质量之间存在尖锐的矛盾,致使软件开发陷入循环之中,即研制软

加密解密技术基础、PKI及创建私有CA

加密解密技术基础.PKI及创建私有CA 一.背景 随着互联网的快速发展,整个互联网中涌入了大量的用户,正所谓林子大了什么鸟都有,随之而来的就是数据的安全性得不到保障:因此就有了对数据的加密及解密. 二.安全的目标 1.目标: 信息加密的目的是为了确保所传输的信息具有保密性,不被其他人所劫持后篡改信息:如果被篡改后接收方也应该能知道,而且也应该确保没被劫持的信息接收方可以读取. 2.数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡改. (2)

linux关于加密解密技术基础、KPI及创建私有CA

linux加密和解密技术基础.KPI及创建私有CA 一.加密方式分为:1.对称加密:加密和解密使用同一个密钥:      对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,在对称加密算法中常用的算法有:DES. 3DES.TDEA.AES.    Blowfish.Twofish          IDE.ARC6.CAST5等.    特性:      1.加密.解密使用同一个密钥:      2.强原始数据分割成固定大小的块,逐个进行加密