首页 > 编程技术 > php

[笔记]CGI&PHP

发布时间:2016-11-25 16:09

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--]