手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

PHP实现DataGrid

虽然有想过用PHP来实现datagrid,但由于php是解释性语言,而且对于数据库没有很好的长连接功能(或者说连接池吧),因此要实现datagrid的意义就不是特别大了。

但datagrid并非没有用处,如果用在网站的后台就可以简化很多操作了。或许有人会说ext不是更漂亮吗?但,这需要对JS了解的很多方可实现。为了实现一个datagrid,再去学EXT,成本有点高,因此,这个PHP的class就可以尝试试用了。     

不过,我自己一般不太会用这个东西(但并不反对在项目后台使用它),如果是我自己个人开发的话,或许会采用PHP代码+jQuery的table插件吧?

原文如下,或许可以做个参考:

最近想做一个通过PHP实现DataGrid功能的东西,这样可以直接修改数据库中表的内容,而不用开发【新增数据页面】,【编辑页面】,于是乎在网上找 了找,类似的东西也有几个,开源的、付费的都有,不过基本都是基于MySQL。由于需要连接Oracle所以从二次开发和页面样式来说个人觉得 phpMyDataGrid还是比较好上手。本篇首先介绍基于MySQL的使用方法,再简单介绍对于Oracle连接(基于sqlrelay)的二次开 发。

1. 创建测试数据库和表
SQL代码
  1. create database `guru`;  
  2.   
  3. USE `guru`;  
  4.   
  5. CREATE TABLE `employees` (  
  6.       `id` int(6) NOT NULL auto_increment,  
  7.       `namechar(20) default NULL,  
  8.       `lastname` char(20) default NULL,  
  9.       `salary` float default NULL,  
  10.       `age` int(2) default NULL,  
  11.       `afiliation` date default NULL,  
  12.       `status` int(1) default NULL,  
  13.       `active` tinyint(1) default NULL,  
  14.       `workeddays` int(2) default NULL,  
  15.       `photo` char(30) default NULL,  
  16.       PRIMARY KEY  (`id`)  
  17. )  
  18.   
  19. insert into `employees`  
  20.     (`id`,`name`,`lastname`,`salary`,`age`,`afiliation`,`status`,`active`,`workeddays`,`photo`)   
  21.     values (1, 'Ana''Trujillo',2000,45, '2005-05-13',1,1,10, '1.jpg');  
  22. insert into `employees`   
  23.     (`id`,`name`,`lastname`,`salary`,`age`,`afiliation`,`status`,`active`,`workeddays`,`photo`)  
  24.     values (2, 'Jennifer''Aniston',3500,23, '2004-10-22',1,0,0, '2.jpg');  
  25. insert into `employees`   
  26.     (`id`,`name`,`lastname`,`salary`,`age`,`afiliation`,`status`,`active`,`workeddays`,`photo`)  
  27.     values (3, 'Michael''Norman',1200,19, '2007-01-10',1,1,5, '3.jpg');  
  28. insert into `employees`   
  29.     (`id`,`name`,`lastname`,`salary`,`age`,`afiliation`,`status`,`active`,`workeddays`,`photo`)  
  30.     values (4, 'Vanessa''Black',6500,31, '2000-11-05',1,1,30, '4.jpg');  
  31. insert into `employees`   
  32.     (`id`,`name`,`lastname`,`salary`,`age`,`afiliation`,`status`,`active`,`workeddays`,`photo`)  
  33.     values (5, 'Michael''Strauss',3200,45, '2006-10-21',2,0,22, '5.jpg');  
  34. insert into `employees`   
  35.     (`id`,`name`,`lastname`,`salary`,`age`,`afiliation`,`status`,`active`,`workeddays`,`photo`)  
  36.     values (6, 'William''Brown',2300,21, '2001-03-10',3,1,10, '6.jpg');  
  37. insert into `employees`   
  38.     (`id`,`name`,`lastname`,`salary`,`age`,`afiliation`,`status`,`active`,`workeddays`,`photo`)  
  39.     values (7, 'Lucca''Normany',2800,36, '2006-10-02',3,1,20, '7.jpg');  

2. PHP程序介绍

       phpMyDataGrid主要是通过phpmydatagrid.class.php,dgscripts.js来实现的,总共加起来不到100kB, 又是一个小巧的软件。对于这两个文件就不多讲了,感兴趣的同学可以“打包带走”回去慢慢品。主要介绍该软件的使用方法,即实例 datagrid_for_mysql.php。先看一下页面示意图:

大小: 47.73 K
尺寸: 500 x 136
浏览: 1677 次
点击打开新窗口浏览全图

测试代码:

 

PHP代码
  1. <?php   
  2. include ("phpmydatagrid.class.php");  
  3. $objGrid = new datagrid;  
  4.   
  5. $objGrid->closeTags(true);    
  6. $objGrid->friendlyHTML();    
  7. $objGrid->methodForm("get");   
  8. //连接数据库  
  9. $objGrid->conectadb("127.0.0.1""root""root""guru");  
  10. //加密字符串  
  11. $objGrid->salt("Myc0defor5tr0ng3r-Pro3EctiOn");  
  12. $objGrid->language("en");  
  13. //最后一列显示的功能键,从左向右功能为“新增键”、“编辑键”、“删除键”、“浏览键”。  
  14. $objGrid->buttons(true,true,true,true);  
  15. //修改数值时产生的Form名称  
  16. $objGrid->form('employee', true);  
  17. //可检索列名  
  18. $objGrid->searchby("name,lastname");  
  19. //需要读取的表  
  20. $objGrid->tabla("employees");  
  21. //索引值用于修改数据  
  22. $objGrid->keyfield("id");  
  23. //分页显示行数  
  24. $objGrid->datarows(20);  
  25. //默认排序方式  
  26. $objGrid->orderby("name""ASC");  
  27. //显示列设置,相关设置可参考phpmydatagrid.class.php  
  28. $objGrid->FormatColumn("id""ID Employee", 5, 5, 1, "50""center""integer");  
  29. $objGrid->FormatColumn("name""Name", 30, 30, 0, "150""left");  
  30. $objGrid->FormatColumn("lastname""Last name", 30, 30, 0, "150""left");  
  31. $objGrid->FormatColumn("age""Age", 5, 5, 0, "50""right");  
  32. //自定义日期格式  
  33. $objGrid->FormatColumn("afiliation""Afiliation Date", 10, 10, 0, "100""center""date:dmy:/");  
  34. //编辑时可以自定义为<Select>模式  
  35. $objGrid->FormatColumn("status""Status", 5, 5, 0, "60""left""select:1_Single:2_Married:3_Divorced");  
  36. //编辑时可以自定义为<CheckBox>模式  
  37. $objGrid->FormatColumn("active""Active", 2, 2, 0,"50""center""check:No:Yes");  
  38. //自定义货币显示形式  
  39. $objGrid->FormatColumn("salary""Salary", 10, 10, 0, "90""right""money:€");  
  40. //将数据以柱状图显示  
  41. $objGrid->FormatColumn("workeddays""Work days", 5, 2, 0, "50""right""chart:percent:val:31");  
  42. $objGrid->checkable();  
  43. $objGrid->setHeader();  
  44. $objGrid->ajax('silent');  
  45. echo '<html> 
  46.       <head><title>PHPDataGrid</title></head> 
  47.       <body><div align="center"><br />';  
  48. //生成DataGrid  
  49. $objGrid->grid();  
  50. echo '</div></body></html>';  
  51. //关闭数据库连接  
  52. $objGrid->desconectar();  
  53. ?>  

 

3. 基于Oracle简介

对于Oracle的读取主要是把phpmydatagrid.class.php中与MySQL连接的函数修改为Oracle,本篇是通过sqlrelay(可参考http://sqlrelay.sourceforge.net/)进行的Oracle连接,当然也可以使用PHP自带的OCI8模块(效率有些低),修改后另存为phporadatagrid.class.php即可在其他程序(datagrid_for_oracle.php)中调用。以上涉及的所有程序均可在压缩包中找到。
希望对大家有用!

 

4. 源程序下载

 

 点击下载(原来的是iframe,用IE打开后就会自动下载,所以改作链接了,该链接不是我上传的,请下载后解压前主动测试。谢谢合作)

作者: Gnie
出处: {GnieTech} (http://www.cnblogs.com/gnielee/)

 

 

.NET调PHP Web Service的典型例子

一直都是关注着用PHP调用其他的soap方式的web service。偶尔看到一篇用php做web service的。有点感觉新鲜,备个案。哈哈

仅做了解。对于php做webservice,我还不知道性能如何呢。现在andot等人又在推出所谓性能超过phprpc的hprose,也不知道何时能够出来。。。

既然是用PHP做webservice,那么在看过phprpc之后,其实应该感觉用phprpc发布这些东西会更方便吧?不知道为什么不用phprpc或者hprose。。。。

纯记录,作者来自博客园的三聪,地址为:http://www.cnblogs.com/gateluck/archive/2009/08/10/php_web_service.html

原文如下:

最近一个项目由"WinForm直接访问DB2"移植到"WinForm通过PHP Web Service来访问DB2”。
(优点是php可以架在Linux上,而Linux是免费的)     
这个命题的难点不是访问DB2,而是.NET调用PHP的Web Service。对于我这个长期作.NET,之前一直以为只有.NET才可以做Web Service……的人来说,真是有点强“聪”所难了。
      但是问题还是要解决的,期限就摆在眼前呢。经过一番调查,终于有了眉目,现在分享给大家。
      
      首先要说明的,PHP服务器需要至少需要两个文件——一个WSDL文件和一个PHP文件。WSDL文件是一种机读的XML文件,用于描述WebService提供的服务和调用方法(对于.NET则可以自动生成调用代码,十分好用),php文件就是真正实现的WEB服务了。
      1)PHP服务器端代码
          1-1)TestWebService.php代码

[代码]

          1-2)TestWebService.wsdl代码
[代码]
      WSDL的代码比较长,当方法很多时,手敲代码是不太可能的。有一个巧的办法,就是也用.NET实现一个不含真正方法体的Web Serivce,然后通过http://***/TestWebService.asmx?wsdl的方法生成wsdl代码文件。
         关于WSDL文件,我要说明特别说明两点:
        (1)soap:address结点是声明WebService的地址,在部署时要改成相应地址;
        (2)一维数组的声明类型为ArrayOfType,字符串数组为ArrayOfString。如果Type不是简单类型,则Type需要另外声明。

      2).NET客户端代码
           先要添加Web引用,地址为WSDL文件的Http地址。
           调用代码(C#)
[代码]


总结: (一)PHP是一种弱类型语言,检查错误比较困难。array类型也与一般理解的数组不同,它也有类似Hashtable的用法。
          (二)PHP Web Service方法的传入参数、返回值都至多有一个,因为真正调用时的参数和返回值,都是包装到一个对象中传送的。
          (三)PHP Web Service也支持自定义类型和自定义类型数组等复杂类型,但不支持多组数组。
          (四)若返回值需要是多张二维表时,我浅薄的以为,可以传化一组字符串数组传送,格式为
                        [表1行数],[表1列数],[表1列名1],[表1列名2],……[表1列名N],[表1中按行列存放的值]
                        [表2行数],[表2列数],[表2列名1],[表2列名2],……[表2列名N],[表2中按行列存放的值]
                        ……
                        [表M行数],[表M列数],[表M列名1],[表M列名2],……[表M列名N],[表2中按行列存放的值]

                   按顺序将上面[]中的内容串成字符串数组,效率还不错,我测试10000行240列的数据,我有现成编解代码,有兴趣的可以向我索取.

支持中文的截取字符函数,不同编码下中文字符的范围一目了然

这是一个简单的函数,或许对你我都有用吧。
以前也有类似的文章,这个我仍然和上次一样,用来记录这些正则,无它。。。
原文作者阿彪,来自:http://www.bloomandkevin.cn/2009/02/blog-post.html

PHP代码
  1. <?php  
  2. /* 
  3. * 中文截取,支持gb2312,gbk,utf-8,big5 
  4. * 
  5. * @param string $str 要截取的字串 
  6. * @param int $start 截取起始位置 
  7. * @param int $length 截取长度 
  8. * @param string $charset utf-8|gb2312|gbk|big5 编码 
  9. * @param $suffix 是否加尾缀 
  10. */  
  11. public function csubstr($str$start=0, $length$charset="utf-8"$suffix=true)  
  12. {  
  13.     if(function_exists("mb_substr"))  
  14.         return mb_substr($str$start$length$charset);  
  15.   
  16.     $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";  
  17.     $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";  
  18.     $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";  
  19.     $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";  
  20.   
  21.     preg_match_all($re[$charset], $str$match);  
  22.     $slice = join("",array_slice($match[0], $start$length));  
  23.     if($suffixreturn $slice."…";  
  24.      
  25.     return $slice;  
  26. }  
  27. ?>  

Tags: 中文截取

PHP生成条形码 之一 条形码介绍

条形码这个东西,在实际中用的比较多,而且现在大多数的手机(带摄像头的)几乎都支持条形码拍摄识别了。

曾经想过为老头子的小店搞一个这样的程序,方便他统计货物,但后来想想,这么小的小店,数都数的过来就放弃了。其实还有一个原因,那就是,手持PDA太贵 了。

这是条形码的资料,先学习一下,说不定哪天老头子的小店能够做大呢?HOHO

内容如下:我是从博客园COPY而来的:http://www.cnblogs.com/gnielee/archive/2009/07/29/1533768.html

     在一些生产制造行业条形码是必不可少的。比如,打印工作单、原材料出入库、成品出库发货等都需要扫描条形码进行数据采集。最近发现公司打印出的工作单上出 现了条码,打印工单的程序是用PHP写的,于是乎看看源代码是怎么实现的。原来是通过一个生成Barcode的类将相应的数据转给该程序并生成JPG文 件。
     自己在网上搜了搜实现Barcode的其他方法,找到一个国外的开源程序专门用来生成“一维条形码”。首先,复习一下条形码的相关知识。

条形码分类

一、按码制分类
1. UPC码
1973年,美国率先在国内的商业系统中应用于UPC码之后加拿大也在商业系统中采用UPC码。 UPC码是一种长度固定的连续型数字式码制,其字符集为数字0~9。它采用四种元素宽度,每个条或空是1、2、3或4倍单位元素宽度。IPC码有两种类 型,即UPC-A码和UPC-E码。

2. EAN码
1977年,欧洲经济共同体各国按照UPC码的标准制定了欧洲物品编码EAN 码,与UPC码兼容,而且两者具有相同的符号体系。EAN码的字符编号结构与UPC码相同,也是长度固定的、连续型的数字式码制,其字符集是数字0~9。 它采用四种元素宽度,每个条或空是1、2、3或4倍单位元素宽度。EAN码有两种类型,即EAN-13码和EAN-8码。

3. 交叉25码
交叉25码是一种长度可变的连续型自校验数字式码制,其字符集为数字0~9。采用两种元素宽度,每个条和空是宽或窄元素。编码字符个数为偶数,所有奇数位置上的数据以条编码,偶数位置上的数据以空编码。如果为奇数个数据编码,则在数据前补一位0,以使数据为偶数个数位。

4. 39码
39 码是第一个字母数字式码制。1974年由Intermec公司推出。它是长度可比的离散型自校险字母数字式码制。其字符集为数字0—9,26个大写字母和 7特殊字符(-、。、Space、/、%、¥),共43个字符。每个字符由9个元素组成,其中有5个条(2个宽条,3个窄条)和4个空(1个宽空,3个窄 空),是一种离散码。

5. 库德巴码
库德巴码(Code Bar)出现于1972年,是一种长度可变的连续型自校验数字式码制。其字符集为数字0—9和6个特殊字符(-、:、/、。、+、¥),共16个字符。常用于仓库、血库和航空快递包裹中。

6. 128码
128 码出现于1981年,是一种长度可变的连续型自校验数字式码制。它采用四种元素宽度,每个字符由3个条和3个空,共11个单元元素宽度, 又称(11,3)码。它由106个不,同条形码字符,每个条形码字符有三种含义不同的字符集,分别为A、B、C。它使用这3个交替的字符集可将128个 ASCII码编码。

7. 93码
93码是一种长度可变的连续型字母数字式码制。其字符集成为数字。0-9,26个大写字母和7个特殊字符(-、。、Space、/、+、%、¥)以及4个控制字符。每个字符由3个条和3个罕,共9个元素宽度。

8. 49码
49 码是一种多行的连续型、长度可变的字母数字式码制。出现于1987年,主要用于小物品标签上的符号。采用多种元素宽度。其字符集为数字0-9,26个大写 字母和7个特殊字符(-、。、Space、%、/、+、%、¥)、3个功能键(F1、 陀、F3)和3个变换字符,共49个字符。

9. 其他码制
除上述码外,还有其他的码制,例如25码出现于1977年,主要用于电子元器件标签;矩阵25码是11码的变形;Nixdorf码已被EAN码所取代Plessey码出现于1971年5月主要用于图书馆等。

二、按维数分类
1. 普通的一维条码
普通的一维条码自本问世以来,很快得到了普及并广泛应用。但是由于一维条码的信息容量很小,如 商品上的条码仅能容13位的阿拉伯数字,更多的描述商品的信息只能依赖数据库的支持,离开了预先建立的数据库,这种条码就变成了无源之水,无本之木,因而 条码的应用范围受到了一定的限制。

2. 二维条码
除具有普通条码的优点外,二维条码还具有信息容量大、可靠性高、保密防伪性强、 易于制作、成本低等优点。<BR>美国Symbol公司于1991年正式推出名为PDF417的二维条码,简称为PDF417条码,即“便携 式数据文件”。FDF417条码是一种高密度、高信息含量的便携式数据文件,是实现证件及卡片等大容量、高可靠性信息自动存储、携带并可用机器自动识读的 理想手段。

3. 多维条码
进入20世纪80年代以来,人们围绕如何提高条形码符号的信息密度,进行了研究工作。多维条形码和集装 箱条形码成为研究、以展与应用的方向。<BR>信息密度是描述条形码符号的一个重要参数据,即单位长度中可能编写的字母个数,通常记作:字母 个数/cm。影响信息密度的主要因素是条、空结构和窄元系的宽度。<BR>128码和93码就是人们为提高密度而进行的成功的尝试。128码 城1981年被推荐应用;而93码于1982年投入使用。这两种码的符号密度均比39码高将近30%。<BR>随着条形码技术的发展和条形码 三制的种类不断增加,条形码的标准化显得愈来愈重要。为此,曾先后制定了军用标准1189;交叉25码、39码和Coda Bar码ANSI标准MH10.8M等。同时,一些行业也开始建立行业标准,以适应发展的需要。此后,戴维·阿利尔又研制出49码。这是一种非传统的条形 码符号,它比以往的条形码符号具有更高的密度。特德·威廉姆斯(Ted Williams)GFI988推出16K码,该码的结构类似于49码,是一种比较新型的码制,适用于激光系统。

条形码实例

1. Codabar   Manual Reference

codabar

  • Supports: [0-9], [A-D], - $ : / . +
  • Must start and end with a letter
  • Contains an auto-checksum, no checksum number


2. Code 11   Manual Reference

code11

  • Supports: [0-9], -
  • Rarely used
  • Contains auto-checksum numbers


3. Code 39   Manual Reference

code39

  • Supports: [0-9], [A-Z], - . $ / + % [SPACE]
  • Really used, many uses
  • Contains a optional checksum
  • Resulting barcode is pretty big


4. Code 39 Extended   Manual Reference

code39ext

  • Supports: [0-9], [A-Z], - . $ / + % [SPACE] + ASCII 0-127
  • The extension of this barcode is optional. You must specify your reader that you read Code 39 Extended.


5. Code 93   Manual Reference

code93

  • Supports: [0-9], [A-Z], - . $ / + % [SPACE] + ASCII 0-127
  • Similar to Code 39 but less used
  • Supports ASCII 0-127 and is not optional like the Code 39
  • Bigger density


6. Code 128   Manual Reference

code128

  • Supports: [0-9], [a-zA-Z], tous les characteres
  • Contains 3 tables to better encode data
  • Groups numbers by two for a better compression


7. EAN-8   Manual Reference

ean8

  • Supports: [0-9]
  • Encodes 7 numbers and a checksum number
  • It is the EAN-13 short version
  • You have to get a number with a license to use in the public


8. EAN-13   Manual Reference

ean13

  • Supports: [0-9]
  • Encodes 12 numbers with a checksum number
  • It is the UPC-A extension which adds the country code
  • You have to get a number with a license to use in the public


9. ISBN-10 / ISBN-13   Manual Reference

isbn

  • Supports: [0-9]
  • Based on EAN-13, used for books
  • You have to get a number with a license to use in the public


10. Interleaved 2 of 5   Manual Reference

i25

  • Supports: [0-9]
  • Based on Standard 2 of 5
  • Optional checksum number


11. Standard 2 of 5   Manual Reference

s25

  • Supports: [0-9]
  • Hard to read for readers because really low density
  • Optional checksum number


12. MSI Plessey   Manual Reference

msi

  • Supports: [0-9]
  • Formerly used for inventory
  • Optional checksum number


13. UPC-A   Manual Reference

upca

  • Supports: [0-9]
  • Encoded like EAN-13
  • Encodes 11 numbers with a checksum number
  • The numbers depends on what you sell
  • You have to get a number with a license to use in the public


14. UPC-E   Manual Reference

upce

  • Supports: [0-9]
  • Short version of UPC-A
  • Encodes 7 numbers with a checksum number
  • The numbers depends on what you sell
  • You have to get a number with a license to use in the public


15. UPC Extension 2   Manual Reference

upcext2

  • Supports: [0-9]
  • Contains 2 characters
  • Indicates more information on the product
  • Must be joined to a UPC or EAN symbol


16. UPC Extension 5   Manual Reference

upcext5

  • Supports: [0-9]
  • Contains 5 characters
  • Usually indicates the suggested price of the product
  • Must be joined to a UPC or EAN symbol


17. PostNet   Manual Reference

postnet

  • Supports: [0-9]
  • Contains either 5, 9 or 11 numbers
  • Used to encode envelopes in United States


18. Other   Manual Reference

otherbarcode

  • Create your own barcode
  • Add the text you want


参考资料:http://www.barcodephp.com/1d/overview.php

Tags: 条形码

List of Supported Protocols/Wrappers

以下部分内容来自手册,比如这个列表:

对于这个列表,熟悉的人可能很熟悉,不熟悉的人,应该不太会关注,以前我也一样。
直到,我看到zend framework,发现在zend_view里,他就模拟了一个协议:zend.view://,为的就是将那些模版中采用短标签(<? =$a ?>)的代码改为长标签(<?php echo $a ; ?>)。

其实我再次看它,也只是一个顺便。yhustc想尝试把以下内容输出:

PHP代码
  1. <?php  
  2. $str = '今天是:<?php echo date("Y-m-d"); ?>';    
  3. file_put_contents('test.php'$str );  
  4. include'test.php' );   

输出结果是类似:今天是2009-01-01这样的结果,但事实上的输出却还是

XML/HTML代码
  1. 今天是:<?php echo date("Y-m-d"); ?>  

yhustc进行了尝试,如果这个内容写入文件,然后通过include,就可以显示正确的结果:

PHP代码
  1. <?php    
  2. $str = '今天是:<?php echo date("Y-m-d"); ?>';      
  3. file_put_contents('test.php'$str );    
  4. include'test.php' );  

但是yhustc不想要这个多出来的IO,因为写入文件后,你总还得删除吧?如果类似的东西太多,IO就太恐怖了。

于是我根据zend.view://这个协议,想起了PHP自带的。并使用Data的协议或者称Wrappers来解决了这个问题:

PHP代码
  1. $str = "函数使用 今天的日期: <?php echo date('Y-m-d');?>";  
  2. $strBase64 = base64_encode$str );  
  3. include("data://text/plain;base64,{$strBase64}") ;  

关于这个data的wrappers请查看上面的列表,我也就不详细说了,它是符合RRC2397的标准的。
事实上这个Data也是从5.2.0才开始支持的,而且更重要的是上面的第三行代码:

PHP代码
  1. include("data://text/plain;base64,{$strBase64}") ;   

这句话还需要另外一样东西支持:allow_url_include,而这个又需要allow_url_open的支持。(需要改php.ini)
有了这个支持,你以后看到这样的代码:

PHP代码
  1. <?php  
  2. include("http://localhost/needrequire.php");  
  3. echo 'test';  

就不需要更感到惊讶和愤怒了。毕竟,它事实上是支持的,只要这个needrequire.php是返回正确的PHP代码,比如test.php的内容为:

PHP代码
  1. <?php  
  2. echo'<?php class a{ function a(){echo "test";}}?>' );      
  3. ?>  

然后:

PHP代码
  1. <?php  
  2. include'http://localhost/test_echo.php' );  
  3. $a = new a();  

还是会正常的输出test的。