分类目录归档:PHP

全球使用最多的网站开发技术

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

php带小数取整的方法以及取具体位数的number_format

//1.php丢弃小数部分,保留整数部分
echo intval("3.14159");
//2.php向上取整,有小数就整数部分加1
echo ceil("3.14159");
//3,php四舍五入.
echo round("3.14159");
//4,php向下取整
echo floor("3.14159");
//5,php取具体小数位数
echo number_format("3.14159",2);
//number_format() 函数通过千位分组来格式化数字。
//number_format(number,decimals,decimalpoint,separator)
echo number_format("1000000"); //1,000,000
echo number_format("1000000",2); //1,000,000.00
echo number_format("1000000",2,",","."); //1.000.000,00

smarty中如何遍历一维数组和二维数组

(1)一维数组
可以使用foreach.
比如:
数组:$addr = array(
’01’ => ‘广州’,
’02’ => ‘韶关’,
’03’ => ‘深圳’,
’04’ => ‘珠海’,
’05’ => ‘汕头’,
’06’ => ‘佛山’,
’53’ => ‘云浮’,
’52’ => ‘揭阳’,
’51’ => ‘潮州’,
’20’ => ‘中山’,
’19’ => ‘东莞’,
’07’ => ‘江门’,
’08’ => ‘湛江’,
’09’ => ‘茂名’,
’12’ => ‘肇庆’,
’13’ => ‘惠州’,
’14’ => ‘梅州’,
’15’ => ‘汕尾’,
’16’ => ‘河源’,
’17’ => ‘阳江’,
’18’ => ‘清远’
);
可以通过
<!–{foreach from=$addr item=addre}–>
<option value=”<!–{$addre}–>”><!–{$addre}–></option>
<!–{/foreach}–>
输出
PS.
如果是$array = array(‘value1′,’value2’);这种形式的数组,也可以通过
{section name=id loop=$array}
{$array[id]}
{/section}
输出
(2)二维数组:
可能通过section 或 foreach
section 的用法如下:
$webs = array(
0 => array(
name => ‘牧羊城’,
addr => ‘http://www.muyangcheng.com’
),
1 => array(
name => ‘广州论坛’,
addr => ‘http://www.muyangcheng.com’
)
);
 
<!–{section name=usr loop=$webs}–>
<a href=”<!–{$webs[usr].addr}–>”><!–{$webs[usr].name}–></a>
<!–{/section}–>

Drupal

CMS内容管理系统 Drupal
+ 搜索引擎友好的URL
+ Drupal有一个优秀的模块化结构,提供了许多模块,包括短消息、个性化书签、网站管理、Blog、日记、电子商务、电子出版、留言簿、Job、网上电影院、论坛、投票等模块。Drupal模块的下载、安装、定制非常方便
+ Drupal提供了强大的个性化环境,每个用户可以网站内容和表现形式进行个性化设置
+ Drupal提供了基于角色的权限系统,没有必要对每个用户进行授权,只需要对角色进行授权
+ Drupal提供的站内搜索系统能对站内的所有内容进行索引和搜索
+ Drupal的模板系统将内容和表现分离,可以很方便地控制网站的外观
+ Drupal提供内建的新闻聚合工具
+ 提供完善的站点管理和分析工具
+ Drupal的Caching机制能有效减少数据库查询次数,从而提高站点性能,降低服务器负荷
+强大的多语言支持体系。能够支持很多国家的语言,让你的网站在世界上通行。
Drupal运行环境:
Drupal 基于PHP脚本语言,推荐使用mysql数据库,所以要运行Drupal必须先安装好PHP支持程序,推荐apache + mysql + php的安装和配置环境。linux系统下推荐采用lamp安装套件或windows系统下推荐安装wamp套件。
Drupal的安装:
1.运行环境:
1.建立数据库:用mysql命令行、phpmyadmin、mysql-front等工具新建一个数据库,并记住数据库的名称。
2.将Drupal代码根目录放入apache的web服务目录(www或htdocs等),通过http协议在浏览器运行Drupal的对应http 服务,例如http://mydomain/drupal,再出现的页面中按提示填入数据库的名称,用户,密码等信息。
3.首次执行,可以设置相应的个性化参数,如帐户,首页,简介链接等。
4.注:第一个注册的帐户拥有系统的最高权限。
基于Drupal平台的网站设计成功案例
很多全球知名的商业公司、社团组织、大学及政府机构都从传统的网站设计系统转向了Drupal,或者利用Drupal构建内部交流站点及社区网站。部分基于Drupal的应用包括:
跨国公司-联邦快递、诺基亚、Adobe、Sun
国际著名娱乐公司-华纳兄弟、索尼/BMG、Fox、环球唱片、迪斯尼/ABC
互联网媒体网-Google、Novell、雅虎
新闻杂志-福布斯、The Fast Company、Now Public、花花公子(德国)、The Onion,以及纽约观察报等。
网上社区-Team Sugar、FireFox
高等学府-哈佛大学、MIT
政府机构-法国政府、纽约市长Mike Bloomberg、联合国
最近奥巴马政府的经济恢复网站也采用Drupal搭建
这些成功的合作案例证明,Drupal不但适合个人站点及网上社区类网站,而且已被国际著名大公司和组织机构所接受和采纳。相信在国内,Drupal也会很快流行起来,成为主流网站设计和开发平台。
下载地址:http://drupal.org/download
drupal花园:http://drupalgarden.cn/
开源中国社区 – CMS内容管理系统 Drupal:http://www.oschina.net/p/drupal/
Drupal中文学习实践开发网:http://hellodrupal.info/

Call-time pass-by-reference has been deprecated In

Warning: Call-time pass-by-reference has been deprecated in E:PhpWebSiteMyPHPUpload.Class.php on line 154
用PHPNow搭建建站环境的注意了。
如果你写代码的时候出现这个问题,按下面方法处理:
找到PHPNow安装目录Phpnowphp-5.2.14-Win32 下的php-apache2handler.ini文件
修改文件中的

allow_call_time_pass_reference = Off

allow_call_time_pass_reference = On

即可