[笔记]CGI&PHP

 更新时间:2016年11月25日 16:09  点击:1598

CGI&PHP

向CGI传递数据
===============================================
环境变量 REQUEST_METHOD
GET:
<a href="cgi-bin/myprog.exe?lname=blow&fname=joe">
QUERY_STRING
POST:由form产生传递的数据
-环境变量CONTENT_LENGTH表明长度
-CGI程序从stdin读入数据
===============================================

其他有用的环境变量
===============================================
HTTP_USER_AGENT 浏览器的软件版本
REMOTE_ADDRESS 浏览器的IP地址
REMOTE_HOST 浏览器的机器名
===============================================

CGI输出的数据
===============================================
非分析头标
-HTTP/1.0 200 OK
-Server:NCSA/1.0a6
-Content-type:text/html
-...
===============================================

内容类型MIME   text/css
===============================================
Application
Audio
Image
Text
Video
Multipart

===============================================


PHP
========================================================================
基本语法
===============================================
1 <?php echo("if you want to serve XHTML or XML documents,do you liken");?>
2 <? echo("this is the simplest,an SGML processing instructionn")?>
  <?=expression?>This is a shortcut for"<?echo expression?>"
3 <script language="php">
    echo("some editors(like FrontPage) don''t like processing instruction");
  </script>
4 <%echo("You may optionally use ASP-style tags");%>
  <%=$variable;#This is a shortcut for"<%echo ..."%>
===============================================

数据类型
===============================================
四种标量类型
 布尔型 boolean
 整型 integer
 浮点型 float
 字符串 string 可以用单引号 双引号 定界符
两种复合类型
 数组 array
 对象 object
最后是两种特殊类型
 资源 resource
 NULL
===============================================

定界符
===============================================
$str=<<<EOD
Example of string
spanning multiple lines
usin

<

 

因为php4早就end了,所以是有必要切换到php5的了,所以有时调试需要整合一下了

做了一个脚本,让他们批处理一下就能自动切换了,方便的说

环境:

window XP SP2 +apache2.2.6 + PHP4.4.7 +PHP5.2.5

PHP4目录:E:webphp4

PHP5目录:E:webphp5

APACHE目录:E:webApache2.2

 

1.需要两个apache的httpd.conf文件,,因为apache2.2.6对php4.47支持不好,所以要另外加插件了.(参考:http://pakapaka.jp/softwareinfo/146.html)

php4的为: httpd_php4.conf

PHP5为:httpd_php5.conf

2. 准备两个批处理文件就可以了

变成php4:

 



copy php.ini c:windows
copy php4ts.dll c:windows
copy php4ts.lib c:windows
copy E:webApache2.2confhttpd_php4.conf E:webApache2.2confhttpd.conf

net stop apache2.2
net start apache2.2

 

 

变成php5

 



del  c:windowsphp.ini
del c:windowsphp4ts.dll 
del  c:windowsphp4ts.lib

copy E:webApache2.2confhttpd_php5.conf E:webApache2.2confhttpd.conf

net stop apache2.2
net start apache2.2

 

 

当然以上目录都是放在php4根目录下的,你只要根据目录修改就可以了






1. 尽量采用大量的PHP内置函数。
2. echo 比 print 快。
3. 不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
4. 在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。
5. 注销那些不用的变量尤其是大数组,以便释放内存。
6.  并非要用类实现所有的数据结构,数组也很有用。
7.   $row[‘id’]的效率是$row[id]的7倍。
8. 在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。
9. 如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
10. 检查是否能用strncasecmp,strpbrk,stripos函数代替正则表达式完成相同功能。
11. str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
12. 如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
13.  使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
14.  用@屏蔽错误消息的做法非常低效。
15.   打开apache的mod_deflate模块。
16.   数据库连接当使用完毕时应关掉。
18.   错误消息代价昂贵。
19.  尽量不要在for循环中使用函数,比如for ($x=0; $x < count($array); $x)每循环一次都会调用count()函数。
20.   在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
21.   递增一个全局变量要比递增一个局部变量慢2倍。
22.   递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
23.   递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
24.    仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
25.  方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
26.  派生类中的方法运行起来要快于在基类中定义的同样的方法。
27.  调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
28.  用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。当然,只有当你不需要在字符串中包含变量时才可以这么做。
29.  用echo 输出多个字符串时,用逗号代替句点来分隔字符串,速度更快。
30.  Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
31.  除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
32. 尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码(OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
33. 当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
Ex.(举例如下)
if (strlen($foo) < 5) { echo "Foo is too short"; }
vs.(与下面的技巧做比较)
if (!isset($foo{5})) { echo "Foo is too short"; }
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。
<

 PHP是一个很好的语言,而且有很多惊喜。而今天我看到了一个有趣的方法,在Arnold Daniels的博客。他谈到PHP中的临时变量。这个秘诀有益于"懒惰"的程序员,使程序员可以不用再去想该去给变量取个什么名字。他们可以使用这样的变量名:${0}

 

 

我比Arnold Daniels更懒,根本就不想用变量。下面有一些技巧让你的代码更少。

 

1. 使用 || (or) && (and) 操作代替 if.

 

// 标准写法
$status = fwrite($h, ''some text'');
if (!$status) {
    log(''Writing failed'');
}

//
较少的代码
${0} = fwrite($h, ''some text'');
if (!${0}) log(''Writing failed'');

//
更少的代码
fwrite($h, ''some text'') or log(''Writing failed'');

 

2. 使用三元运算符.

 

// 标准写法
if ($age < 16) {
    $message = ''Welcome!'';
} else {
  $message = ''You are too old!'';
}

//
较少的代码
$message = ''You are too old!'';
if ($age < 16) {
    $message = ''Welcome!'';
}

//
更少的代码
$message = ($age < 16) ? ''Welcome!'' : ''You are too old!'';

 

3. 使用for替换掉while.

 

// 标准写法
$i = 0;
while ($i < 100) {
  $source[] = $target[$i];
  $i += 2;
}

//
较少的代码
for ($i = 0; $i < 100; $source[] = $target[$i+=2]);

 

4. 很多地方是必须写变量。例如: PHP fluent API tips 。例如:一个函数调用得到一个数组,然后直接使用数组元素。

 

//下面这个例子会发生错误,因为函数调用,返回的数组没有先赋值给一个变量,而直接使用[''extension'']

 

$ext = pathinfo(''file.png'')[''extension''];
// result: Parse error: syntax error, unexpected ''['' in ... on line ...

 

你可以建立一个函数来解决这个问题,如下:(相当不错的方法,看着有点别扭...)

 

// returns reference to the created object
function &r($v) { return $v; }
// returns array offset
function &a(&$a, $i) { return $a[$i]; }

 

5. 多花时间去研究php自带的函数方法,PHP有很多很有趣的方法能使你的代码更短。

 

6. 当写更多的代码可以使程序更清晰的时候,不要懒惰。多花时间写注释,尽量写易读的代码。这才是真正节约时间的技巧。(多写注释和易读的代码,在以后修改调试的时候会节约时间)

 

 

 

 

 

 

PHP is a good language, but there are always surprises. And today I''ve seen an interesting approach in Arnold Daniels''s blog. He talks about temporary variables in PHP. This tip is useful to "lazy" developers who do not even think about variable names. They may prefer magic names like ${0} and 0 is good enough variable name, why not...

 

But I''m even more lazy then Arnold and sure that when there is no variable, then there is no problem. So here are a few tips that can make your code shorter and harder to read :-)

1. Use || (or) and && (and) operations instead of if.

// A lot of code
$status = fwrite($h, ''some text'');
if (!$status) {
    log(''Writing failed'');
}

// Less code
${0} = fwrite($h, ''some text'');
if (!${0}) log(''Writing failed'');

// Even less code
fwrite($h, ''some text'') or log(''Writing failed'');

2. Use ternary operator.

// A lot of code
if ($age < 16) {
    $message = ''Welcome!'';
} else {
  $message = ''You are too old!'';
}

// Less code
$message = ''You are too old!'';
if ($age < 16) {
    $message = ''Welcome!'';
}

// Even less code
$message = ($age < 16) ? ''Welcome!'' : ''You are too old!'';

3. Use for instead of while.

// A lot of code
$i = 0;
while ($i < 100) {
  $source[] = $target[$i];
  $i += 2;
}

// less code
for ($i = 0; $i < 100; $source[] = $target[$i+=2]);

4. In some cases PHP requires you to create a variable. For example, ech the PHP fluent API tips article. Another example is getting array element when array is returned by the function.

$ext = pathinfo(''file.png'')[''extension''];
// result: Parse error: syntax error, unexpected ''['' in ... on line ...

To handle all these situation you can create a set of small functions which shortcuts frequently used operations.

// returns reference to the created object
function &r($v) { return $v; }
// returns array offset
function &a(&$a, $i) { return $a[$i]; }

5. Explore the language you use. PHP is very powerful and has a lot of functions and interesting aspects of the language which can make your code more efficient and short.

6. When it is better to write more and then read the code easily, do not be lazy. Spend a few seconds and write a comment and more readable construction. This is only a tip in this list that really can save hours, not minutes.





<?php
function Ack($m,$n)
{
   if($m==0)
   {
      return $n+1;
   }
    else
   {
     if($n==0)
     {
       return Ack($m-1,1);
     }
       else
     {
      return Ack($m-1,Ack($m,$n-1));
     }
   }
}
//--------------------------------------//
for($i=0;$i<3;$i++)
{
    for($j=0;$j<3;$j++)
    {
        printf("-%5d-",Ack($i,$j));
    }
       printf("n");
}
?>


-    1--    2--    3-
-    2--    3--    4-
-    3--    5--    7-

 

<
[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • Smarty模板学习笔记之Smarty简介

    1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • php Observer观察者模式之学习笔记

    当我们在星际中开地图和几家电脑作战的时候,电脑的几个玩家相当于结盟,一旦我们出兵进攻某一家电脑,其余的电脑会出兵救援。 那么如何让各家电脑知道自己的盟友被攻击了...2016-11-25
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • PHP 日期函数 学习笔记介绍

    举一个简单的date例子 我将使用echo命令把内容输出到我们的客户端(浏览器)。我将使用下面的代码做为基础代码。 代码如下 复制代码 <!DOCTY...2016-11-25
  • 谈谈PHP中相对路径的问题与绝对路径的使用

    经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24