[属性名称] 匹配包含给定属性的元素
[att=value] 匹配包含给定属性的元素 (大小写区分)
[att*=value] 模糊匹配
[att!=value] 不能是这个值
[att$=value] 结尾是这个值
[att^=value] 开头是这个值
[att1][att2][att3]... 匹配多个属性条件中的一个

===========================================下面举例================================

                   <UL id=comparePro>
                        <li id=compare_prod_list_001>信用卡贷款活动产品1-中国建设银行</li>
                        <li id=compare_prod_list_002>信用卡贷款活动产品2-中国建设银行</li>
                        <li id=compare_prod_list_003>信用卡贷款活动产品3-中国建设银行</li>

                        <li id=other>其他</li>
                    </UL>

要取到所有 id以compare_prod_list_开头的<li>   :  var list=$('li[id^=compare_prod_list_]');

来自:http://cyxu2004.blog.163.com/blog/static/457687182011112851043/

<tr align="center" id="_tr_809401de-0f4b-11e1-b237-001e0bdc11a2" class="odd">
这样的没有时刷新页面的判断(后面的Id值是每一个不一样的):
IE6,IE7下按钮(BUTTON)变宽的解决方法:


来自:http://niutuku.com/tech/css/250633.shtml

或则单独写死在style里:

写在Html页面里宽和高:

测试一下:

如果用双引号引起来:
string(18) "450311199001010516"
string(18) "450311199001010517"
显然是不相等的!

但如果用get方式传入呢?经测试get是相等的:
我很想知道你的get为什么是等的。。。
哎。
有人认为:
最初用户输入时候,进行处理,也就是当字符串了。
这有啥结论的?
就两个知识点:

1、POST GET的,PHP默认都转为字符串处理
2、PHP脚本中,定义的int型,如果超出范围,会被转为float型而失去精度
在很多框架里有这样的情况,一个config文件里直接就return了(return array("name"=>"jack","info"=$infoArr)),但是没有一个函数,于是觉得纳闷了,怎么能这样呢,其实往往这个文件可能是一个共公的return文件,于是就写成这样了,再由其它文件包含进来,如:


自己实践Ok版本:

因为包含的内容里有:
<?php defined('SYS_PATH') or die('No direct script access.');
所以加了一行:
                   define('SYS_PATH', $this->_domain_path . 'libraries' . DIRECTORY_SEPARATOR);
才能读出来。

return 一定要在函数里面吗
没有这么规定吧
中庸就是春江  10:00:27
确实没有这么规定,但你在函数之外使用return就会报错
单曲  10:03:55
php在哪里都可以return的~~
天枫  10:05:27
没有吧
现在一般config文件一般都直接return array
单曲  10:05:46
e你。
嗯。
天枫  10:06:13

反正我这么写
不会报错啊
前程似锦  10:06:23
因为现在的config 都是inc进来的
单曲  10:06:35
inc?
前程似锦  10:06:37
老子的框架也这么搞的
中庸就是春江  10:06:38
js里面是这样的,php不报错?
天枫  10::
include
单曲()  :06:47
$config = 'config.php';
这个config.php  return一个数组
天枫  10:06:56
意思是直接运行这个config文件会报错?
单曲  10:06:59
$config 就能得到这个数组了。
前程似锦  10:07:04
$config = include 'config.php';
中庸就是春江  10:07:04
还能这样?
这个还差不多


     写在最后,在新的版本里是不会报错的,确实这样搞有点违反规则,直接就return,想到main里去么?但框架里往往有这么玩的客观存在。
今天调试遇到一个错误::Call-time pass-by-reference has been deprecated...
查了老一会儿,在网上找了下答案,于是找到了并修改了一下php.ini就好了,如下:
Warning: Call-time pass-by-reference has been deprecated解决方法
修改php.ini就可以了。
1. 在PHP.ini中搜索关键字 : allow_call_time_pass_reference 没有的自行建立。
2. 将 Off 改成 On ,Web Server重起就OK了~
allow_call_time_pass_reference = Off 变成 allow_call_time_pass_reference = On

从php手册中可以找到:
allow_call_time_pass_reference boolean
是否启用在函数调用时强制参数被按照引用传递。此方法已不被赞成并在 PHP/Zend 未来的版本中很可能不再支持。鼓励使用的方法是在函数定义中指定哪些参数应该用引用传递。鼓励大家尝试关闭此选项并确保脚本能够正常运行,以确保该脚本也能在未来的版本中运行(每次使用此特性都会收到一条警告,参数会被按值传递而不是按照引用传递)。
在函数调用时通过引用传递参数是不推荐的,因为它影响到了代码的整洁。如果函数的参数没有声明作为引用传递,函数可以通过未写入文档的方法修改其参数。要避免其副作用,最好仅在函数声明时指定那个参数需要通过引用传递。
当allow_call_time_pass_reference=Off时

要想通过引用来传递参数$b,程序可改为


若是在PHP,用户自定义函数中传入引用参数,例如:

你可能须要开端该设置。

Linux下是这样的报错:Call-time pass-by-reference has been removed
解决 PHP Fatal error: Call-time pass-by-reference has been removed
如果这样使用函数(或者类)的话,会产生一个 PHP Fatal error:
foo(&$var);
实际上,这样用法在php5.3中就会有提示,只是之前的仅仅会提示Deprecated而已。


php.ini中allow_call_time_pass_reference参数的意思

从php手册中可以找到:allow_call_time_pass_reference boolean,在PHP5.3里是一个警告可以用:

来去掉,但是在PHP5.4里就成了一个错误,得修改,如下:

参考:http://www.azuis.me/blog/archives/175
背景:看到一个redis的代码用php写的,用到master和slave结构,用到类的函数里的静态变量,一个master里和slave里都用同一个static $_cache;觉得奇怪了,于是查一下这样用它们之间有关联么?一查没有关联(两个变量一样感觉有关联),这就是静态变量的用法,有点意思。
静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。
参考:http://www.nowamagic.net/php/php_StaticVariable.php
一)PHP static静态变量只存在函数里的一个实践情况及应用、实践、总结:



学习PHP静态变量的基础:




输出:01234
也就是每次用:static $a = 0;时,在第二次无效了。
调用的时候 static $count = 0; 语句会重复执行,这为什么不会导致count变量被重复赋值呢?做如下测试:


结果:


代码第5行第一次输出$a的值为4,由此推测PHP在页面初始化的时候分配静态变量的内存,此时使用了同一个变量的最后一次声明的值(这个可以把4改为其他数测试)。代码第7行调用unset函数销毁变量$a,再次输出$a的值时看到未定义变量的提示,说明变量已经被销毁。

第10行再次输出时,输出结果仍是4而不是20,有两种可能,一个是php再次初始化了$a的值,另一种是php使用了$a被销毁前的值,这个问题在第20行输出的时候解决。第16行$a销毁的时候值为10,第19行声明后输出仍为10。

第11行将$a的值修改为10,在14行再次声明$a,17行输出认为10。推测为重复声明时php还是使用静态变量内存中的值,而不再次赋值。

至此,手册中发现的问题,大致上已经解决了,即递归调用中的声明没有改变$count的值,所以递归在$count=10时成功停止。

原文来源:
http://www.cnblogs.com/darkbluever/archive/2011/07/18/2109533.html



PHP static局部静态变量和全局静态变量总结:
静态局部变量的特点:
1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它。倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值
2.静态局部变量只会初始化一次
3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。
4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

---------- 调试PHP ----------
6
7
8

Output completed (0 sec consumed) - Normal Termination

关于静态全局变量:


所以静态全局变量使用并不多。

AddTime:2017/12/11,标题:【php】php函数中static静态变量的使用
用法:
其实函数中的静态变量和类中的静态变量的用法大同小异

function myFunc(){
    //函数内的静态变量只作用于此函数
    static $myVariable='jianzhong5137';
}

实例测试:funstatic.php


php  funstatic.php
1
2
3
4
5
6
7
8
9
10

1
1
1
1
1
1
1
1
1
1

代码来自:http://blog.csdn.net/yanhui_wei/article/details/8246096



二)附上类里的static及用self读取的一个结论:

结论:
(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";
(2)、静态方法不需要实例化即可调用。同上
(3)、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;
(4)、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;
背景:关于自动加载类文件是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防注入代码,上面这个模块也就不用下面这些代码来防止注入了。
分页: 17/24 第一页 上页 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 下页 最后页 [ 显示模式: 摘要 | 列表 ]