浏览模式: 普通 | 列表

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修改开始
...

阅读全文…
以下就是Windows 2003 + IIS 下,如何在PHP扩展里打开openssl支持的方法:

1、在c:\windows\php.ini中
将;extension=php_openssl.dll前面分号(注释)去掉

2、复制php安装目录中的以下2个文件:

libeay32.dll
ssleay32.dll

复制到 C:\windows\system32

3、复制PHP\ext目录中的 php_openssl.dll 至 C:\windows\system32
4、重启IIS


=====================================================
isapi方式需要指定变量 PATH 和 PHPRC
遇到问题:如果没有生效,首先看php.ini是否成功加载,在phpinfo()中看 Configuration File (php.ini) Path (none)
...

阅读全文…

php使用 memcache 来存储 session

[ 2016-07-25 16:28:40 | 作者: admin ]
Memcache和PHP memcach扩展安装请见http://koda.iteye.com/blog/665761

设置session用memcache来存储

方法I: 在 php.ini 中全局设置
Php.ini代码 收藏代码
         session.save_handler = memcache
         session.save_path = "tcp://127.0.0.1:11211"



方法II: 某个目录下的 .htaccess
Php.ini代码 收藏代码
         php_value session.save_handler "memcache"
         php_value session.save_path "tcp://127.0.0.1:11211"

...

阅读全文…