浏览模式: 普通 | 列表
windows平台下面,php5.3开始不支持isapi模式运行,而isapi比fastcgi执行效率高,但部分代码只支持php5.3以上版本所以需要在平台上运行2个版本。以此方便根据程序选择php的运行方式是isapi或者fastcgi模式。

1、先部署好php5.2.10,放在d:\php,采用isapi模式能够正常运行,
          特别注意的是设置好环境变量 PHPRC为d:\php; Path后面追加路径 d:\php;
          在iis的web服务扩展中,加上 php5isapi.dll 的扩展为允许状态,测试运行phpinfo()会发现加载路径 d:\php\php.ini。

2、再部署好php5.3.29,放在d:\php5.3下,采用fastcgi模式运行,在fcgiext.ini文件底部参考...

阅读全文…
p.s. 判断类是否已经实例化的函数 class_exists() 有2个参数,必须注意第二个参数$autoload默认为true 。
当你的主程序没有定义 autoload ,而插件定义了之后,主程序下调用就发生了变化,调用函数中的 class_exists必须指定不启用 autoload,否则就会出现问题:它自动去调用插件的autoload来加载类了。

这个函数在手册上的解释是:

This function checks whether or not the given class has been defined.

从字面很容易知道它的用途,就是检测一下要检测的类名是否已经定义,但是真正要注意的位置在它的参数上

bool class_exists ( string $class_name [, ...

阅读全文…

PHP类的自动载入机制,__autoload()函数

[ 2017-02-16 09:16:55 | 作者: admin ]
php的自动加载:

在php5以前,我们要用某个类或类的方法,那必须include或者require,之后才能使用,每次用一个类,都需要写一条include,麻烦

php作者想简单点,最好能引用一个类时,如果当前没有include进来,系统能自动去找到该类,自动引进~

于是:__autoload()函数应运而生。

通常放在应用程序入口类里面,比如discuz中,放在class_core.php中。

先讲浅显的例子:

第一种情况:文件A.php中内容如下

<?php
class A{
  public function __construct(){
   echo 'fff';
  }
}
?>

文件C.php 中内容如下:
<?php
function __autoload($class)
...

阅读全文…
网上关于SPL spl_autoload_register的用法的例子有很多很多,自己也查看了很多,但感觉介绍得并不太详细,使自己真正能明白其中的原理苦闷了好一会儿。现将自己的理解记录下来。

关于 Standard PHP Library (SPL) 的 autoload 的方法,这些都是 PHP 5.1.2 之后才加上的方法。为了方便,这里做了一些设定。假设你有类文件,放在/home/user/class/foo.class.php, 你当前的文件为/home/user/webroot/test.php, 示例代码如下。

在文件test.php中:
<?php
  
class autoload
{
     public static function load( $class name )
     {
         $filename = "/home/user/class/".$classname."class.php";
...

阅读全文…
由于session使用了memcache,造成phpmyadmin经常出现不稳定的现象,表现为进入后数秒可能退出重新登录又可以了。

p.s. 发现把phpmyadmin改为 auth_type参数的值修改为 http 就可以了


参考:

$cfg['Servers'][$i]['auth_type'] string ['HTTP'|'http'|'cookie'|'config'|'signon']
        Whether config or cookie or HTTP or signon authentication should be used for this server.
#注释:auth_type可选的参数有:http,cookie,config,signon


        'config...

阅读全文…
dirname(__FILE__) 取到的是当前文件的绝对路径,也就是说,比起相对路径,查找速度是最快的。
比如当前文件是放在(d:\www\)下,文件名是test.php。
测试的代码如下:
<?php
echo __FILE__ ; // 取得当前文件的绝对地址,结果:D:\www\test.php
echo dirname(__FILE__); // 取得当前文件所在的绝对目录,结果:D:\www\
echo dirname(dirname(__FILE__)); //取得当前文件的上一层目录名,结果:D:\
?>


使用方法提示,
dirname(__FILE__) 取到的是当前文件的绝对路径,也就是说,比起相对路径,查找速度是最快的。
如果重复一次可以把目录往上提升一个层次:
比如:$d = dirname(dirname(__FILE__));
...

阅读全文…

PHP解析URL并得到URL中的参数

[ 2016-11-15 12:20:57 | 作者: admin ]
代码会解释 "PHP解析URL并得到URL中的参数" 这句话~ ^_^
<?php
//例举一个URL格式的字符串:
$str = 'http://test.com/testdir/index.php?param1=10&param2=20&param3=30&param4=40&param5=50&param6=60';

//1.0 用parse_url解析URL,此处是$str
$arr = parse_url($str);
var_dump($arr);


//2.0 将URL中的参数取出来放到数组里
$arr_query = convertUrlQuery($arr['query']);
var_dump($arr_query);


//3.0 将 参数数组 再变回 字符串形式的参数格式
var_dump(getUrlQuery($arr_query));
...

阅读全文…
这几天看到很多人问discuz uc.key 泄露导致代码注入漏洞uc.php的解决方法,也看了最近大家提供的一些解决方案,对比文件后发现最新版本的uc.php已经修复了大家说的问题,但阿里云一样有相关的提示,下面提供下相关的修改说明,大家可以试试看

首先找到这个文件/api/uc.php

第一处修改
         if(!API_UPDATEBADWORDS) {
                     return API_RETURN_FORBIDDEN;
                     }
                     $data = array();
                     if(is_array($post)) {
                     foreach($post as $k => $v) {
         //dz uc-key修改开始
...

阅读全文…