分类目录归档:开发语言

解决IIS7运行ASP特别慢问题

装了WIN7,iis版本是7.0了,架设好了环境,绑上以前的ASP程序之后,发现运行巨慢,查看各项设置,均无错误,无奈Google之,得到答案:
更改MSSQL连接语句:

Provider=Sqloledb;User ID=数据库帐号;Password=数据库密码;Initial Catalog=数据库名;Data Source=数据库IP;

更改为

Driver={SQL SERVER}; Server=数据库IP;UID=数据库帐号;PWD=数据库密码;Database=数据库名;

完事了,运行速度比WIN2003+iis6还快不少。

php 数组去重复[转]

去除数组中的重复项
一维数组的重复项:
使用array_unique函数即可,使用实例如下:

<?php
$aa=array(“apple”,”banana”,”pear”,”apple”,”wail”,”watermalon”);
$bb=array_unique($aa);
print_r($bb);
?>

结果如下:Array ( [0] => apple [1] => banana [2] => pear [4] => wail [5] => watermalon ) 。
二维数组的重复项:
对于二维数组咱们分两种情况讨论,一种是因为某一键名的值不能重复,删除重复项;另一种因为内部的一维数组不能完全相同,而删除重复项,下面举例说明:
㈠因为某一键名的值不能重复,删除重复项

<?php
function assoc_unique($arr, $key)
{
$tmp_arr = array();
foreach($arr as $k => $v)
{
if(in_array($v[$key], $tmp_arr))//搜索$v[$key]是否在$tmp_arr数组中存在,若存在返回true
{
unset($arr[$k]);
}
else {
$tmp_arr[] = $v[$key];
}
}
sort($arr); //sort函数对数组进行排序
return $arr;
}
$aa = array(
array(‘id’ => 123, ‘name’ => ‘张三’),
array(‘id’ => 123, ‘name’ => ‘李四’),
array(‘id’ => 124, ‘name’ => ‘王五’),
array(‘id’ => 125, ‘name’ => ‘赵六’),
array(‘id’ => 126, ‘name’ => ‘赵六’)
);
$key = ‘id’;
assoc_unique(&$aa, $key);
print_r($aa);
?>

显示结果为:Array ( [0] => Array ( [id] => 123 [name] => 张三 ) [1] => Array ( [id] => 124 [name] => 王五 ) [2] => Array ( [id] => 125 [name] => 赵六 ) [3] => Array ( [id] => 126 [name] => 赵六 ) )
㈡因内部的一维数组不能完全相同,而删除重复项

<?php
function array_unique_fb($array2D){
foreach ($array2D as $v){
$v = join(“,”,$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$temp[$k] = explode(“,”,$v); //再将拆开的数组重新组装
}
return $temp;
}
$aa = array(
array(‘id’ => 123, ‘name’ => ‘张三’),
array(‘id’ => 123, ‘name’ => ‘李四’),
array(‘id’ => 124, ‘name’ => ‘王五’),
array(‘id’ => 123, ‘name’ => ‘李四’),
array(‘id’ => 126, ‘name’ => ‘赵六’)
);
$bb=array_unique_fb($aa);
print_r($bb)
?>

显示结果:Array ( [0] => Array ( [0] => 123 [1] => 张三 ) [1] => Array ( [0] => 123 [1] => 李四 ) [2] => Array ( [0] => 124 [1] => 王五 ) [4] => Array ( [0] => 126 [1] => 赵六 ) )

get_headers()返回"HTTP request failed!" (Read 1135 times)

<?php
// print_r(get_headers(‘http://www.digg.com’, 1));
// print_r(get_headers(‘http://digg.com’, 1));
?>

Warning: get_headers(http://www.digg.com) [function.get-headers]: failed to open stream: HTTP request failed! in /home/jacob/workspace/tester.php on line 3
Warning: get_headers(http://www.digg.com) [function.get-headers]: failed to open stream: HTTP request failed! in /home/jacob/workspace/tester.php on line 6

Is allow_url_fopen set to true within your php.ini? If not the function will fail right away.

即,php.ini文件中打开allow_url_fopen。

opencart开发架构分析[转]

1. opencart的系统架构
1.1. 架构分析
opencart是有自己的开发架构的,其架构的核心都在systemengine 下,访问控制统一用 根目录下的 index.php 来协调。
Route 就是起到一个中转器的作用,它会根据你的Route目录去找到它要执行的方法,比如:

index.php?route=account/login

根据这个route,op的框架会找到Controller下的Account里的Login.php, 注意login.php的类名一定是这种格式的

ControllerAccoutLogin{…}

否则Op就识别不了目录,route=account/login 会执行类的默认方法:index
如果要指明执行那个方法,则在login后面再加上

route=account/login/你定义的方法名

并且在login.php 里定义你要执行的方法。
同理,Op里 load 语言包和model等都是以这种机制为基础的。请结合程序,应该是比较好理解的。
至于View层,Op都是把要显示的数据加载到 this->data里去的,这样就可以用 $变量名 在页面上显示变量了。
1.2. Op系统配置文件 (这段是引用别人的。。。找不到出处了 – – 作者看到请联系我)
在Op的目录下,可以发现一个 Config.php文件,这里是配置一些OP要使用到的配置路径,并且是每个单独项目里都有一个单独的配置(这点要注意),比如admin和catalog下就分别有这个文件。
OpenCart是使用面向对象编程的,同时又使用了MVC的设计思想,因此在解读其源代码时是看不到过程式的代码的。同时它把MVC框架部分单独放在library目录中,这个部分的内容一般是不作修改的。就象你显式地使用其它框架编程一样。
Engine下有一个装配器文件:loader.php,这个文件中只有一个类:loader,实际上是一个调度程序,框架中的其它组件,如controller,module,session,cache,language统统由它装载调度。
为了让系统运行起来, 象所有的PHP程序一样,OpenCart需要把系统中的一些重要的参数从config.php中,对于这个文件,按惯例,使用一句:

require(‘config.php’);

连接数据库的DSN参数和相关目录设置就可用了,下面有必要将config.php文件列表在下,这有利于我们理解OpenCart的设计思想:

// HTTP
define(‘HTTP_SERVER’, ‘http://localhost/cnopencart/’);
define(‘HTTP_IMAGE’, ‘http://localhost/cnopencart/image/’);
// HTTPS
define(‘HTTPS_SERVER’, ”);
define(‘HTTPS_IMAGE’, ”);
// DIR
define(‘DIR_CACHE’, ‘C:wampwwwcnopencart/cache/’);
define(‘DIR_DOWNLOAD’, ‘C:wampwwwcnopencart/download/’);
define(‘DIR_IMAGE’, ‘C:wampwwwcnopencart/image/’);
define(‘DIR_LIBRARY’, ‘C:wampwwwcnopencart/library/’);
define(‘DIR_MODEL’, ‘C:wampwwwcnopencartcatalog/model/’);
define(‘DIR_CONTROLLER’, ‘C:wampwwwcnopencartcatalog/controller/’);
define(‘DIR_LANGUAGE’, ‘C:wampwwwcnopencartcatalog/language/’);
define(‘DIR_EXTENSION’, ‘C:wampwwwcnopencartcatalog/extension/’);
define(‘DIR_TEMPLATE’, ‘C:wampwwwcnopencartcatalog/template/’);
// DB
define(‘DB_HOST’, ‘localhost’);
define(‘DB_USER’, ‘root’);
define(‘DB_PASSWORD’, ‘111111’);
define(‘DB_NAME’, ‘opencart’);
?>

与别的系统可能有些不同是的,OpenCart有一个config类用来从别的设置文件或数据库里存取数据,这些数据也是在程序一开始运行就需要的,因此第一个由loader装载的就是config类,装载config类就只简单地用了一句:

// Config
$config =$this->load->….

其它所有的对象这是以这种方法来进行管理。
2. Op的加载器
2.1. 系统加载
在System下有一些公共类,所以的基础类和公共类都是通过index.php 去加载的,这样你就可以去加载你需要的类和文件了。比如:

$loader = new Loader();
Registry::set(‘load’, $loader);

然后你就可以在系统里调用Load方法去加载需要的Model和language 文件了。调用方式如下:

$this->load->….

Op里就是通过这个方法来注册他所需要的资源的。

php 序列化(serialize)与反序列化(unserialize)

把复杂的数据类型压缩到一个字符串中
serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量
eg:
$stooges = array(‘Moe’,’Larry’,’Curly’);
$new = serialize($stooges);
print_r($new);echo ”
“;
print_r(unserialize($new));
结果:a:3:{i:0;s:3:”Moe”;i:1;s:5:”Larry”;i:2;s:5:”Curly”;}
Array ( [0] => Moe [1] => Larry [2] => Curly )
当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理:
$shopping = array(‘Poppy seed bagel’ => 2,’Plain Bagel’ =>1,’Lox’ =>4);
echo ‘<a href=”next.php?cart=’.urlencode(serialize($shopping)).'”>next</a>’;
margic_quotes_gpc和magic_quotes_runtime配置项的设置会影响传递到unserialize()中的数据。
如果magic_quotes_gpc项是启用的,那么在URL、POST变量以及cookies中传递的数据在反序列化之前必须用stripslashes()进行处理:
$new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc开启
$new_cart = unserialize($cart);
如果magic_quotes_runtime是启用的,那么在向文件中写入序列化的数据之前必须用addslashes()进行处理,而在读取它们之前则必须用stripslashes()进行处理:
$fp = fopen(‘/tmp/cart’,’w’);
fputs($fp,addslashes(serialize($a)));
fclose($fp);
//如果magic_quotes_runtime开启
$new_cat = unserialize(stripslashes(file_get_contents(‘/tmp/cart’)));
//如果magic_quotes_runtime关闭
$new_cat = unserialize(file_get_contents(‘/tmp/cart’));
在启用了magic_quotes_runtime的情况下,从数据库中读取序列化的数据也必须经过stripslashes()的处理,保存到数据库中的序列化数据必须要经过addslashes()的处理,以便能够适当地存储。
mysql_query(“insert into cart(id,data) values(1,'”.addslashes(serialize($cart)).”‘)”);
$rs = mysql_query(‘select data from cart where id=1’);
$ob = mysql_fetch_object($rs);
//如果magic_quotes_runtime开启
$new_cart = unserialize(stripslashes($ob->data));
//如果magic_quotes_runtime关闭
$new_cart = unserialize($ob->data);
当对一个对象进行反序列化操作时,PHP会自动地调用其__wakeUp()方法。这样就使得对象能够重新建立起序列化时未能保留的各种状态。例如:数据库连接等。

PHP高级工程师的面试题【转】

这些题目都能搞定,你就是高高手了~

1. 基本知识点
HTTP协议中几个状态码的含义:503 500 401 200 301 302。。。
Include require include_once require_once 的区别.
PHP/Mysql中几个版本的进化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改进等等。
HEREDOC介绍
写出一些php魔幻方法;
一些编译php时的configure 参数
向php传入参数的两种方法。
(mysql)请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;
error_reporting 等调试函数使用
您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
posix和perl标准的正则表达式区别;
Safe_mode 打开后哪些地方受限.
写代码来解决多进程/线程同时读写一个文件的问题。
写一段上传文件的代码。
Mysql 的存储引擎,myisam和innodb的区别。
2. web 架构,安全,项目经验
介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。
使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567 ,请先打开mod_rewrite.
MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
写出一种排序算法(原理),并说出优化它的方法。
请简单阐述您最得意的开发之作
对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
您是否用过模板引擎? 如果有您用的模板引擎的名字是?
请介绍Session的原理,大型网站中Session方面应注意什么?
测试php性能和mysql数据库性能的工具,和找出瓶颈的方法。
正则提出一个网页中的所有链接.
介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理。
您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点。
大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?
相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成四种大小缩略图,视频文件要转成flv供flash播放。叙述要涉及的各类开源软件和简单用途。
一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。
3. unix/linux 基本使用
linux下查看当前系统负载信息的一些方法。
vim的基本快捷键。
ssh 安全增强方法;密码方式和rsa key 方式的配置。
rpm/apt/yum/ports 装包,查询,删除的基本命令。
Makefile的基本格式,gcc 编译,连接的命令,-O0 和-O3区别。
gdb,strace,valgrind的基本使用.
4. 前端,HTML,JS
css盒模型。
javascript中的prototype。
javascript中this对象的作用域。
IE和firefox事件冒泡的不同。
什么是怪异模式,标准模式,近标准模式。
DTD的定义
IE/firefox常用hack.
firefox,IE下的前端js/css调试工具。
 
 

OpenCart主要文件结构介绍

OpenCart是国外著名的开源电子商务网站,由英国人Daniel一人独立开发。
OpenCart的优势在于前台界面的设计非常适合欧美购物者的浏览习惯:简洁,直观,唯美!后台也非常的简洁明了,而且功能强大,对于初学者来说非常容易上手,对于大多数经验丰富的网店经营者来说,OpenCart的后台管理功能也基本能满足其需求。
OpenCart可以说是最适合国内用户建设外贸网店的程序!
OpenCart的主要特点包括:
1. 网站模版化,用户可自由更滑,编辑模版文件
2. 产品评论功能
3. 产品评分功能
4. 可添加下载类产品
5. 图片自动调整大小
6. 添加相关产品功能
7. 优惠券(Coupon Code)功能
8. 搜索引擎优化功能
其程序结构也非常的清晰明了,对开发者非常友好:
OpenCart 1.x 使用 MVC(+L) style framework:
Model – 数据库层
View – 模版展示
Controller – 主要代码层
Language – 本地化
所以对于前台的产品页面,主要有4个相关文件:
M: catalogmodelcatalogproduct.php
V: catalogviewtemplateproductproduct.tpl
C: catalogcontrollerproductproduct.php
L: cataloglanguageenglishproductproduct.php
以此类推, 在管理后台, 如要编辑这些文件, 也主要有下面这4个文件:
M: adminmodelcatalogproduct.php
V: adminviewtemplatecatalogproduct.tpl
C: admincontrollercatalogproduct.php
L: adminlanguageenglishcatalogproduct.php
前台控制程序列表-catalog/controller
Catalog
|controller
|account 会员功能
|—— account.php 会员功能主页
|—— address.php 会员功能-地址管理
|—— create.php 创建账号
|—— download.php 会员功能-商品下载
|—— edit.php 会员功能-编辑个人资料
|—— forgotten.php 取回密码
|—— history.php 会员功能-订单记录列表
|—— invoice.php 折扣券接收处理程序
|—— login.php 登入
|—— logout.php 登出完成页
|—— newsletter.php 会员功能-电子报订阅取消
|—— password.php 会员功能-密码变更
|—— success.php 创建账号成功讯息Catalog
|controller
|checkout 结账功能
|—— address.php 结账功能-地址处理(配送,账单..地址)
|—— cart.php 浏览购物清单(购物车)
|—— confirm.php 结账功能-最后确认
|—— guest_step_1.php 免登入结账第一步
|—— guest_step_2.php 免登入结账第二步
|—— guest_step_3.php 免登入结账第三步
|—— payment.php 结账功能-选择付款方式
|—— shipping.php 结账功能-选择配送方式
|—— success.php 完成结账成功消息Catalog
|controller
|common 主要版面
|—— column_left.php 左栏模块载入
|—— column_right.php 右栏模块载入
|—— footer.php 页脚
|—— header.php 页头
|—— home.php 首页
|—— maintenance.php 维护中显示页
|—— seo_url.php 网址最佳化处理程序之一(缩短网址)Catalog
|controller
|error 404错误
|—— not_found.php 无此页Catalog
|controller
|feed 网站地图和订阅
|—— google_base.php 网站订阅(feed)
|—— google_sitemap.php 网站地图Catalog
|controller
|information 网站资讯
|—— contact.php 发送信件给店家
|—— information.php 商店文章
|—— sitemap.php 网站导览Catalog
|controller
| module 功能模块
|—— bestseller.php 畅销商品
|—— cart.php 购物清单(侧栏)
|—— category.php 目录(侧栏)
|—— featured.php 推荐商品
|—— google_talk.php google即时通(侧栏)
|—— information.php 商店文章(侧栏)
|—— latest.php 最新商品
|—— manufacturer.php 品牌选单
|—— special.php 特价商品Catalog
|controller
| product 商品功能
|—— category.php 同目录商品列表
|—— manufacturer.php 同品牌商品列表
|—— product.php 商品详细内容页
|—— search.php 搜索功能
|—— special.php 特价商品列表

phpnow 设置默认文档顺序

输入域名在打开一个网站的时候,首页是打开网站首页,有时候首页我们做的程序首页是default.html,有时候有是index.html,index.asp等等。
phpnow不像IIS那样有直观操作界面,可按如下操作来设置默认文档顺序:
比如,phpnow安装在d盘,在phpnow文件夹里找到apache文件夹,里有conf这个文件夹,里面有个httpd.conf文件,打开,搜索index.html文件。

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
或:
DirectoryIndex index.php index.html index.htm index.html.var

修改之。

【转】.htaccess基本语法和应用

.htaccess基本语法和应用以及.htaccess的重写规则

.htaccess是Apache服务器的一个非常强大的分布式配置文件。
正确的理解和使用.htaccess文件,可以帮助我们优化自己的服务器或者虚拟主机。
如何启用htaccess
以windows为例,进入apache/conf目录,找到httpd.conf文件,去掉

LoadModule rewrite_module modules/mod_rewrite.so

前面的#,然后设置目录属性AllowOverride All,重启apache即可
常见格式
下面是一个典型的htaccess文件

# 开启URL重写
RewriteEngine on
# URL重写的作用域
# RewriteBase /path/to/url
# 满足怎样的条件
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
# 应用怎样的规则
RewriteRule .? http://www.example.com%{REQUEST_URI} [R=301,L]

来看看RewriteCond,首先有一个%,因为{HTTP_HOST}是一个apache变量,需要用%来指示。从!开始就是匹配的条件,支持 正则。!表示不等于,这句话的意思就是:如果HTTP_HOST不是www.example.com。后面的[NC](no case)表示忽略大小写,常见的还有

[L](last):终止一系列的RewriteCond和RewriteRule
[R](redirect):触发一个显示的跳转,也可以指定跳转类型,如[R=301]
[F](forbidden):禁止查看特定文件,apache会触发403错误

典型应用
图片防盗链

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/ [NC]
RewriteRule .(gif|jpg|png)$ – [F]

由于是基于HTTP_REFERER的验证,所以只能防止一般的图片盗链,因为HTTP_REFERER是比较容易伪造的
自定义404错误页面
如果用户输入了一个不存在的url,那么就显示自定义的错误页面

ErrorDocument 404 /404.html
# 其他同理
ErrorDocument 500 /500.html

处理移动过的文件

Redirect 301 /old.html http://yoursite.com/new.html
# 也可以是下面这样
RewriteRule /old.html http://yoursite.com/new.html [R=301,L]
# 如果想隐式跳转(URL地址不变,但实际上内容是其他URL的),就使用下面的
RewriteRule /old.html http://yoursite.com/new.html [L]

对于RewriteRule还有好多文章可以做,比如

# 把html后缀的url链接到php文件
# $1指代的是前面第1个用括号括起来的内容
RewriteRule ^/?([a-z/]+).html$ $1.php [L]
# 或者把旧文件夹的内容链接到新文件夹
RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,L]
# 隐藏文件名
RewriteRule ^/?([a-z]+)$ $1.php [L]

禁止显示目录列表
如果目录里没有index文件,又没有对该目录做过特别的处理,尤其是windows主机,那么该目录里的内容就会显示出来,这时可以在根目录创建 一个.htaccess文件,然后写上

Options -Indexes
# 就这么一句就搞定了

阻止/允许特定IP/IP段

# 禁止所有IP,除了指定的
order deny,allow
deny from all
# 如果想允许IP段,如123.123.123.0 ~ 123.123.123.255,则
# allow from 123.123.123.
allow from 123.123.123.123
ErrorDocument 403 /page.html
allow from all
#如果想禁止特定IP
deny from 123.123.123.123

添加MIME类型

AddType video/x-flv .flv
# 如果设置类型为 application/octet-stream 将提示下载
AddType application/octet-stream .pdf