当前位置:  编程技术>php
本页文章导读:
    ▪我的升级      一、前言       最近在刚完成了pw版本的升级程序,拿了个拥有3万多用户的小站跑了下,结果一次503的time out错误,最后修修补补跑完之后发现用了将近1个小时。于是将.........
    ▪PHP 面向对象:设计模式之单例模式(转)      阅读原文:http://www.yzswyl.cn/blread-1601.html今天群里有个朋友在问“private function __construct() {}”这样能防止直接new对象吗?于是呢我也去网上找了篇详细的资料来分析下,感觉讲的还是蛮不.........
    ▪PHP错误:Forbidden You don't have permission to access / on this server.(转)      今天老大让在xp下搭建一个FTP服务器,一波三折,最后终于在老大的帮助下搞定了。。。其中通过ip访问的时候 提示 Forbidden You don't have permission to access / on this server.找到一个解决方法,特此记.........

[1]我的升级
    来源:    发布时间: 2013-10-15

一、前言

       最近在刚完成了pw版本的升级程序,拿了个拥有3万多用户的小站跑了下,结果一次503的time out错误,最后修修补补跑完之后发现用了将近1个小时。于是将运行最慢的几个模块分析了下SQL语句。记录下。

 

二、环境描述

数据库:mysql,原数据和目标数据同一个服务。

操作系统:本地的ubuntu12.10

描述:原PW87:用户数据量3.4W,2.1W帖子数据,7.9W回复数据,3.1W原私信数据,数据库使用的引擎是myisam,

新pw9的数据库采用innodb引擎

 

二、sql记录分析

监听到一条用户数据查询如下:

 select * from pw_members order by uid limit 10000, 1000;

用explain分析得到如下:

myiasm引擎:

mysql> explain select * from pw_members order by uid limit 10000, 1000;

+----+-------------+------------+------+---------------+------+---------+------+-------+----------------+
| id | select_type | table      | type | possible_keys | key  | key_len | ref  | rows  | Extra          |
+----+-------------+------------+------+---------------+------+---------+------+-------+----------------+
|  1 | SIMPLE      | pw_members | ALL  | NULL          | NULL | NULL    | NULL | 34730 | Using filesort |
+----+-------------+------------+------+---------------+------+---------+------+-------+----------------+
1 row in set (0.00 sec)

 

innodb引擎:

mysql> explain select * from nw_user order by uid limit 10000, 1000;
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------+
| id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows  | Extra |
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------+
|  1 | SIMPLE      | nw_user | index | NULL          | PRIMARY | 4       | NULL | 11000 |       |
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------+
1 row in set (0.01 sec)


两表使用都对uid建立唯一索引,

换种写法:

SELECT uid FROM pw_members WHERE uid > 10000  ORDER BY uid LIMIT 1000;

myisam引擎:

mysql> explain SELECT uid FROM pw_members WHERE uid > 10000  ORDER BY uid LIMIT 1000;+----+-------------+------------+-------+---------------+---------+---------+------+-------+--------------------------+
| id | select_type | table      | type  | possible_keys | key     | key_len | ref  | rows  | Extra                    |
+----+-------------+------------+-------+---------------+---------+---------+------+-------+--------------------------+
|  1 | SIMPLE      | pw_members | range | PRIMARY       | PRIMARY | 4       | NULL | 26074 | Using where; Using index |
+----+-------------+------------+-------+---------------+---------+---------+------+-------+--------------------------+
innodb引擎:

mysql> explain select * from nw_user where uid > 10000 order by uid limit 10000, 1000;
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------------+
| id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows  | Extra       |
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------------+
|  1 | SIMPLE      | nw_user | range | PRIMARY       | PRIMARY | 4       | NULL | 17461 | Using where |
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------------+

我的结论:

横向相比,对于第一种写法,innodb处理的方式会比myisam优雅点,而第二种写法则差不多。

纵向相比,则第二种写法处理起来无论在innodb或是myisam都比第一种写法优雅。

注:这次的数据量确实不大,所以得出这个结论也许有些站不住脚,等我遇到更大数据量的时候再来回头看看这个结论如何。

于是我将从myisam有主键的处理查询都改为第二种形式,从innodb处理的则根据情况处理。

 

三、

      第一次处理这种数据转移,没有什么经验,也正在摸索阶段,希望各位大大么多多留言哈

本文链接


    
[2]PHP 面向对象:设计模式之单例模式(转)
    来源:    发布时间: 2013-10-15

阅读原文:http://www.yzswyl.cn/blread-1601.html

今天群里有个朋友在问“private function __construct() {}”这样能防止直接new对象吗?于是呢我也去网上找了篇详细的资料来分析下,感觉讲的还是蛮不错的,推荐给大家:

单例模式要解决的问题就是“如何让这个类只有一个实例”。

我们的web应用中,大量使用了数据库连接,如果反复建立与数据库的连接必然消耗更多的系统资源。

我们如何解决这个问题,建立唯一的数据库连接是必要的方式。

我们又如何知道与这个数据库的连接是否已经建立? 还是需要现在建立?

单例模式可以解决这个问题。

先假设我们需要一个类完成在内存中只有一份的功能,我们该如何做呢?

我们一步一步的使用前面学过的知识来写一个单例的例子。

前面学过,每次用 new 类名 的方式,就可以创建一个对象。我们必须禁止外部程序用 new 类名的方式来创建多个实例。

解决办法是:我们将构造函数设置成 private ,让构造函数只能在内部被调用,而外部不能调用。这样,这个类就不能被外部用 new 的方式建立多个实例了。

以下是不能被外部用new实例化的类。

?
<?
class A{
    private function __construct(){}   
}
$a = new A();
?>

程序运行结果为:

?
Fatal error: Call to private A::__construct() from invalid context in E:\PHPProjects\test.php on line 6

我们已经禁止外部用new实例化这个类,我们改如何让用户访问这个类呢?前门堵了,我们需要给用户留个后门。
解决办法是:static 修饰的方法,可以不经实例化一个类就可以直接访问这个方法。

?
//不能用new实例化的类.<br>
//static的方法留给外部访问.<br>
//在方法内部返回实例.<br><br>
<?
class A{
    private function __construct(){}
    static function getClassA(){
        $a = new A();
        return $a;
    }       
}
// 看到这里确实返回的是 A 的实例.但不是同一个对象.
$a1 = A::getClassA();
$a2 = A::getClassA();
echo "\$a1 的类是 ".get_class($a1)." , \$a2 是 ".get_class($a1);
if($a1 === $a2){
   echo "<br> \$a1 \$a2 指向同一对象.";
}else{
   echo "<br> \$a1 \$a2 不是一个对象.";
}
?>

 程序运行结果为:

?
$a1 的类是 A , $a2 是 A
$a1 $a2 不是一个对象.

我们已经通过static方法返回了A的实例。但还有问题。我们如何保证我们多次操作获得的是同一个实例的呢?

解决办法:static的属性在内部也只有一个。static 属性能有效的被静态方法调用。将这个属性也设置成private,以防止外部调用。先将这个属性设置成 null。每次返回对象前,先判断这个属性是否为 null 。如果为 null 就创建这个类的新实例,并赋值给这个 static 属性。如果不为空,就返回这个指向实例的 static 属性。

?
//不能用new实例化的类.<br>
//static的方法留给外部访问.<br>
    
[3]PHP错误:Forbidden You don't have permission to access / on this server.(转)
    来源:    发布时间: 2013-10-15

今天老大让在xp下搭建一个FTP服务器,一波三折,最后终于在老大的帮助下搞定了。。。

其中通过ip访问的时候 提示 Forbidden You don't have permission to access / on this server.

找到一个解决方法,特此记录

 

php的配置文件httpd.conf。

在原有的位置文件中找到配置节

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
</Directory>

 

修改成

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
# Deny from all
Allow from all

#允许所有访问
Satisfy all
</Directory>

 

 

还有

 

<Directory "D:/Wamp5/www">

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride all

#
# Controls who can get stuff from this server.
#
# onlineoffline tag - don't remove
Order Deny,Allow
Deny from all
Allow from 127.0.0.1

</Directory>

 

修改成

 

<Directory "D:/Wamp5/www">

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride all

#
# Controls who can get stuff from this server.
#
# onlineoffline tag - don't remove
Order Deny,Allow
# Deny from all

# Allow from 127.0.0.1
Allow from all

</Directory>

 

然后保存,重启服务,在访问就解决了这个问题。

本文链接


    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3