php语言基础之函数

2024-05-16

php语言基础之函数(精选11篇)

php语言基础之函数 第1篇

MySQL目录

安装完毕后,MySQL会自带一个客户端工具

双击运行,输入密码即可访问数据库

在mysql/bin目录中

在任务管理器中,可以看到MySQL客户端和服务器的服务

加载PHP中的扩展

在php.ini中,设置PHP扩展所在的文件夹。

测试

在php.ini中开启相应的扩展

保存,并重启服务器

更改apache虚拟目录

在httpd.conf配置文件中

测试

更改虚拟的目录的权限

Allow from all Options Indexes

设置访问权限

例题

1、Order allow,deny Allow from all //全部允许

例题2 Order allow,deny Allow from all Deny from all //全部拒绝

例题3 Order allow,deny Deny from all Allow from all //全部拒绝

例题4 Order deny, allow Allow from 192.168.101.50 Deny from 192.168 //拒绝192.168开头的IP地址(192.168.101.50除外)

例题5 Order deny, allow

Allow from 192.168.101.50 Deny from all //允许192.168.101.50 例题6 Order allow,deny Allow from 192.168 Deny from 192.168.101.50 //只允许192.168开头的IP,192.168.101.50除外

更改默认首页

更改端口

语法:listen 端口号

如果端口号不是80,在访问的时候必须带上端口号

php语言基础之函数 第2篇

PHP中的字符串操作功能是比较多的,重要的有以下这些:

(1)echo,print,printf,sprintf

前两个函数是输出字符串.字符串中如果有变量名则被替换成其值.

后两个函数类似于C的同名函数.

(2)strchr,strlen,strtok,strrchr,strrev,strstr,strtolower,

strtoupper,substr,ucfirst

这些是常用的字符串操作函数,有些和C中的同名函数意义完全一致.

strrev是把一个字符串翻转.

strtolower和strtoupper的意思应该不用解释了.

ucfirst是把字符串的第一个字符变成大写.

substr是返回字符串的一个子串,用法是:substr(字符串,头,长度).

头位置是从0算起的.如果是负数,则是从尾部向前数的意思.

(3)Chr,Ord

类似于C的同名函数.

(4)explode,implode,join

这些是和数组有关的函数.

explode(字符串,分割符)返回一个将字符串在分割符处分开所产生的数组.

implode(数组,分割符)返回一个将数组各元素之间插上分割符而成的字符串.

join与implode意义相同.

(5)Chop

去掉字符串尾部的空白.

(6)htmlspecialchars

将字符串中的HTML特殊字符换成它们的名字,例如“<”变成“<”.

(7)nl2br

在字符串中的每一个回车前面加上“

”.

(8)AddSlashes,StripSlashes

分别给字符串中需要加上“”才能用于数据库查询的字符加上和去掉“”.

(9)parse_str

将“name1=value1&name2=value2&...”类型的字符串分析成一些变量.

例如:

parse_str(“a=1&b=2”);

生成$a与$b两个变量,值分别为1,2.

如果有两对名字/值的名字部分相同,则后一个的值覆盖前一个的.

如果这两对的名字尾部都有“[]”,例如“a[]=1&a[]=2”,则生成数组$a,两个元素分别为1,2

浅析二级C语言之函数调用的格式 第3篇

1.1 填空

1.2 改错

1.3 编程

2 上机操作解析

2.1 填空

(1) 999 (2) t/10 (3) x

2.2 改错

(1) void fun (long s, long*t) (2) while (s>0)

2.3 编程

3 知识点详析

函数调用的格式:

函数调用就是使用已经定义了的函数, 通常通过对函数的调用来执行函数体, 当函数被调用时, 函数对应的程序代码才开始执行, 才能实现相应的函数功能。其过程与其他语言的子程序调用相似。函数调用的一般形式为:

函数名 (实参列表)

实参列表中的参数可以是常数、变量或其他构造类型数据及表达式。各实际参数之间用逗号分隔。实参与形参按顺序对应, 一一传递数据。

对无参数函数调用时则无实际参数表。其格式为:

1.函数名 ()

2.圆括号“ () ”不能省略。

参考文献

[1]路瑾铭.全国计算机等级考试过关宝典系列——教程 (二级C语言) .2011 (9)

PHP网站制作之我见 第4篇

关键词:PHP;脚本语言;数据库;网站制作

中图分类号:TP393 文献标识码:A 文章编号:1674-7712 (2013) 12-0000-01

一、PHP简介

PHP的英文全程是”HypertextPreprocessor”我们通常翻译为超文本预处理器。是一种最早适用于开发源代码平台的一种语言,它编码形式灵活,可以于短时间上手,和C语言等语言有相似之处,便于学习。曾经出现过各种版本,现在使用一般选用5.0以上版本。这里也提出实际操作过程中的建议,不要盲目追求最新的版本,真正的应用要求的是脚本语言使用便捷,提供服务完善,漏洞相对少相对了解。这样才适合实际的网站编程使用。PHP具有许多有点,首先PHP是一种跨平台性脚本,可移植性非常优越。这里指的跨平台指的是它不仅仅可以适用于Windows系列操作系统的平台,同时适用于UNIX系列的操作系统平台,不需重新编码就可以直接使用。而早期和PHP并驾齐驱的ASP就存在这个致命的弱点,移植性差。(当然随着技术发展,在ASP.NET系列也解决了这个问题)而且PHP代码执行效率高,使得网站浏览时的速度得以提升,这也是PHP制作网站的一个明显优势。再进一步说PHP具有代码免费复制、浏览的特点,不需要向PHP公司支付任何费用,这使得PHP编程脚本语言发展的非常快。最后一点PHP具有强大的数据库支持,比如Oracle、SQL、DEBASE、MYSQL等数据库都支持PHP编程,尤其是MYSQL数据库,更是为PHP量身设计的。

二、PHP网站编程实际使用心得

(一)常用应用范围

也许是巧合,在当今网站制作中,南方城市使用PHP相对较多,北方城市相对较少,利用PHP实现网站变成,首先可以利用PHP里面涵盖了HTML语言,允许HTML语言的代码在PHP代码中进行使用。所以在实际应用中,利用简单的HTML语言实现一些外观效果也是常常采用的。而且PHP并不和高级语言变成矛盾,比如使用VC、VB这些高级语言编程,并不影响PHP的使用,所以初学者在使用的时候也不会弄混思路。

(二)PHP和数据库的配合

通常制作动态网站的时候实现对数据库访问,进行相应的增删改查等数据库操作时,选用直接在PHP脚本中使用PHP代码实现操作是可行的,尤其是MYSQL数据库,因此要使用好PHP必须要熟练掌握PHP对MYSQL的数据库操作语句。通常的操作流程是,首先要连接数据库mysql_connect("地址","mysql_user","密码"),这里实现的是使用IP地址,来和数据库建立相应的连接。然后使用mysql_select_db语句去选择你需要的MySQL中的数据库文件。选择好数据库,一般要使用mysql_query语句进行简单的数据查询,来确认连接是否正确,是否和预想的查询结果相同。接下来就可以进行你所需要的数据库操作了,比如数据插入等等。假设对应在论坛上,就可以是新用户发言的储存。

三、网站建设流程

使用PHP制作网站也有相应的流程,不能盲目进行变成。首先要确定网站的主题,也就是要制作那种网站,是个人网站、网上销售类网站、旅游类网站等等,换句话说要确定用户或者自己的需求是什么,想要制作什么。在主题确定之后,就要进行对网站首页进行规划,包括网站的主题风格,相关选择有很多比如民族特色、古韵故香、现代流行等等。接着就需要划分具体栏目,这跟实际编程联系密切。涉及到你编程时页面的设置、字体的大小、颜色与背景的铺设。表面看与编程关系不大,实际是息息相关的。一般来说每个栏目都要对应相对的下一级分网页。在这些规划完毕之后,就可以进行初步的PHP编程过程了,编程实现网站效果,栏目划分、数据库动态连接以实现网站信息储存与网络用户的互动。这块我们在使用PHP编程时要认真关注网站的总体原则和具体的划分,可以说PHP是工程的实现,要按照设计的蓝图合理进行。当然在后期可能还要进行一些美化工具来进行网站美化工作,并且为网站设计一个独特的富有特色LOGO,这样才是完成了网站的具体建设。

四、结束语

PHP脚本语言,出现时间较早。具有自身的特色和优势,适用于制作各种类型的网站,可以和各种数据库配合工作,尤其是和MYSQL数据库的配合更为默契灵活。能够满足用户的全面需求。网站建设中利用PHP脚本实现动态网站的制作,是理想的选择。

参考文献:

[1]顾文兵,顾红菊.利用SERV-U实现学生个人网站[J].教育信息化,2005,17.

[2]张旭东,孙淑英.制作个人网站应遵循的几点原则[J].新疆职业大学学报,2005,02.

[3]李杰.《互联网上个人网站的建立》教学设计[J].中国现代教育装备,2007,01.

[4]韩宝玉,沙继东.浅谈个人网站设计[J].才智,2011,02.

[5]穆肇南.浅析教师个人网站建立及应用[J].贵州商业高等专科学校学报,2005,01.

[6]洪宝光.个人网站DIY全接触之首页篇——设计网页封面[J].信息技术教育,2003,04.

[7]侯秀峰.浅谈个人网站的建立[J].集宁师专学报,2004,03.

[8]韩旭,王瑞.个人网站和计算机文化基础课教学[J].江西广播电视大学学报,2007,04.

[9]王莉莉.创建教师个人教学网站(博客)丰富校园网络信息资源[J].网络财富,2009,08.

不得不防的PHP危险函数 第5篇

用PHP语言建设网站,安全问题是每个PHP程序员必须考虑的问题,在PHP运用的过程中一些PHP危险函数却不得不防,南京PHP培训小编把PHP危险函数列出来,供大家参考。

phpinfo()功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。危险等级:中 passthru()功能描述:允许执行一个外部程序并回显输出,类似于 exec()。危险等级:高 exec()功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。危险等级:高 system()功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。危险等级:高 chroot()功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式 PHP 时才能工作,且该函数不适用于 Windows 系统。危险等级:高 scandir()功能描述:列出指定路径中的文件和目录。危险等级:中 chgrp()功能描述:改变文件或目录所属的用户组。危险等级:高 chown()功能描述:改变文件或目录的所有者。危险等级:高 shell_exec()功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。危险等级:高 proc_open()功能描述:执行一个命令并打开文件指针用于读取以及写入。危险等级:高 proc_get_status()功能描述:获取使用 proc_open()所打开进程的信息。危险等级:高 error_log()功能描述:将错误信息发送到指定位置(文件)。

安全备注:在某些版本的 PHP 中,可使用 error_log()绕过 PHP safe mode,执行任意命令。危险等级:低 ini_alter()功能描述:是 ini_set()函数的一个别名函数,功能与 ini_set()相同。具体参见 ini_set()。危险等级:高 ini_set()功能描述:可用于修改、设置 PHP 环境配置参数。危险等级:高 ini_restore()功能描述:可用于恢复 PHP 环境配置参数到其初始值。危险等级:高 dl()功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。危险等级:高 pfsockopen()功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。危险等级:高 syslog()功能描述:可调用 UNIX 系统的系统层 syslog()函数。危险等级:中 readlink()功能描述:返回符号连接指向的目标文件内容。危险等级:中 symlink()功能描述:在 UNIX 系统中建立一个符号链接。危险等级:高 popen()功能描述:可通过 popen()的参数传递一条命令,并对 popen()所打开的文件进行执行。

危险等级:高

stream_socket_server()功能描述:建立一个 Internet 或 UNIX 服务器连接。危险等级:中 putenv()功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数

php语言基础之函数 第6篇

PHP函数 1.概念

将一段常用的功能代码,进行封装,然后起个名字,叫”函数” 使用函数,可以减少我们的工作量。对于后期的项目维护,十分方便。2.函数定义格式

Function functionName(形参1,形参2,形参3......){

函数的功能代码

[return 参数r] } 函数语法格式说明:

Function是系统关键字,不分大小写。

functionName是自定义的函数名称。函数名的命名规则与变量一样,只是不加$符号。

()定义函数时的参数,该参数又称为”形参”。

形式参数:主要用来接收调用函数者,传递过来的数据。

形参可以是多个,多个形参之间用逗号隔开,也可以没有形参

形参其实就是一个变量的名称,主要用来临时存储数据的。{}是函数的功能代码。Return语句:

向谁返回内容?谁调用了该函数,就向谁返回。

返回什么内容?该内容的类型不限制,可以是任何数据类型

黑马程序员济南中心 编著

Return语句,一旦执行,函数将中止。也就是return语句之后的函数代码不再执行。

Return 语句返回一个值,并退出函数。

3.函数调用

函数定义是不会自动执行的。函数必须要经过调用,才能看到结果 调用函数和定义函数不分顺序。4.函数参数

a)形式参数(形参):形参主要用来接收调用函数传递过来的数据。

i.形参一般是变量,不能是具体的值

ii.形参只能在函数内部使用

b)实际参数(实参):向定义函数传递的数据

i.实参可以是具体值,也可以是一个变量

c)形参和实参的个数,一般情况下必须一致 Function showInfo($a){ Echo “OK”;} $a = 100;showInfo($a);函数参数传递 1.值传递(拷贝传值)将一个变量的值,”拷贝”一份,传给形参

黑马程序员济南中心 编著

在函数内部,对形参进行了修改,而函数外的这个变量不会改变 函数内的形参,与函数外的实参,是相互独立的,没有任何联系的

在PHP中,默认”值传递”的有:字符型、整型、浮点型、布尔型、数组、NULL

2.引用传递

将一个变量的地址传给形参,即形参与变量指向的是”同一物”.变量和参数之间是相互联系,修改一个,另一个会跟着变。

参数在使用引用传递时,需要在”形参”前加一个”&”符号。”实参”前不能添加。

默认引用传地址:资源和对象

黑马程序员济南中心 编著

3.默认参数

PHP支持默认参数。

当实参格式少于形参个数时,那么少的那个实参可以用末日的形参来代替

匿名函数

1.概念

没有名字的函数就是匿名函数,它不能单独定义也不能单独调用 匿名函数一般用来给其他变量赋值的。

黑马程序员济南中心 编著

2.匿名函数的两种用法

i.将匿名函数当成一个数据,赋给其他变量

ii.将匿名函数作为函数的参数来使用

变量作用域

变量作用域:就是变量生效的范围

在PHP中三种变量作用域:全局变量、局部变量、超全局变量。1.全局变量

全局变量:在函数外部定义的变量,称为”全局变量”。

黑马程序员济南中心 编著

全局变量,在网页执行完毕,就消失了。在JS中,全局变量,可以直接在函数内部来使用 在PHP中,全局变量不能直接在函数内部使用 2.局部变量

局部变量:在函数内部定义的变量,称为”局部变量”。局部变量,只能在函数内部来使用 局部变量,在函数执行完毕后就消失了。3.在局部作用域中访问全局变量---global关键字

Global关键字,只能在函数内部来使用

不能在使用global关键字时,直接给变量赋值。只能是先声明为全局,再赋值。

$GLOBALS超全局数组

“超全局数组变量”可以在网页的任何地方使用,包括函数内部和函数外部。$GLOBALS超全局数组中包含的内容有:$_GET、$_POST、$_COOKIE、$_FILES

php语言基础之函数 第7篇

最近在做python的web开发(原谅我的多变,好东西总想都学着,。。node.js也是),不过过程中总遇到些问题,不管是web.py还是django,开发起来确实没用php方便,毕竟存在的时间比较短,很多不完善的地方。

比如我在调试php中最常用的函数,var_dump,在python里找不到合适的替代函数。php中var_dump是一个特别有用的函数,它可以输出任何变量的值,不管你是一个对象还是一个数组,或者只是一个数。它总能用友好的方式输出,我调试的时候经常会需要看某位置的变量信息,调用它就很方便:

但是开发python的时候就没有太好的替代方案。

之前想到repr,但这个函数只是调用了对象中的__str__,和直接print obj没啥区别。print是打印它,而repr是将其作为值返回。如果对象所属的类没有定义__str__这个函数,那么返回的就会是难看的一串字符。

后来又想到了vars 函数,vars函数是python的内建函数,专门用来输出一个对象的内部信息。但这个对象所属的类中必须有__dict__函数。一般的类都有这个dict,但像[]和{}等对象就不存在这个dict,这样调用vars函数就会抛出一个异常:

代码如下:

Traceback (most recent call last):

File “”, line 1, in

TypeError: vars argument must have __dict__ attribute

所以后来几经寻找,找到一个个比较好,功能能够与var_dump类似的函数如下:

代码如下:

def dump(obj):

‘‘‘return a printable representation of an object for debugging‘‘‘

newobj=obj

if ‘__dict__‘ in dir(obj):

newobj=obj.__dict__

if ‘ object at ‘ in str(obj) and not newobj.has_key(‘__type__‘):

newobj[‘__type__‘]=str(obj)

for attr in newobj:

newobj[attr]=dump(newobj[attr])

return newobj

这是使用方式:

代码如下:

class stdClass(object): pass

bj=stdClass()

obj.int=1

obj.tup=(1,2,3,4)

obj.dict={‘a‘:1,‘b‘:2, ‘c‘:3, ‘more‘:{‘z‘:26,‘y‘:25}}

obj.list=[1,2,3,‘a‘,‘b‘,‘c‘,[1,2,3,4]]

obj.subObj=stdClass()

obj.subObj.value=‘foobar‘

from pprint import pprint

pprint(dump(obj))

最后输出是:

代码如下:

{‘__type__‘: ‘<__main__.stdClass object at 0x2b126000b890>‘,

‘dict‘: {‘a‘: 1, ‘c‘: 3, ‘b‘: 2, ‘more‘: {‘y‘: 25, ‘z‘: 26}},

‘int‘: 1,

‘list‘: [1, 2, 3, ‘a‘, ‘b‘, ‘c‘, [1, 2, 3, 4]],

‘subObj‘: {‘__type__‘: ‘<__main__.stdClass object at 0x2b126000b8d0>‘,

‘value‘: ‘foobar‘},

‘tup‘: (1, 2, 3, 4)}

然后github有个开源的module,可以参考:github.com/sha256/python-var-dump

说一下pprint这个函数,他是一个人性化输出的函数,会将要输出的内容用程序员喜欢的方式输出在屏幕上,

php语言基础之函数 第8篇

计算机基础课程是我校的一门公共基础课, 由于开课的学生人数众多, 期末考试造成教师工作量大, 考试任务繁重, 费时费事, 基于此情况急需开发计算机基础考试系统来实现自动组卷, 自动评分, 解决目前计算机基础课考试存在的弊端。该系统实现了考试试题随机组卷, 整个考试过程更加全面客观, 计算机阅卷使考试成绩更加真实、公正, 同时大大减少了手工评卷和核分过程中的人为失误, 也更能检验课程的实践教学效果。

本文主要研究开发基于php技术的计算机基础考试系统, 该系统主要针对计算机选择题的考试进行开发, 为计算机基础期末考试方案的制定提供了新的解决思路, 省时省事, 因此开发本系统具有深远的现实意义和实用价值。

考试有两个主要功能, 从学生的角度来看, 它是对学生的学习情况进行考查的一种方式, 从教师的角度看, 它是教师对教学工作进行分析的一个依据。基于计算机基础课是我校一门公共基础课, 开设的系部多, 开课的班级众多, 在期末考试的时候, 如何考, 怎么考, 成为一个难题。

目前考试采用的考试形式是教师统一命题, 考试时把试题传输到FTP上供学生下载, 这种机制的弊端是费时费事, 每到期末考试教师都要重新出题, 这样浪费很大的人力投入, 在考试过程中, 由于学生试题统一, 容易导致学生作弊, 也有个别学生不会下载导致时间不够用, 在整个过程中, 人为因素的影响难免会导致一些错误的出现, 例如在考试结束的时候, 学生提交试卷有的不写学号, 有的忘记保存交空白卷, 基于这种考试形式费时费事, 漏洞百出。因此有必要对现有的期末考试形式进行改进改革。

通过开发计算机基础考试系统, 根据试题库的内容, 随机抽取试题, 生成试卷, 这样大大的减少了教师在考试前的大量准备工作, 减少了人力的投入。在考试过程中, 由于试题是随机抽取的, 可以杜绝学生的考试作弊行为。考试结束后, 通过该系统自动判卷, 统计分数, 排名等一系列考后工作。综上所述, 这种考试形式能有效的保证考试的相对公平。

此系统除了用于学校的计算机基础课程的期末考试外, 还可以用于平时小测验, 也可以应用于其它科目的考试。因此开发一个简单实用、功能完整的计算机基础考试系统, 具有深远的理论意义和应用价值。

2 系统模块图

系统分为前台和后台两大块。

2.1 考题信息添加模块

因为本系统主要是针对单选题的添加, 但是单选题的选项一般是四项, 添加题目时, 主要是添加单选题内容, 单选题答案, 单选题正确答案。主要解决的问题是:单选题添加到数据库中, 单选题答案这个字段的值是怎么存放的, 因为在前台考生进入考场开始考试的时候, 单选题的答案是在表单里以单选按钮的形式呈现给考生, 所以怎么把数据库里存放单选题答案的这个字段作为字符串分割成数组的形式, 逐一读取出来是要考虑的, 作者采用在后台添加考题答案的时候把四个选项以分隔符*来分隔。如图3所示。

2.2 考试计时

显示时间如图4所示。

剩余时间如图5所示。

2.3 自动评分

在自动评分模块中, 会根据考生的成绩, 以及错误的选题来给出该生哪方面知识相对欠缺, 需要在哪些章节哪些知识点进行加强练习

3 数据库设计

数据库中需存储考题表和考生表, 对于考题的设计看似简单, 其实包含的元素却很复杂。题库的设计在参照我校历年考题的基础上, 主要分析如下:能准确、清晰地反映题目的内容;题型应以选择题为主, 适当考虑主观题型;便于分类管理和使用。数据库中考题表结构如图6所示。

数据库中考生表结构如图7所示。

4 结束语

该系统使教师从重复、低效的劳动中解脱出来, 考生也可以在第一时间快速地知道自己的成绩。系统降低的人力、物力的投入, 降低了考试成本。另外本系统还有很多方面有待完善, 有待改进。

参考文献

[1]戴红芳, 王加年.基于PHP在线考试系统的设计开发[J].软件导刊, 2011 (12) .

[2]施媛波.一个在线考试系统的设计与实现[J].数字技术与应用, 2010 (08) .

php语言基础之函数 第9篇

.if HookFlag==FALSE

invoke InstallHook,hDlg

.if eax!=NULL

mov HookFlag,TRUE

invoke SetDlgItemText,hDlg,IDC_HOOK,addr UnhookText

.endif

该应用程序有一个全局变量,HookFlag,它用来监视钩子的状态。如果安装来钩子它就是TRUE,否则是FALSE.当用户按下Hook按钮时,应用程序检查钩子是否已经安装。如果还没有的话,它将调用DLL中引出的函数InstallHook来安装它。注意我们把主对话框的句柄传递给了DLL,这样这个钩子DLL就可以把WM_MOUSEHOOK消息传递给正确的窗口了。当应用程序加载时,钩子DLL也同时加载。时机上当主程序一旦加载到内存中后,DLL就立即加载。DLL的入口点函数载主程序的第一条语句执行前就前执行了。所以当主程序执行时,DLL已经初始化好了。我们载入口点处放入如下代码:

.if reason==DLL_PROCESS_ATTACH

push hInst

pop hInstance

.endif

该段代码把DLL自己的实例句柄放到一个全局变量中保存。由于入口点函数是在所有函数调用前被执行的,所以hInstance总是有效的。我们把该变量放到。data中,使得每一个进程都有自己一个该变量的值。因为当鼠标光标停在一个窗口上时,钩子DLL被映射进进程的地址空间。加入在DLL缺省加载的地址处已经加载其它的DLL,那钩子DLL将要被映射到其他的地址。hInstance将被更新成其它的值。当用户按下Unhook再按下Hook时,SetWindowsHookEx将被再次调用。这一次,它将把新的地址作为实例句柄。而在例子中这是错误的,DLL装载的地址并没有变。这个钩子将变成一个局部的,您只能钩挂发生在您窗口中的鼠标事件,这是很难让人满意的。

InstallHook proc hwnd:DWORD

push hwnd

pop hWnd

invoke SetWindowsHookEx,WH_MOUSE,addr MouseProc,hInstance,NULL

mov hHook,eax

ret

InstallHook endp

InstallHook 函数非常简单。它把传递过来的窗口句柄保存在hWnd中以备后用。接着调用SetWindowsHookEx函数来安装一个鼠标钩子。该函数的返回值放在全局变量hHook中,将来在UnhookWindowsHookEx中还要使用。在调用SetWindowsHookEx后,鼠标钩子就开始工作了。无论什么时候发生了鼠标事件,MouseProc函数都将被调用:

MouseProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD

invoke CallNextHookEx,hHook,nCode,wParam,lParam

mov edx,lParam

assume edx:PTR MOUSEHOOKSTRUCT

invoke WindowFromPoint,[edx].pt.x,[edx].pt.y

invoke PostMessage,hWnd,WM_MOUSEHOOK,eax,0

assume edx:nothing

xor eax,eax

ret

MouseProc endp

钩子函数首先调用CallNextHookEx函数让其它的钩子处理该鼠标事件,

然后,调用WindowFromPoint函数来得到给定屏幕坐标位置处的窗口句柄。注意:我们用lParam指向的MOUSEHOOKSTRUCT型结构体变量中的POINT成员变量作为当前的鼠标位置。在我们调用PostMessage函数把WM_MOUSEHOOK消息发送到主程序。您必须记住的一件事是:在钩子函数中不要使用SendMessage函数,它会引起死锁。MOUSEHOOKSTRUCT的定义如下:

MOUSEHOOKSTRUCT STRUCT DWORD

pt POINT

hwnd DWORD ?

wHitTestCode DWORD ?

dwExtraInfo DWORD ?

MOUSEHOOKSTRUCT ENDS

pt 是当前鼠标所在的屏幕位置。

hwnd 是将接收鼠标消息的窗口的句柄。通常它是鼠标所在处的窗口,但是如果窗口调用了SetCapture,鼠标的输入将到向到这个窗口。因我们不用该成员变量而是用WindowFromPoint函数。

wHitTestCode 指定hit-test值,该值给出了更多的鼠标位置值。它指定了鼠标在窗口的那个部位。该值的完全列表,请参考WIN32 API 指南中的WM_NCHITTEST消息。

dwExtraInfo 该值包含了相关的信息。一般该值由mouse_event函数设定,可以调用GetMessageExtraInfo来获得。

当主窗口接收到WM_MOUSEHOOK 消息时,它用wParam参数中的窗口句柄来查询窗口的消息。

.elseif uMsg==WM_MOUSEHOOK

invoke GetDlgItemText,hDlg,IDC_HANDLE,addr buffer1,128

invoke wsprintf,addr buffer,addr template,wParam

invoke lstrcmpi,addr buffer,addr buffer1

.if eax!=0

invoke SetDlgItemText,hDlg,IDC_HANDLE,addr buffer

.endif

invoke GetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer1,128

invoke GetClassName,wParam,addr buffer,128

invoke lstrcmpi,addr buffer,addr buffer1

.if eax!=0

invoke SetDlgItemText,hDlg,IDC_CLASSNAME,addr buffer

.endif

invoke GetDlgItemText,hDlg,IDC_WNDPROC,addr buffer1,128

invoke GetClassLong,wParam,GCL_WNDPROC

invoke wsprintf,addr buffer,addr template,eax

invoke lstrcmpi,addr buffer,addr buffer1

.if eax!=0

invoke SetDlgItemText,hDlg,IDC_WNDPROC,addr buffer

.endif

为了避免重绘文本时的抖动,我们把已经在编辑空间中线时的文本和我们将要显示的对比。如果相同,就可以忽略掉。得到类名调用GetClassName,得到窗口过程调用GetClassLong并传入GCL_WNDPROC标志,然后把它们格式化成文本串并放到相关的编辑空间中去。

invoke UninstallHook

invoke SetDlgItemText,hDlg,IDC_HOOK,addr HookText

mov HookFlag,FALSE

invoke SetDlgItemText,hDlg,IDC_CLASSNAME,NULL

invoke SetDlgItemText,hDlg,IDC_HANDLE,NULL

invoke SetDlgItemText,hDlg,IDC_WNDPROC,NULL

php语言基础之函数 第10篇

与其让服务器因负载过高而宕掉,不如在系统负载很高时主动die掉一个脚本,sys_getloadavg()就是用来帮你实现这个功能的。不过很遗憾,该函数在windows下无效。2.pack()Pack()能将md5()返回的32位16进制字符串转换为16位的二进制字符串,可以节省存储空间。

3.cal_days_in_month()cal_days_in_month()能够返回指定月份共有多少天。4._()WordPress开发者经常能见到这个函数,还有_e()。这两个函数功能相同,与gettext()函数结合使用,能实现网站的多语言化。具体可参见PHP手册的相关部分介绍。5.get_browser()在发送页面前先看看用户的浏览器都能做些什么是不是挺好?get_browser()能获得用户的浏览器类型,以及浏览器支持的功能,不过首先你需要一个php_browscap.ini文件,用来给函数做参考文件。

要注意,该函数对浏览器功能的判断是基于该类浏览器的一般特性的。例如,如果用户关闭了浏览器对

JAVAScript的支持,函数无法得知这一点。但是在判断浏览器类型和OS平台方面,该函数还是很准确的。

6.debug_print_backtrace()这是一个调试用的函数,能帮助你发现代码中的逻辑错误。要理解这个函数,还是直接看个例子吧:

$a = 0;function iterate(){ global $a;if($a < 10)recur();echo $a.“, “;} function recur(){ global $a;$a++;// how did I get here? echo “ ”;debug_print_backtrace();if($a < 10)iterate();} iterate();# OUTPUT: #0 recur()called at [C:htdocsphp_stuffindex.php:8] #1 iterate()called at [C:htdocsphp_stuffindex.php:25] #0 recur()called at [C:htdocsphp_stuffindex.php:8] #1 iterate()called at [C:htdocsphp_stuffindex.php:21] #2 recur()called at [C:htdocsphp_stuffindex.php:8] #3 iterate()called at [C:htdocsphp_stuffindex.php:25] #0 r

ecur()called at [C:htdocsphp_stuffindex.php:8] #1 iterate()called at [C:htdocsphp_stuffindex.php:21] #2 recur()called at [C:htdocsphp_stuffindex.php:8] #3 iterate()called at [C:htdocsphp_stuffindex.php:21] #4 recur()called at [C:htdocsphp_stuffindex.php:8] #5 iterate()called at [C:htdocsphp_stuffindex.php:25]

7.metaphone()这个函数返回单词的metaphone值,相同读音的单词具有相同的metaphone值,也就是说这个函数可以帮你判断两个单词的读音是否相同。不过对中文就无效了

8.natsort()

natsort()能将一个数组以自然排序法进行排列,直接看个例子吧:

$items = array(“100 apples”, “5 apples”, “110 apples”, “55 apples”);// normal sorting: sort($items);print_r($items);# Outputs: # Array #(# [0] => 100 apples # [1] => 110 apples # [2] => 5 apples # [3] => 55 apples #)natsort($items);print_r($items);# Outputs: # Array #(# [2] => 5 apples # [3] => 55 apples # [0] => 100 apples # [1] => 110 apples #)

9.levenshtein()

Levenshtein()告诉你两个单词之间的“距离”。它告诉你如果想把一个单词变成另一个单词,需要插入、替换和删除多少字母。

看个例子吧:

$dictionary = array(“php”, “Javascript”, “Css”);$word = “japhp”;$best_match = $dictionary[0];$match_value = levenshtein($dictionary[0], $

word);foreach($dictionary as $w){ $value = levenshtein($word, $w);if($value < $match_value){ $best_match = $w;$match_value = $value;} } echo “Did you mean the ‘$best_match’ category?”;

10.glob()

glob()会让你觉得用opendir(), readdir()和closedir()来寻找文件非常蠢。

php语言基础之函数 第11篇

首先你需要先到从glob.com.au/sendmail/下载sendmail.zip文件,点此可以直接下载噢,然后把它解压到如D:/php/sendmail/目录下。

然后打开php.ini文件,找到下面这段代码

代码如下复制代码

[mail function]

; For Win32 only.

SMTP = localhost

smtp_port = 25

; For Win32 only.

;sendmail_from = me@example.com

; For Unix only. You may supply arguments as well (default: “sendmail -t -i”).

; sendmail_path = “”

; Force the addition of the specified parameters to be passed as extra parameters

; to the sendmail binary. These parameters will always replace the value of

; the 5th parameter to mail, even in safe mode.

;mail.force_extra_parameters =

默认情况下是以本机做为邮件服务器,这里我们需要借用sendmail来发送邮件,用sendmail来配置如用qq、163的邮箱来发送(一般都是以这种方式)所以我们需要把所有的选项都注销,即把SMTP = localhost和smtp_port = 25前面加上“;”然后把sendmai_path=“”前面的“;”删掉,改为sendmai_path=“d:/php/sendmail/sendmail.exe -t”,改完后的即是

代码如下复制代码

[mail function]

; For Win32 only.

;SMTP = localhost

;smtp_port = 25

; For Win32 only.

;sendmail_from = me@example.com

; For Unix only. You may supply arguments as well (default: “sendmail -t -i”).

sendmail_path = “d:/php/sendmail/sendmail.exe -t”

; Force the addition of the specified parameters to be passed as extra parameters

; to the sendmail binary. These parameters will always replace the value of

; the 5th parameter to mail(), even in safe mode.

;mail.force_extra_parameters =

注意以上只需要开启sendmail_path即可,然后保存

接着修改sendmail目录下的sendmail.ini文件,主要填的内容有以下几项

代码如下复制代码

smtp_server=smtp服务器地址(如 smtp.ym.163.com)

auth_username=邮箱登录名(如 info@xxxx.com)

auth_password=邮箱密码(如 xxxxxx)

force_sender=发件人地址全写(如 info@xxxx.com)

另外还有一项

代码如下复制代码

; auto = use SSL for port 465, otherwise try to use TLS

把前面的“;”删除,即开启SSL安全登录选项即可

以上四项正确填写修改完成后保存,然后重启IIS即可正常使用,现在很高兴地测试我的wordpress博客了

现在开始调试wordpress博客,但发现服务器无法发送邮件,sendmail已经安装,但是继续提示邮件发送不成功,

分析了很久,总算找到了原因

第一步:安装sendmail服务

下载sendmail.RAR存放至php目录下的sendmail目录,结构如下:

第二步、配置php.ini文件

代码如下复制代码sendmail_path =”D:/php/sendmail/sendmail.exe -t”

盘符和位置根据sendmail.exe文件位置确定

第三步、配置sendemail.ini

代码如下复制代码

smtp_server=smtp.sina.com.cn

smtp_port=25

这俩个是要求验证的时候的账号,密码

auth_username=ifbs

auth_password=XXXX

第四步、给予cmd.exe权限

C:/WINDOWS/system32/cmd.exe 文件以users的读权限。不给予权限会出现以下错误。

Warning: mail() [function.mail]: Could not execute mail delivery program

第五步、建立mail.php文件测试结果

代码如下复制代码

$mail = “xxxx@sina.com.cn”;

$subject = “Mail Test”;

$text = “This is a test mail for function mail()”;

if(mail($mail,$subject,$text)){

echo “email send success!”;

}else{

echo “email send fail!”;

}

?>

上一篇:下棋给我的启示小学作文下一篇:思念之情的古诗句