订阅本站

如何在服务端获得客户端信息.

tarfly 发表于 2011-3-28 分类 PHP/PHP框架 | 发表评论 |802 views

比如你用得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了缓冲区的控制,我们可以轻松的解决:

<?php
ob_start(); //打开缓冲区
phpinfo(); //使用phpinfo函数
$info=ob_get_contents(); //得到缓冲区的内容并且赋值给$info
$file=fopen(\'info.txt\',\'w\'); //打开文件info.txt
fwrite($file,$info); //写入信息到info.txt

thinkphp 的主从数据库 链接资源分析

tarfly 发表于 2011-3-22 分类 PHP/PHP框架 | 发表评论 |911 views

thinkphp 的主从数据库 链接资源分析

一主一丛

主 —负责数据的 插入,更新,删除
从 —负责数据的查询

操作的时候 通过 返回不同的 数据库链接来进行操作
下面是他的链接操作的代码

老乡要用微博, 我在sina 官网下载的SDK , 娄了几眼, SDK 直接报错误.
看了下代码, 排除错误的解决方法
在调用statuses/public_timeline 获取最新的公共微博消息 的API出现Error_code: 400; Error: 40022:Error: source paramter(appkey) is missing的错误,终于还是解决了问题,原来是少了一条语句”source” => $consumer->key,

突然看到这篇文章, 值得反省, 乐在其中, 在接下来的发展中不被淘汰的都来看看,

如何成为一个架构师
先明确这里所指的PHP工程师,是指主要以PHP进行Web系统的开发,没有使用其的语言工作过。工作经验大概在3~4年,普通的Web系统(百万级访问,千成级数据以内或业务逻辑不是特别复杂)开发起基本得心应手,没有什么问题。但他们会有这样的误点:

◆ 除了PHP不使用其它的语言,可能会点shell 脚本。

◆ 对PHP的掌握不精(很多PHP手册都没有看完,库除外)。

◆ 知识面比较窄(面对需求,除开使用PHP和MYSQL,不知道其它的解决办法)。

◆ PHP代码以过程为主,认为面向对象的实现太绕,看不懂。

这些PHPer在遇到需要高性能,处理高并发,大量数据的项目或业务逻辑比较复杂(系统需要解决多领域业务的问题)时,缺少思路。不能分析问题的本质,技术判断力比较差,对于问题较快能找出临时的解决办法,但常常在不断临时性的解决办法中,系统和自己一步步走向崩溃。那怎么提高自己呢?怎么可以挑战难度更高的系统?

更高的挑战在那里?

结合我自己的经验,我列出一些具体挑战,让大家先有个感性的认识。

高性能系统的挑战在那里?

◆ 如何选择Web服务器?要不要使用fast-cgi 模式;

◆ 要不要使用反向代理服务?选择全内存缓存还是硬盘缓存?

◆ 是否需要负载均衡?是基于应用层,还是网络层? 如何保证高可靠性?

◆ 你的PHP代码性能如何,使用优化工具后怎么样? 性能瓶颈在那里? 是否需要写成C的扩展?

◆ 用户访问有什么特点,是读多还是写多?是否需要读写分离?

◆ 数据如何存储?写入速度和读出速度如何? 数据增涨访问速读如何变化?

◆ 如何使用缓存? 怎么样考虑失效?数据的一致性怎么保证?

高复杂性系统的挑战在那里?

◆ 能否识别业务所对应的领域?是一个还是多个?

◆ 能否合理对业务进行抽象,在业务规则变化能以很小的代价实现?

◆ 数据的一致性、安全性可否保证?

◆ 是否撑握了面向对象的分析和设计的方法?

这里所列出的问题,你都能肯定的回答,说明在技术上你基本已经可能成为架构师了。如何你还不能回答,你需要在以下几个方向加强。

怎么样提高,突破瓶颈

如何你还不能回答,你需要在以下几个方向加强:

◆ 分析你所使用的技术其原理和背后运行的机制,这样可以提高你的技术判断力,提高你技术方案选择的正确性;

◆ 学习大学期间重要的知识,操作系统原理,数据结构和算法。知道你以前学习都是为了考试,但现在你需要为自己学习,让自己知其所以然;

◆ 重新开始学习C语言,虽然你在大学已经学过。这不仅是因为你可能需要写PHP扩展,而且还因为,在做C的应用中,有一个时刻关心性能、内存控制、变量生命周期、数据结构和算法的环境;

◆ 学习面向对象的分析与设计,它是解决复杂问题的有效的方法。学习抽象,它是解决复杂问题的唯一之道。

看完这个文章,大家思考一下, 志博预祝大家早日成为一名PHP 架构师 team leader
文章如转载,请注明:转载自:王志博-PHP[http://www.wangzhibo.com/]
本文链接地址:http://www.wangzhibo.com/?p=556

获取客户端IP 的一个方法

tarfly 发表于 2011-2-11 分类 PHP/PHP框架 | 发表评论 |729 views
1
2
3
4
5
6
7
8
9
10
11
12
13
function get_client_ip(){
if (getenv("HTTP_CLIENT_IP") &amp;&amp; strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") &amp;&amp; strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") &amp;&amp; strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) &amp;&amp; $_SERVER['REMOTE_ADDR'] &amp;&amp; strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
}

文章如转载,请注明:转载自:王志博-PHP[http://www.wangzhibo.com/]
本文链接地址:http://www.wangzhibo.com/?p=549

php stat() 函数 解析

tarfly 发表于 2011-1-10 分类 PHP/PHP框架 | 发表评论 |658 views

看ECSHOP ,缓存机制看到 这样一个目录函数:

1
2
3
4
5
6
7
8
9
10
foreach ($para['template'] AS $val)
                {
                    $stat = @stat($val);// 函数获得文件信息
                    if ($para['maketime'] &lt; $stat['mtime'])   // 判断文件是否过期 
                    {
                        $this-&gt;caching = false;
 
                        return false;
                    }
                }

stat(‘filepath’) filepath 是文件的路径, 返回传入文件的信息:

The stat() function returns information about a file.
stat()函数的作用是:返回一个文件的信息。

This function returns an array with the following elements:
这个函数将返回一个包含下列元素的数组:

[0] or [dev] - Device number
[0] 或 [dev] –代表(驱动)设备的数字
[1] or [ino] - Inode number
[1] 或 [ino] – 代表Inode的数字
[2] or [mode] - Inode protection mode
[2] 或 [mode] – Inode保护模式
[3] or [nlink] - Number of links
[3] 或 [nlink] –代表连接的数字
[4] or [uid] - User ID of owner
[4] 或 [uid] – 拥有者的用户id[User ID]
[5] or [gid] - Group ID of owner
[5] 或 [gid] – 拥有者的群id[Group ID]
[6] or [rdev] - Inode device type
[6] 或 [rdev] – Inode设备类型
[7] or [size] - Size in bytes
[7] 或 [size] – 字节数大小
[8] or [atime] - Last access (as Unix timestamp)
[8] 或 [atime] – 最后一次访问(Unix时间戳[timestamp])
[9] or [mtime] - Last modified (as Unix timestamp)
[9] 或 [mtime] -最后一次修改(Unix时间戳[timestamp])
[10] or [ctime] - Last inode change (as Unix timestamp)
[10] 或 [ctime] -最后一次修改inode(Unix时间戳[timestamp])
[11] or [blksize] - Blocksize of filesystem IO (if supported)
[11] 或 [blksize] – 文件系统IO的区域大小[Blocksize of filesystem IO](必须在支持这个元素的情况下)
[12] or [blocks] - Number of blocks allocated
[12] 或 [blocks] – 指派的空间数量

文章如转载,请注明:转载自:王志博-PHP[http://www.wangzhibo.com/]
本文链接地址:http://www.wangzhibo.com/?p=537

生成xml ,注意事项. XML特殊符号

tarfly 发表于 2010-12-31 分类 PHP/PHP框架 | 1条评论 |1,335 views

写一个图片轮播功能: 上传图片,然后生成xml, flash 操作xml ,控制图片;
xml 格式如下:

<images>
<image src='/Uploads/flash/4d1c2eae7f91d.jpg' url='http://www.wangzhibo.com?id=1&test=2'/>
<image src='/Uploads/flash/4d1c2eae7f91d.jpg' url='http://www.wangzhibo.com?id=1&test=2'/>
<image src='/Uploads/flash/4d1c2eae7f91d.jpg' url='http://www.wangzhibo.com?id=1&test=2'/>
</images>

php 拼接字符串,生成XML , url 里面存在 & 符合, 需要 把 xml 转化成 &amp,
[php]
str_replace(‘&’,'&amp;’,$str);
[/php]
查了下资料, 找的 需要转换的 特殊字符

< < 小于号
> > 大于号
& & 和
' ‘ 单引号
" ” 双引号

注意: 只有”<" 字符和"&"字符对于XML来说是严格禁止使用的。剩下的都是合法的,为了减少出错,使用实体是一个好习惯。

文章如转载,请注明:转载自:王志博-PHP[http://www.wangzhibo.com/]
王志博

把网页放到桌面

tarfly 发表于 2010-12-6 分类 PHP/PHP框架 | 2条评论 |1,300 views

项目需要这样一个功能, 把首页 放到桌面,然后生成一个快捷方式
[html]
<html>
<head>
<title>把我的Blog放到首页</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body>
<a href=’tarfly.php’>王志博-【PHP研发,致力于PHP最前沿】</a>
</body>
</html>
[/html]
[html]
<?php
$Shortcut = "[DEFAULT]
BASEURL=http://www.wangzhibo.com/
[InternetShortcut]
URL=http://www.wangzhibo.com
IDList=
IconFile=http://www.wangzhibo.com/favicon.ico
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2
";
header(‘Content-Type: application/octet-stream’);
header("Content-Disposition: attachment; filename=王志博-【PHP研发,致力于PHP最前沿】.url");
echo $Shortcut;
?>
[/html]

这样就可以把 网页变成快捷方式了!
但是存在一个问题, 如果保存名称是中文的话 弹出下载会显示乱码, 我会在下面的文章里面写出找到的解决方法!
王志博 2010/12/06 13:29

linux svn 安装与部署

tarfly 发表于 2010-11-2 分类 PHP/PHP框架 | 发表评论 |933 views

下面是我整理的 svn 的 安装和 部署 的完整步骤 (多项目版本), 下面是我 今天下午自己使用然后总结的, 希望对你们有帮助
第一: 安装svn服务器端,从镜像下载安装svn服务器端
第二: 创建SVN 仓库 (创建的目录自己选择) 我把他创建 在 /usr/local/svn 下面了 (也就是我的所有的svn 项目都放在这下面)
svnadmin create /usr/local/svn/tarfly (第一个项目) ,
svnadmin create /usr/local/svn/zhibo (第二个项目)
第三: 配置 svn(进入 tarfly, zhibo))
(1)vi svnserve.conf //配置版本库信息和用户文件和用户密码文件的路径、版本库路径
[

# anon-access = read
# auth-access = write
# password-db = passwd
//这三行,前面的#号和空格去掉,变成
anon-access = none //改成none
auth-access = write
password-db = passwd
realm = yixin //改成自己的版本库
保存
(2)vi authz //文件,创建svn组和组用户的权限
[group]
tarfly= wzb,tarfly//创建一个tarfly的组,并制定两个用户gep和wce
[/] //制定根目录下的权限
@tarfly= rw //tarfly组用户权限为读写
* = r //其他用户只有读权限
保存退出
(3) vi passwd //创建或修改用户密码
[users]
wzb= 123456 //用户名为wzb的用户的密码为123456
tarfly= 123456 //。。。
保存退出

这样svn 就算创建好了,但是要把他启动

应该把他设置成开机就启动,修改方法如下
vi /etc/rc.local 打开自启动文件
在里面加入 ,加入的语句如下
svnserve -d -r /usr/local/svn/ (这样保证svn 能够开机启动)
svnserve -d -r /usr/local/svn 这个命令是启动SVN

SVN 仓库建立好了, 那么 我们要利用 SVN 的钩子 ,让SVN 仓库 和我们的WEB 项目同步 , 下面我写下我今天下午的配置方法

第一: 在你的 web 项目的地方 创建 一个目录 mkdir /data0/htdocs/tarfly 这是我的web 项目的目录
第二;增加svn 配置文件
其实是在你的 svn 仓库的 hooks 下面创建一个 文件 ,方法:tarfly 仓库为例:
vi /usr/local/svn/tarfly/hooks/post-commit
在里面加入下面的信息:
#!/bin/sh
[php]
#设置一些变量
SVN=/usr/bin/svn(这个地方我还没搞清楚为什么)
WEB=/data0/htdocs/tarfly#要更新的目录
export LANG=en_US.UTF-8
$SVN update $WEB –username 你的用户名 –password 你的密码
[/php]
保存退出.
然后 修改 这个post-commit 的权限为 777 chmod -R 777 post-commit

确保 :svn 仓库 的文件 和 web 项目同步的方法;

svn checkout svn://ip/项目名称 web地址 我的例子 svn checkout svn://ip/tarfly /data0/htdocs/tarfly (这样2 个地方的版本库就相同了 )

好了到 这里, svn 就全部搞定了, svn 可能不只是单独的这点东西, 还有很多东西, 但是, 个人感觉, 这点东西 在做项目的时候完全够用了 !
有不完美的地方希望大家指证!
王志博22:12

轻松实现cookie 的跨域问题

tarfly 发表于 2010-10-28 分类 PHP/PHP框架 | 发表评论 |655 views

如何让 www.test.com 中设置的cookie 在 bbs.test.com,home.test.com 里面 运用呢? 只要用setcookie() 这个函数就可以轻松的搞定!
setcookie() 共有6 个参数:
第一: 键名
第二: 值
第三: 有效时间
第四: 作用域(/表示作用在跟目录下,/bbs 表示作用在bbs这个目录下)
第五: 域(.test.com) 这样设置就可以作用在整个域名下面
第六:规定是否通过安全的 HTTPS 连接来传输 cookie。

只要在 www.test.com 这个地方 设置 setcookie(‘test’,'test’,time()+3600,’/',’.test.com’);
这样就可以把整个Cookie 的信息 在所有的域下共享
轻松解决跨域问题!

王志博

最近一直有朋友问我关于ucenter 同步的问题, 由于自己的下一个项目也有可能用到这方面的的功能; 于是昨天晚上写了一个用户注册登录的例子,去同步登录我自己的uchome , 和discuz 这两个项目;
第一: 添加新的应用(自定义添加)
应用名称写自己项目名称就可以;URL 写自己项目的URL ;应用IP 根据自己的情况填写;通信密钥越负责越好;应用类型选择其他;应用接口文件名称:自己定义(默认是uc.php) 这个文件一定要放在根目录/api/uc.php(这里面的内容可以在 ucenter 下载包里面的demo 里面直接copy); 这些填好了直接 保存, 会生段应用的 UCenter 配置信息, .把这段信息 赋值到 根目录下面的 config.inc.php(这个文件要在uc.php 包含的) 里面; uc.php 里面会加载很多的 包, 一定要确定这些包能正确加载到才能 通宵成功
第二: 确保项目的通信成功
注意: 所有的东西你可以 考 ucenter demo 里面的东西, 路径根据自己额需要具体的配置
API/uc.php inculde uc_client , 一共包含这几个文件 , 还有生成的ucenter 的配置信息 config.inc.php (这里面放入你自己的 数据的配置信息,库名称等)
这些信息都 配置争取可以确保成功

第三: 项目代码的书写
我把我自己的正项目放在 www.wangzhibo.com/uc.rar 里面, 欢迎大家下载!

王志博

mysql 防止注入的一个解决思路

tarfly 发表于 2010-9-21 分类 PHP/PHP框架 | 1条评论 |973 views

上午看到这么一道题目:
请具体举一个有sql注入漏洞的php代码,并详细说明针对该代码进行对应的sql注入的步骤,以及提供对应的漏洞的修改的具体代码?

dedecms 关于自定义频道列表 总结

tarfly 发表于 2010-9-14 分类 PHP/PHP框架 | 发表评论 |585 views

文章内容页总是出现:你会看到这个提示,那是因为你的系统无法识别某栏目的模型信息,或者你新建模型后,没为这个模型设计单独的模板。不同模型的文档浏览页的模板为:article_模型名字标识.htm 如“article_article.htm”,更多的信息你可以在频道模型管理的地方查看。

权限验证函数 , strpos() 函数的运用

tarfly 发表于 2010-9-13 分类 PHP/PHP框架 | 发表评论 |606 views

如果是 1 是否存在(123,1234,12345);我们是想判断1 这个单元是否存在,但是结果会返回 是存在,所有 就有问题了;
但是 按照我函数写的这样 ,1 ,是否存在 ,123,1234,12345, ;显而易见,肯定就不存在了,OK ,问题解决