背景:关于自动加载类文件是PHP这种脚本在程序大后为了按需要加载时所需要的一种机制,很有必要。
将__autoload换成loadprint函数。但是loadprint不会像__autoload自动触发,这时spl_autoload_register()就起作用了,它告诉PHP碰到没有定义的类就执行loadprint()。
以上一行摘自:http://blog.csdn.net/panpan639944806/article/details/23192267

/tmp/autoload/autoload.php


/tmp/autoload/aClass.php


/tmp/autoload/bClass.php


运行一下,看一下在加载前和后引入的文件是否一样?不一样有新文件:
[root@test autoload]# php autoload.php  
Array
(
    [0] => /tmp/autoload/autoload.php
)

.:/opt/2012-01-30/php-5.3.10
aClass loaded...bClass loaded...Array
(
    [0] => /tmp/autoload/autoload.php
    [1] => /tmp/autoload/aClass.php
    [2] => /tmp/autoload/bClass.php
)

上面是一个用法,第二个是把__autoload 这个函数都给重定义了:
spl_autoload_register(array('Ko', 'autoload'));//这要就由function __autoload($className)变成了:function autoload($className)
————————————————————结合框架来说这个autoload的事情—————————————————————

/**
* Enable the Ko auto-loader.
*
* @see  http://php.net/spl_autoload_register
*/
spl_autoload_register(array('Ko', 'autoload'));
----于是了解到如下自动加载机制:
英文原文:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

以下内容描述了符合自动载入程序互操作性所必须遵守的强制性规范。

强制要求

一个完整的命名空间 (namespace) 和类 (class) 必须使用以下结构: \<Vendor Name>\(<Namespace>\)*<Class Name>
每个命名空间 (namespace) 必须使用供应商名称 (“Vendor Name”)  做为顶层命名空间(top-level namespace).
每个命名空间 (namespace) 的子命名空间 (sub-namespace) 数量不限.
程序从文件系统载入的时候,每个命名空间 (namespace) 的分隔符 (separator) 将被替换为操作系统的目录分隔符 (DIRECTORY_SEPARATOR).
在类名 (CLASS NAME) 中的下划线 ( _) 也将被替换为操作系统的目录分隔符 (DIRECTORY_SEPARATOR) , 在命名空间 (namespace) 中的下划线 (_)不做替换.
从文件系统载入的合格的命名空间 (namespace) 和 类 (class) 必须以 .php 结尾.
供应商名称 (vendor names), 命名空间 (namespaces)  及类名 (class names) 可以使用任意大小写字母的组合.
示例

\Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php
\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php
\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php
在命名空间(Namespaces)和类名(Class Names)中的下划线

\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
The standards we set here should be the lowest common denominator for painless autoloader interoperability. You can test that you are following these standards by utilizing this sample SplClassLoader implementation which is able to load PHP 5.3 classes.

实现示例

下面的示例函数演示了遵循上述规范的自动加载过程.

SplClassLoader 实现

如果你的程序遵守上面的自动载入程序互操作性规范,可以使用下面的SplClassLoader实现来加载你的类 (classes) . 这也是 PHP 5.3 推荐的遵循本规范的类 (class) 加载方式.
来自:http://www.dunban.com/?p=30

http://gist.github.com/221634


最后参考:
http://www.jb51.net/article/23956.htm
http://blog.csdn.net/hguisu/article/details/7463333
http://www.php.net/manual/zh/function.autoload.php
http://blog.sina.com.cn/s/blog_6915bcb101017p2x.html
http://www.php100.com/html/php/lei/2013/0905/5267.html


YII框架里,一般各种框架都有这样的用法,特别是PHP5的框架:
spl_autoload_register(array('Ko', 'autoload'));
bool spl_autoload_register(array(‘class’,'static_function’))
参数为数组,数组中第一个值为类名,第二个值为方法名,且必须为静态方法。
例:

输出:
---------- 调试PHP ----------
open\OpenAPIModel.php
models\open\OpenAPIModel.php
输出完成 (耗时 0 秒) - 正常终止
在实际运用中文件名里是不能有Model的字符的,通过对findFile的Debug一下得到:
D:\www\iseeyoo\trunk\codes\application\models\open\adminchannellink.php
class open_AdminChannelLinkModel extends Model  //类名包含下划线和Model(如果是Service也一样:class OpenChannelService extends baseService,文件名:\application\services\openchannel.php也不能包含Service字符。),这个规则是:文件命名里不能有Model。(这个得注意下)
{

}
//直接在Core里Debug下,得出上面的规律。
public static function findFile ($dir, $file, $ext = 'php')
{
  if($file == "open_adminchannellink"){
      file_put_contents("d:/wamp/www/aaa.txt","ModelfileDiR=".$dir."\n",FILE_APPEND);
      file_put_contents("d:/wamp/www/aaa.txt","Modelfilepath=".$path."\n",FILE_APPEND);
  }
  打印出:
  ModelfilePosition=open_adminchannellink
  ModelfileDiR=models
  Modelfilepath=models\open\adminchannellink.php


kohana 这个也是支持contrller直接接调用Module层的,实践OK的,理论上就是通过Autoload调用module,Service(文件类名有不同的标记)的类名(这个是有规范的上面有描述),进而拼接出大体位置,让findfile去找到这个文件:
application\controllers\open\index.php

http://domain.com/open/index/index
这一看是contrller下面有一个open(经过路由配置到了open目录的),后有一个index.php的文件里有一个index函数,如果想直接获取这个uri的内容,可以通过这个函数实现,如下:


这个forward吧,其实就相当于YII里的路由控制器访问index目录下的index控制器下面的index的action方法,路由相关知识:
什么是路由:
在框架里边我们通过路由获得控制器和方法,
我们有了控制器的方法,就可以进一步与视图或模型进行交互,
http://网址/index.php?r=控制器/方法
http://网址/index.php?r=user/cc

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


一般还是有一个autoload函数来做加载的:



自动auto加载代码:

自订义自动加载函数用SPL:
VPS上很多应用,是需要zip扩展的。而我帮朋友配置的一台VPS,是Redhat的系统,并且是64bit的,但是貌似网上的LNAMP一键安装包恰好还不支持64位,所以我的LNAMP环境是全手动搭建的。由于手动搭建,为了简单,一些扩展默认我就没编译到php里面去,因此这次的这个zip扩展,需要手动配置进去。其实PHP的很多扩展,能在编译的时候,通过开关开启。如果编译的时候,没有开启,也没关系,可以通过php.ini中加入extension的方式开启。比如这次的zip扩展,就可以用此方法实现。此文为记录一下zip扩展手动安装的过程,备忘。
第一步,下载源代码并解压缩
http://pecl.php.net/package/zip
wget http://pecl.php.net/get/zip-1.10.2.tgz
tar zxvf zip-1.10.2.tgz
cd zip-1.10.2
第二步,编译并安装
/usr/local/php/bin/phpize
#运行此命令后,会自动生成几个文件,包括configure文件
./configure --with-php-config=/usr/local/php/bin/php-config
make & make install
第三步,配置php.ini,并开启zip扩展
zip安装后,会显示安装的路径,比如:/usr/local/php/lib/php/extensions/zip.so
在php.ini中加入: extension=/usr/local/php5/lib/php/extensions/zip.so
如果是LNMP安装包,需要重新启动php-fpm,如果是LNAMP结构,需要重启apache即可。
至此,安装zip扩展完毕,可以在phpinfo()中检查zip扩展是否已经正确启用。
背景:Tencent公司为了想在年会抽奖上展现两个字:公平,公平,还是他妈的公平,随机函数到底用谁才体现公平,当时在群里有人问了?当时没有当回事,后来过了两天才知道原因,下面就来讲这个的一个决策过程,呵。
2012-12-12:
☆Reiko☆(6429****5) 10:50:32
用rand 随机出的数 在区段中间的数随机次数偏多。有什么好办法使随机数平均点。
☆Reiko☆(6429****5) 10:50:32
感觉
回忆未来-向东-Jàck(3726****3) 10:50:58
我觉得这种理论不成立,感觉是不能说明问题的,要有多次的数据作支持。
☆Reiko☆(6429****5) 10:50:57
随机的次数多的时候 还相对平均点
杨猪(1761****7) 10:51:02
感觉这玩意不靠谱。
Sango(1417887429) 10:51:02
你的感觉很少见
mk_rand 这个会好一点
☆Reiko☆(6429****5) 10:51:13
次数少的话就不平均了
杨猪(1761****7) 10:51:36
我这边同一个比例。今天出东西多了 有人说概率高。明天出东西低了有人说概率低。。
江林锦(865****3) 10:52:06
还是有一定效果的
江林锦(865****3) 10:52:13
量大的情况下
小猪臭(2674****5) 10:52:20
坐板凳潜水ing
Rango<htfntc****@163.com> 10:53:13
一定要用mt_rand
Rango<htfntc****@163.com> 10:53:36
rand有bug
杨猪(1761****7) 10:54:14
rand的BUG早就修复了
杨猪(1761****7) 10:54:52
注释:在某些平台下(例如 Windows)RAND_MAX 只有 32768。如果需要的范围大于 32768,那么指定 min 和 max 参数就可以生成大于 RAND_MAX 的数了,或者考虑用 mt_rand() 来替代它。

注释:自 PHP 4.2.0 起,不再需要用 srand() 或 mt_srand() 函数给随机数发生器播种,现在已自动完成。

注释:在 3.0.7 之前的版本中,max 的含义是 range 。要在这些版本中得到和上例相同 5 到 15 的随机数,简短的例子是 rand (5, 11)。
杨猪(1761****7) 10:55:06
无非就是播种嘛。
Rango<htfntc****@163.com> 10:55:19
不是这个问题,是因为glibc rand的bug
杨猪(1761****7) 10:56:23
那就不清楚了。
杨猪(1761****7) 10:56:32
glibc rand的bug 这个具体什么表现?
Rango<htfntc****@163.com> 10:58:41
随机出来的数字可能是一样的
Rango<htfntc****@163.com> 11:02:27
因为是直接用时间来做种子的,随机算法有点问题。mt_rand不存在此问题
Rango<htfntc****@163.com> 11:02:58
以前有用rand做CPU亲和设置的,发现很多程序都绑定到1个核了

2012=12-15
...........................
zedan(@zedan33)  || 陈敏(@chenmin):  || Sagezhang张松国(@sprits): 马上开始了,再拜一遍 || Sagezhang张松国(@sprits) 由于圣诞晚会采用PHP的mt_rand随机函数抽取中奖rtx号码,所以今年我决定改变打法。方法如下:  http://t1.qpic.cn/mblogpic/49da2741fd5c8b7f8392/2000 http://t.qq.com/p/t/44480028989012
php今年长脸了


Jack点评:善于发现漏洞并不利用漏洞者强,敢于拜神者王。
--------------------------------------------------------------------------------------
成功配置后的感想:关于这个aptana的调试功能,我觉得没有做得好,也是个鸡肋,因firefox的大幅度升级,导致这个debug插件出现了各种兼容性问题,国外也有人提到,如:https://aptanastudio.tenderapp.com/discussions/suggestions/400-js-debuggerdont-work-with-firefox-150-aptana-3-build-321201207261642-aptana-plugin-ff-172   为此,我觉得前端的调试还是应该以firebug来做,完善好了,问题解决90%。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的最后Js调试Ok的解决方案如下:
Firefox 版本:V17.01
按aptana说的下载基于1.2-1.8:https://getfirebug.com/releases/firebug/1.8/firebug-1.8.0.xpi //这个版本我试了下是可以的
aptana插件下载如下:Aptana debugger的下载地址 :http://firefox.aptana.com/update/aptanadebugger.xpi

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
网上摘录:
安装:http://my.oschina.net/u/197668/blog/35751
使用及配置:http://blog.csdn.net/easywang369/article/details/7580034

更多关于这个zendstuodio的问题:http://hbwanghai.blog.163.com/blog/static/1992971472012102912916330/
这个较完整:
http://luwenxiang1990.blog.163.com/blog/static/17360763920116172294038/
http://icandy.blog.163.com/blog/static/18967817320113189013361/  
有代码可以下载学习,不错的教材,注意:这个firefox的版本问题可能是调试的大问题,得学会自己再安一个旧一点的3.5版本,安在不同的目录,在aptana里设置一下旧版本的位置,同时安上两个插件。一个是:firebug,一个是:apata的插件。(估计是用来开端口的,于最新的版本不兼容)
Aptana加Firefox下的插件进行调试:http://www.cnblogs.com/Fooo/archive/2010/01/28/1658514.html
Aptana debugger的下载地址 :http://firefox.aptana.com/update/aptanadebugger.xpi

Firefox下的插件不兼容然后会报错:
然后第一次debug跳到 http://www.aptana.com/?debugger=true&port=3726

第二次debug:也是一个 Aptana Firefox extension launching...please wait.

然后会报错:

Socket connection error. Please try shutting down and restarting your web browser, and then run 'debug' again. Accept timed out

搞来搞去,结果是firefox版本问题,把原来的3.5.5换为3.5就没问题了,这个行不通。


没有自动提示解决方案,zend studio 9 html,js,css的代码提示如何弄?php的代码提示是有的。
装好了后,就有JS的提示功能了,如果要以整个工程的文件作为提示需要先关联文件.然后按alt+/   。


按Alt+/什么都不出来,如果没有打开提示,就一行“No Default Proposals”的解决办法:
最终解决方案。
菜单window->Preferences->Java->Editor->Content Assist->Enable auto activation 选项要打上勾
windows–>preference–>workbench–>keys 下设置Content Assist 的快捷键
window->Preferences->Java->Editor->Content Assist->Advanced 上面列表框的Select the proposal kinds contained in the ‘default’ content assist list: 中把 Other Java Proposals 选项打上勾
以上这几种方案似乎都没什么用,也许根本就不是解决这个问题的,看起来是解决快捷键冲突的,而冲突的话连“No Default Proposals”也不会提示。
最后,还有一种解决成功率最高的方法是重建workspace,之前我记得有一次,大概2年前吧,当时也遇到过类似问题,那时候就是重建workspace解决的。但现在还用这种近乎“暴力”的方法,简直这太扯了,这么多项目、这么多配置,挨个导入到新的workspace,那也花很多时间呀。要花时间,不如花在寻找根本问题所在上,彻底解决这种情况。
根据排除法,最终把问题定位在了workspace目录下的这个文件上:
.metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.dltk.ui.prefs
可以直接删掉它,重启eclipse后问题解决。(如果怕误删,可以先备份)
但是这也只是小规模的微“暴力”解决方案,还没找到根本原因,那么,再细化点吧,直接用文本编辑器打开它,应该会有一行这样的配置:
content_assist_disabled_computers=xxxxxxxxxxxxxxxxxxxxx
罪魁祸首就是这项配置了!看名字就不像好东西,直接把我的content_assist给disable了!
删除这行后保存,重启eclipse,问题彻底解决。

http://blog.sina.com.cn/s/blog_540180ba01016ovr.html
看来抱怨的人不少:JavaScript编辑器 aptana studio 3.2.2 对应的火狐浏览器版本
aptana studio 是JavaScript的编辑利器,但是配置非常让人头疼。
它自带的 aptana Debugger 1.7.2 以及 firebug1.83 第一次输出的时候,按照提示自动安装就行了,最好别自己找了,找了装上不一定好使。。。。
火狐浏览器版本推荐14版,我自己试了 16 、9、 10、 11、 12、 13、 14,  7个版本,12-14版都能正常输出。但是,12,13版我这里打断点调试有问题。直到14版才一切OK。
而15版看发布时间,比aptana studio 3.2.2晚,理论上可能不兼容,所以没试。。。如果我早点注意发布时间,我就不会先弄16版了。
有例外情况,我同事说,他用12版断点调试ok。。。
仅作参考,希望能帮助开发人员少浪费时间。
1. 上传本文件apc_info.php(代码来源:munin-php-apc)到web目录,后缀名需要修改为php。一个建议是将其文件名修改为随机的字符串,防止别人猜到或意外踩到。
2. 将以下代码加入到munin配置文件中:
[php_apc_*]
user root
env.url http://www.example.com/apc_info.php?auto
3. 上传文件php_apc_到munin的plugins目录.请去除后缀名.txt。 一般在/usr/share/munin/plugins/.并修改其权限为755.
4. apc_php可以提供6个类型的报表,为此,我们需要在munin的配置目录下,建立6个软连接指向到apc_php_
ln -s /usr/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_files
ln -s /usr/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_fragmentation
ln -s /usr/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_hit_miss
ln -s /usr/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_purge
ln -s /usr/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_rates
ln -s /usr/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_usage
5. 重启munin node,在下次更新后,将在munin的html中看到php apc的状态信息图表。
sudo /etc/init.d/munin-node restart
用php实现proxy功能的示范
刚刚写的练手的作品。感觉还是有些实用价值的。。放出来给大家试试。
功能:通过php实现代理功能
适用用户:在家下载较慢。且懒得找proxy。且有高速主机,且主机有php,且主机支持socket。
使用方法:
1。把本程序传到主机上
2。通过浏览器浏览主机上的此文件
3。在url中填入欲下载的文件地址(如果有必要,可以填入referer)
4。点击get proxy url
5。新打开的页面中的链接即为通过proxy下载的链接

注意:
1。支持多线程下载,断点续传
2。仅支持http协议
3。不支持服务器端header重定向
4。不支持http auth
5。下载较大的文件时,可以修改程序中set_time_limit的值,以减少断线的现象(默认为180,即3分钟)
阅读全文
以前在开发环境用的是xdebug,还不错,看到有一篇野马分享的《PHP性能检测扩展——XHProf》,不错,之前就有听说,这次就行动一下。

XHProf是facebook开源出来的一个php轻量级的性能分析工具,跟Xdebug类似,但性能开销更低,还可以用在生产环境中,也可以由程序开 关来控制是否进行profile。
阅读全文
PHP新增eio扩展,可以写类似node.js一样的异步IO了。
可以结合libevent一起来用。libevent主要是解决了网络异步,实际上写代码是时,IO还是同步的,必须处理完请求后同步fwrite给客户端。如果IO异步的话,进程就可以马上去处理其他请求,不用等待IO操作完成。
比如接到一个网络请求,需要创建一个目录,传统的程序就直接mkdir,这里的mkdir就是同步的。必须处理完成后才会继续向下执行。
异步IO的话,eio_mkdir,里头可以填一个回调函数。这里不是同步的,所以代码马上就向下执行。当mkdir操作完成后,才会执行回调函数。
当然有些事情是必须同步的。node.js里头就有很多这样的做法。比如 db.query(sql).callback(proc),查询SQL语句,完成后回调 proc。

Url:
http://pecl.php.net/package/eio
DownLoad:http://pecl.php.net/get/eio-1.2.0.tgz

其他资料:
https://github.com/chobie/php-uv/blob/master/examples/fsevevnt.php
https://github.com/chobie/php-uv/blob/master/examples/http_server.php
事件驱动,承受高并发……这些耀眼的光环,使前端开发者不能不去学习NodeJS。

今天就在开发环境把NodeJS搭建起来了。

1. 下载node
wget http://nodejs.org/dist/node-latest.tar.gz
2.2解压
tar -zxvf node-latest.tar.gz    
cd node-v0.8.12/

3. 查看配置是否完整
./configure --prefix=/usr/local/webserver/node/

4. 安装  
make  
make install

时间可能较长,耐心等待。。。

5. 检查是否安装成功,输入
node -v
显示版本号,恭喜你,安装成功! :)
root@mdev node-v0.6.0 # node -v  

6. 编写测试页
vi example.js

var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, "192.168.98.128");  
console.log('Server running at http://192.168.98.128:1337/');  

如果你是在本机搭建,那么将listen IP地址更改为127.0.0.1

7. 运行
node example.js  
Server running at http://192.168.98.128:1337/  
备注:注意不要停止此进程

8.访问
在浏览器访问 http://192.168.98.128:1337/  

“Hello world” 出现在你的眼前
实践file_get_contents函数实现代理Ok如下:

阅读全文
做为一个合格的web开发人员,一定会牢记一个原则——永远不能相信用户输入的数据,行走江湖,安全第一是很重要的。用户通过表单或url传过来的数据,一定要仔细检查过了,才往后台数据库里存进去。在一个成熟的开发团队里,贯彻这个原则不成问题;但是如果在一个新人老手混搭的小team里,很容易就忽视了这个问题,那么各种安全漏洞比如跨站攻击,sql注入等等真是防不胜防。

实际上,用php 5自带的filter扩展能够较好的解决这个问题。我在从前的blog里记录了filter扩展的常规用法——直接利用filter来校验数据,这样有不少额外的代码量,所以我得介绍一个比较偷懒的办法——自动对所有输入变量进行过滤,这只需要对php.ini增加一行配置,然后重启apache或fastcgi让php配置生效。

filter.default=”special_chars”

开启了这项配置后,会自动使用filter_input方法对$_GET, $_POST, $_COOKIE, $_REQUEST以及$_SERVER变量进行过滤转义。配置中special_chars是常量FILTER_SANITIZE_SPECIAL_CHARS的缩写,它能自动转义大部分危险字符例如: '"<>。而php手册对它的解释是:

HTML-escape ‘”<>& and characters with ASCII value less than 32, optionally strip or encode other special characters.

在这个情况下,新人们写出这样的代码我也不会太担心:

$foo = $_GET['foo'];
echo $foo;
在部分场合,我们可能还是需要未转义的变量,比如某个ajax接受的参数是一段json串,用这段代码即可获得原始数据:

$foo = filter_input (INPUT_GET, 'foo',  FILTER_UNSAFE_RAW);
fitler扩展与yahoo使用的yiv如出一辙,印象里似乎就是yahoo对yiv做了些修改贡献给php社区,但是暂时没找到出处。

来自:http://www.ooso.net/archives/559
安装:http://blog.suchasplus.com/2008/11/centos-rhel-install-php-5-filter-and-json-extension-howto-chinese.html



【社区开学季】360提供的Php防注入代码,上面这个模块也就不用下面这些代码来防止注入了。
   PHP的Fileinfo扩展是libmagic库的一个封装,可以用来获得文件的一些信息,如MIME类型,可以用来更好地代替magic_mime扩展中的 mime_content_type()函数。本文介绍本人在Windows环境下使用Fileinfo扩展获得文件MIME类型的实现步骤:
到下载适合自己PHP版本的Fileinfo扩展到你的PHP扩展目录,即php.ini中由extension_dir指定的目录
将存放文件类型信息的magic和magic.mime两个文件放置到一个目录下,不妨设为E:\php\extras下。这两个文件在附件压缩包中,是我从GnuWin32的share文件夹中提取出来的。其中magic可以用apache的conf目录下的magic代替;PHP的extras文件夹也有一个magic.mime文件,但是用它的话fileinfo扩展无法正确工作,不能用来代替附件中的这个magic.mime
修改php.ini,加入这样一行:
extension=php_fileinfo.dll
之后重新启动web服务器,确认成功加载扩展之后进行下一步代码测试
新建一个php脚本文件,用如下代码进行测试
file($testFile);
?>
输出:application/msword
上述代码中$magicFile即为上述所提到的文件magic,必须保证magic.mime与magic两个文件放在同一个文件夹    
    
简述
在某个项目中需要分析 PHP 代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑,这都不是最优的方式。
查询了 PHP 手册,发现其实 PHP 已经内置解析器的接口,那就是 PHP Tokenizer,这工具正是我想要的。使用 PHP Tokenizer 能简单、高效、准确的分析出 PHP 源代码的组成。
实例
官方站点对 Tokenizer 的文档很少,不过这不影响我们理解它。Tokenizer 组件仅仅包含两个函数:token_get_all 以及 token_name,它们分别用于分析 PHP 代码以及获取代码对应的标识符名称。
下面是个简单的实例,说明如何使用这两个函数:
以下为引用的内容:

对应的输出为
以下为引用的内容:
1 - T_OPEN_TAG    <?php
1 - T_ECHO    echo
1 - T_WHITESPACE    
1 - T_CONSTANT_ENCAPSED_STRING    "string1"
1 - T_CONSTANT_ENCAPSED_STRING    "string2"
1 - T_WHITESPACE    
1 - T_CLOSE_TAG    ?>
这里顺便说明下,$token 如果为数组,那么分别对应的三个数组成员为 token 标识符(可以用 token_name 获得字面量)、对应的源代码内容、以及对应的行号。
还有中情况就是 $token 为字符串,这可能的情况之一就是为 T_CONSTANT_ENCAPSED_STRING 等常量,在分析代码时要注意。如果对这点很在意,可以考虑使用这里的代码。
是的,调用方式非常的简单,我们的野心当然远远要比写个简单的循环要大得多。我们可以利用这个组件做写实事,例如下面的代码用于“压缩” PHP 代码,去除不不要的换行、空白以及注释
以下为引用的内容:

调用方式很简单,只需要使用
以下为引用的内容:
CompactCode::compact($source_code);
即可,返回的字符串就是压缩以后的内容。
    在做一些测试时,往往自己是搞开发的,网速还成,但是我们的用户会在偏远的山区,56K上网,为此,我们能保证我们看到的就是用户看到的么?当然不能,尤其是图片和css在一个较低的网速加载时会出现变形,图片加载时出现Load不进来,这一切都不是我们能预料的,为此,我们的网络是快,但我们的用户可能会用一个慢的网速来访问,会有各种情况,所以,我们必须和果模拟出这样一种情形,好提高我们的访问质量。
   有同事推荐,NetLimiter这个软件,我是Win7,发现确实不怎么的,安都安不上,于是重启动了电脑,同事说是QQ电脑管家有一个这样的软件,So,我又没有安这个(当时安了做了下更新,后来就卸载了,不想让它更新Win7,再就是占用资源),在网上闲逛了一下,发现有一个这样的独立软件可以用,太好了,Url:http://www.huacolor.com/soft/59780.html  名字: 网络流量管理器 6.8.2383.401正式版(QQ电脑管家提取版).rar   ,这个是个好玩意,呵呵,在此介绍给大家,至于怎么用,参考:http://www.duote.com/tech/5/14227.html
PHP中类的对象经类的重重包含在找出一原先类里的某个变量时出现多次->的原因探究:

其之所以出现多个->,让人一看还真的蒙了,特别是给你看一段代码片段,蒙了,于是经过推敲后,得出如下代码:
压缩会出现js错误最多的就是少分号,怎么解决避免的:
常看到一些大牛的JS源码 在function 前面加;
;function($,undefined) 是什么用处 ?
;(function($){$.extend($.fn...
现般在一些 JQuery 函数前面有分号
在前面加分号可以有多种用途:
1、防止多文件集成成一个文件后,高压缩出现语法错误。
2、这是一个匿名函数,一般js库都采用这种自执行的匿名函数来保护内部变量 (function(){})()
3、因为undefined是window的属性,声明为局部变量之后,在函数中如果再有变量与undefined作比较的话,程序就可以不用搜索undefined到window,可以提高程序性能
————————————————————————————————————————————————————

Yahoo!给我们带来了YUI  compressor!
一.安装Java,配置环境变量。http://java.sun.com/javase/downloads/index.jsp
下载,安装,一路Next,没有任何问题,对了,你可以修改一下路径。
安装完毕以后,需要配置一下JAVA_HOME环境变量。
配置方法如下。
1、点击我的电脑—>属相—>高级—>环境变量—>系统变量
2、新建变量,变量名JAVA_HOME 路径:E:\Program Files\Java\jdk1.6.0_11 (我的是在E盘,你的JDK安装到那个盘,就写那个盘)
3、找到path变量,在后面添加路径:;%JAVA_HOME%\jre6\bin
OK,一路确定,关闭窗口。
打开CMD,输入java -version
看看能不能出来版本?
java version “1.6.0_11″
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)


二:直接调用包的执行代码:java -jar E:/Tool/yuicompressor/yuicompressor-2.4.2.jar E:/CMS.ContentPager.js -o E:/CMS.ContentPager-min.js --charset utf-8

三:压缩示例,压缩实现:
使用yuicompressor-2.4.2.jar对js文件进行压缩和输出。
示例如下:
Java  -jar  yuicompressor-2.4.2.jar  public.js  -o  compress/public.js  --charset=utf-8
命令说明:
1.  java –jar  执行jar包内的主函数
2.  public.js   将被压缩的原版JS文件
3.  –o        压缩后输出 后面是输出文件路径
4.  –charset  压缩文件的编码格式

四:实际运用时,要注意目录中有空格的情况,会出现:Unable to access jarfile D:/Program,要用双引号引起来即可。
cd D:\Program Files\yuicompressor


DownLoad:

参考(带文件下载):http://yekui.iteye.com/blog/819278


以上来自来自:
http://yui.github.io/yuicompressor/
在线web压缩:http://ganquan.info/yui/?hl=zh-CN
TBCompressor 基于YUICompressor的淘宝封装的css和js压缩工具(不用命令,直接合用的批处理工具):
http://www.jb51.net/softs/25860.html
描述实现方法:http://wenku.baidu.com/view/163a48f3770bf78a65295423.html
UI界面版本CSDN下载:http://download.csdn.net/download/tianqi520/1499680
Bat脚本实现批量压缩:http://www.cnblogs.com/heiniuhaha/archive/2011/06/15/YUI-Compressor.html

这个哥们写了一个,感觉界面不错利用YUI Compressor :
http://www.ninja911.com/blog/?p=345
-----------【相关下载】-----------
YUI Compressor [ http://yuilibrary.com/downloads/ ]
CSDN:NBCompressor_v1.2.0.2 附带 aauto ,利用YUI Compressor :
http://download.csdn.net/download/anto72/6328001
前一阶段开发ios手机程序,客户端和服务器端主要通过json传输数据内容。从服务器端返回来的数据内容是json格式,查看很不方便,因此在网上找到如下的查询工具,方便查询。


我们知道Json是一种特殊Javascript对象,介绍几个Json查看工具。

http://jsonviewer.codeplex.com/

.Net开发的Json查看器,可反编译查看源码,呵呵。

https://addons.mozilla.org/en-us/firefox/addon/jsonview/

火狐的Json查看器插件,可在火狐中打开Json内容查看

https://chrome.google.com/extensions/detail/chklaanhfefbnpoihckbnefhakgolnmc

谷歌浏览器的Json查看器插件,功能同上

http://jsonviewer.stack.hu/
本文来自:http://blog.csdn.net/z343929897/article/details/8009106


最后,我自己的工具:http://tools.jackxiang.com/  里面有一个Json编辑器。
分页: 17/24 第一页 上页 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 下页 最后页 [ 显示模式: 摘要 | 列表 ]