使用PHP重新实现PHP脚本引擎内置函数

 更新时间:2016年11月25日 17:41  点击:1966

// 实在无聊,突发奇想,想把PHP里面部分已经提供封装好的函数重新使用PHP实现一遍,
// 于是便有了下面的代码主要实现了PHP中部分字符串处理函数,同时实现了一些PHP中
// 没有,但是同样有作用的字符串处理函数同样的这些函数,也能够使用其他语言来实
// 现,比如用C/VBScript/Perl等等,那么你就能够有一个自己的函数库.
// 以下函数不一定能够成功运行,只是为了学习而已。
//
// 假如无非凡声明,全部是由于heiyeluren原创,要使用任何函数都请保留作者信息


// {{{ strlen()
/**
* Count string length
*
* @param string $str need count length string variable
* @return int return count result
*/
function strlen1($str)
{
if ($str == '')
return 0;

$count = 0;
while (1)
{
if ($str[$count] != NULL)
{
$count ;
continue;
}
else
break;
}
return $count;
}
// }}}


// {{{ substr()
/**
* Get sub string
*
* @param string $str need get sub string variable
* @param int $start start get sub string
* @param int $length need get string length
* @return string return sub string
*/
function substr1($str, $start, $length=0)
{
if ($str == '')
return;
if ($start > strlen($str))
return;
if (($length != NULL) && ($start > 0) && ($length > strlen($str)-$start))
return;
if (($length != NULL) && ($start < 0) && ($length > strlen($str) $start))
return;

if ($length == NULL)
$length = (strlen($str) - $start);

if ($start < 0)
{
for ($i=(strlen($str) $start); $i<(strlen($str) $start $length); $i )
{
$substr .= $str[$i];
}
}

if ($length > 0)
{
for ($i=$start; $i<($start $length); $i )
{
$substr .= $str[$i];
}
}

if ($length < 0)
{
for ($i=$start; $i<(strlen($str) $length); $i )

编写PHP,难免会出现错误。其实出现错误也不难解决,最难解决的是出现空白页面。大家想想看,若编写PHP出现错误,可以根据错误的提示来改正,倘若PHP什么也不给你显示,那岂不是让编写者困挠不以?下面,我就把我在编写PHP时总结出来的有关PHP空白页面的解决方法以及产生原因。当然,本人写PHP并不是很高手,所以假如有错误,请不惜指出。

1、动作未定义
先请大家看一看下面的代码:
[code]
<?php
$action = $_GET['id'];
if($action == '')
$action = 1;
if($action == 1) {
echo("$action's value is 1");
} else if($action == 2) {
echo("$action's value is 2");
}
?>
[/code]
这段代码大家看得很明白,就是假如$action变量为空时将它设为1,然后判定$action变量的值而做出不同的事件。当然,假如$action既不等于1,也不等于2的时候,PHP会做什么呢??

1.文件格式
首先要碰到的问题肯定是文件格式,在作web开发时,大家都是用的html或xhtml,到了wap开发时,就得用wml了.什么是wml?大家可以去查更具体的资料,我这里只是略微的提到.在我看来wml类似于xml,有非常严格的格式,在作wap页面时,都得用wml来作为显示.

wml的语法非常简单,在用php作动态输出时,一定要发送一个头信息,标明本页面是wml,而不是别的什么*ml.


header("Content-type: text/vnd.wap.wml; charset="gb2312"");
?>


这里用的字符集是gb2312,在移动的平台上是没有任何问题的,但在联通的平台上就不行了,一定得用utf-8,为了更通用,还是用utf-8更安全.即


header("Content-type: text/vnd.wap.wml; charset="utf-8"");
?>


2.编码

上面说了字符集都应采用utf-8,这是一种容纳了多国语言的字符集,一个汉字是占双字节,utf-8占了4个字节,因此其容纳的信息量更大.在手机上编写的汉字,在将页面内码转成utf-8后,以后再打开就可能是一堆乱码.因此大家在作注释时,尽可能的用英文注释,省得以后看不懂.像editplus,ultraedit等工具都可以转文件内码.

3.适配

世界各大手机厂商真是有病,开发出的手机千奇百怪,可以支持的格式也是五花八门.比如铃声,有的可以支持,16,32,48和弦,支持mid,wmv,有的不完全支持;有的支持gif,png,bmp,有的也不完全支持.这虽然是把手机的档次和成本拉开了,但却苦了作手机开发的兄弟们了.因为不可避免的要对手机所能支持的图片,铃声等多媒体信息作出一个匹配,这个匹配的处理,我们一般叫做手机适配.
要作手机适配,我们一般得有如下资料.

1)一份具体的手机适配资料表,里面应具体的说明手机所能支持的铃声,图片格式,还得有手机型号等信息
2)要正确的获取手机的UA,什么是UA,就是(user agent),实际上就是用户的手机信息.

有了上面的东东我们才能做出适配.以下给出一个我写的在wap开发中用到的类,可以用来取手机号,手机UA.

/**
* 类名: mobile
* 描述: 手机信息类
* 其他: 偶然 编写
*/
class mobile
{
/**
* 函数名称: getPhoneNumber
* 函数功能: 取手机号
* 输入参数: none
* 函数返回值: 成功返回号码,失败返回false
* 其它说明: 说明
*/
function getPhoneNumber()
{
if (isset($_SERVER['HTTP_X_NETWORK_INFO']))
{
$str1 = $_SERVER['HTTP_X_NETWORK_INFO'];
$getstr1 = preg_replace('/(.*,)(11[d])(,.*)/i','',$str1);
Return $getstr1;
}
elseif (isset($_SERVER['HTTP_X_UP_CALLING_LINE_ID']))
{
$getstr2 = $_SERVER['HTTP_X_UP_CALLING_LINE_ID'];
Return $getstr2;
}
elseif (isset($_SERVER['HTTP_X_UP_SUBNO']))
{
$str3 = $_SERVER['HTTP_X_UP_SUBNO'];
$getstr3 = preg_replace('/(.*)(11[d])(.*)/i','',$str3);
Return $getstr3;
}
elseif (isset($_SERVER['DEVICEID']))
{
Return $_SERVER['DEVICEID'];
}
else
{
Return false;
}
}

/**
* 函数名称: getHttpHeader
* 函数功能: 取头信息

Abs: 取得绝对值。
Acos: 取得反余弦值。
ada_afetch: 取得资料库的传回列。
ada_autocommit: 开关自动更动功能。
ada_close: 关闭 Adabas D 连结。
ada_commit: 更动 Adabas D 资料库。
ada_connect: 连结至 Adabas D 资料库。
ada_exec: 执行 SQL 指令。
ada_fetchrow: 取得传回一列。
ada_fieldname: 取得栏位名称。
ada_fieldtype: 取得栏位资料形态。
ada_freeresult: 释出传回资料的记忆体。
ada_numfields: 取得栏位数目。
ada_numrows: 取得传回列数目。
ada_result: 取得传回资料。
ada_resultall: 传回 HTML 表格资料。
ada_rollback: 撤消当前交易。
AddSlashes: 字串加入斜线。
apache_lookup_uri: 获得所有的 URI 相关资讯。
apache_note: 获得及设定阿帕契伺服器的请求纪录。
array: 建立一个新的阵列。
array_walk: 让使用者自订函数能处理阵列中的每一个元素。
arsort: 将阵列的值由大到小排序。
Asin: 取得反正弦值。
asort: 将阵列的值由小到大排序。
aspell_check: 检查一个单字。
aspell_check-raw: 检查一个单字,即使拼错也不改变或修正。
aspell_new: 载入一个新的字典。
aspell_suggest: 检查一个单字,并提供拼字建议。
Atan: 取得反正切值。
Atan2: 计算二数的反正切值。
base64_decode: 将 BASE64 编码字串解码。
base64_encode: 将字串以 BASE64 编码。
basename: 传回不含路径的档案字串。
base_convert: 转换数字的进位方式。
bcadd: 将二个高精确度数字相加。
bccomp: 比较二个高精确度数字。
bcdiv: 将二个高精确度数字相除。
bcmod: 取得高精确度数字的余数。
bcmul: 将二个高精确度数字相乘。
bcpow: 求一高精确度数字次方值。
bcscale: 设定程式中所有 BC 函式库的内定小数点位数。
bcsqrt: 求一高精确度数字的平方根。
bcsub: 将二个高精确度数字相减。
bin2hex: 二进位转成十六进位。
BinDec: 二进位转成十进位。
Ceil: 计算大于指定数的最小整数。
chdir: 改变目录。
checkdate: 验证日期的正确性。
checkdnsrr: 检查指定网址的 DNS 记录。
chgrp: 改变档案所属的群组。
chmod: 改变档案的属性。
Chop: 去除连续空白。
chown: 改变档案的拥有者。
Chr: 传回序数值的字元。
chunk_split: 将字串分成小段。
clearstatcache: 清除档案状态快取。
closedir: 关闭目录 handle。
closelog: 关闭系统纪录。
connection_aborted: 若连结中断则传回 true。
connection_status: 取得连线状态。
connection_timeout: 若超过 PHP 程式执行时间则传回 true。
convert_cyr_string: 转换古斯拉夫字串成其它字串。
copy: 复制档案。
Cos: 余弦计算。
count: 计算变数或阵列中的元素个数。
crypt: 将字串用 DES 编码加密。
current: 传回阵列中目前的元素。
date: 将伺服器的时间格式化。
dbase_add_record: 加入资料到 dBase 资料表。
dbase_close: 关闭 dBase 资料表。
dbase_create: 建立 dBase 资料表。
dbase_delete_record: 删除 dBase 资料表的资料。
dbase_get_record: 取得 dBase 资料表的资料。
dbase_numfields: 取得 dBase 资料表的栏位数。
dbase_numrecords: 取得 dBase 资料表的列数。
dbase_open: 开启 dBase 资料表。
dbase_pack: 清理 dBase 资料表。
dba_close: 关闭资料库。
dba_delete: 删除指定资料。

在php中计算时间差有时候是件麻烦的事!不过只要你把握了日期时间函数的用法那这些也就变的简单了:
一个简单的例子就是计算借书的天数,这需要php根据天天的日期进行计算,下面就来谈谈实现这种日期计算的几种方法:
(1) 假如有数据库就很轻易了!若是MSSQL可以使用触发器!用专门计算日期差的函数datediff()便可!
若是MYSQL那就用两个日期字段的差值计算的计算结果保存在另一个数值型字段中!用时调用便可!
(2)假如没有数据库,那就得完全用php的时间日期函数!下面主要说明之:
例:计算1998年5月3日到1999-6-5的天数:
<? $startdate=mktime("0","0","0","5","3","1998");
$enddate=mktime("0","0","0","6","5","1999");
//所得到的值为从1970-1-1到参数时间的总秒数:是整数.那么 内容来自中国站长资讯网(www.chinahtml.com)


//下面的代码就好编多了:
$days=round(($enddate-$startdate)/3600/24) ;
echo $days;
//days为得到的天数;
若mktime()中的参数缺省,那表示使用当前日期,这样便可计算从借书日期至今的天数.

[!--infotagslink--]

相关文章

  • 浅谈JavaScript的内置对象和浏览器对象

    下面小编就为大家带来一篇浅谈JavaScript的内置对象和浏览器对象。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-06-12
  • SpringBoot内置tomcat启动原理详解

    这篇文章主要介绍了SpringBoot内置tomcat启动原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-30
  • javascript数组的内置方法详解

    这篇文章主要介绍了javascript数组的内置方法,介绍的非常详解,具有参考借鉴价值,感兴趣的朋友一起学习吧,希望能够给你带来帮助...2021-09-27
  • IIS6.0出错脚本引擎异常处理方法

    这个错误目前已知的原因有2方面!1.VBScript和MDAC本身错误造成解析不稳定!2.ACCESS引发的错误!下面与大家分享下具体的处理方法...2016-01-27
  • 用PHP脚本自动把纯文本文件转换成Web页面

    最近,我的一个老朋友向我打电话求助。他从事记者的职业有多年了,最近获得了重新出版他的很多早期专栏的权利。他希望把他的作品贴在Web上;但是他的专栏都是以纯文本文件的...2016-11-25
  • Java 数组内置函数toArray详解

    这篇文章主要介绍了Java 数组内置函数toArray详解,文本详细的讲解了toArray底层的代码和文档,需要的朋友可以参考下...2021-06-29
  • 慎用PHP内置的Math函数

    文章详细介绍PHP内置的Math函数的些使用过程的问题,希望些方法对各位有所帮助哦。 如题所示。。。木有做大规模的运算,还不知道。。。擦,PHP的Math函数运算原来是如...2016-11-25
  • PHP脚本执行超时的解决办法

    在php中默认脚本执行超时时间为30秒了,如果你未进行设置30秒之后如果你的脚本还未执行完就会超时了,下面我来给大详解解决PHP脚本执行超时的方法。 php.ini 中缺省...2016-11-25
  • 深入理解JavaScript内置函数

    下面小编就为大家带来一篇深入理解JavaScript内置函数。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-06-12
  • 修改SQL SERVER内置存储过程

    SQLSERVER估计是为了安装或者其它方面,它内置了一批危险的存储过程。能读到注册表信息,能写入注册表信息,能读磁盘共享信息等等……各位看到这儿,心里可能会在想,我的网站...2016-11-25
  • 我想写一个通用的PHP脚本来处理任何传进来的表单F

    确定track_vars在你php3.ini文件中。如果你在编译PHP时加上"--enable-track-vars",肯定就有了。你要在下面二种方式中选择一种:在编译时加入;或是在每个脚本的第一行加入...2016-11-25
  • 使用PHP重新实现PHP脚本引擎内置函数

    // 实在无聊,突发奇想,想把PHP里面部分已经提供封装好的函数重新使用PHP实现一遍, // 于是便有了下面的代码主要实现了PHP中部分字符串处理函数,同时实现了一些PHP中...2016-11-25
  • Python内置数据类型list各方法的性能测试过程解析

    这篇文章主要介绍了Python内置数据类型list各方法的性能测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-04-30
  • SpringBoot内置tomcat调优测试优化

    这篇文章主要介绍了SpringBoot内置tomcat调优测试优化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-30
  • form表单传递数组数据、php脚本接收的实例

    下面小编就为大家带来一篇form表单传递数组数据、php脚本接收的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-02-18
  • python__new__内置静态方法使用解析

    这篇文章主要介绍了python__new__内置静态方法使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-04-30
  • 详解springboot+mybatis-plue实现内置的CRUD使用详情

    这篇文章主要介绍了详解springboot+mybatis-plue实现内置的CRUD使用详情,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-12
  • php脚本怎么运行环境?

    php脚本怎么运行环境?本文详细介绍了PHP运行环境配置与开发环境的配置,刚刚接触php的同学可以参考一下本文。 前提示时间一个博友,建议我提供PHP开发环境的搭建文章...2017-07-06
  • PHP脚本数据库功能详解(3)

    (作者:王凯波)   用类加快PHP的数据库开发   数据库的访问函数较多,使用不当会降低效率,甚至导致错误。而PHP的本身就是开放的和可扩充的,很多人为它开发各种功能的源...2016-11-25
  • python enumerate内置函数用法总结

    这篇文章主要介绍了python enumerate内置函数用法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-04-30