php 参数传递以及php获取url参数之后的较合理安排

php技巧 No Comments

php 传参数,有两种方式GET 和POST,今天说的是url里面的参数传递,php get参数方法
举例一下,index.php?do=fly
$_GET[’do’] 这样就能取到fly这个值了,这个时候,我们php url的参数传递的一个特点就出来了
1.很明显,它是明文的,所以它是不保密的哦
问题来了,我要保密怎么办?以面的参数为例,你可以把fly算成另外的值
直观点就是:fly加密得到 abcdef 这个值 也就是说 abcdef在你的程序里就代表了fly这个值,而对外人来说就是无意义的值了。。。(说的好罗嗦啊。。。。。)

2.参数的合理安排
php参数传递来后的合理安排,这个是从Comsenz Inc. 出的ucenter home 里面学来的。
废话不多说,看源代码片段,全代码请自行下载了~

1
2
3
4
5
6
7
8
9
//以space.php为例
//允许动作
$dos = array('feed', 'doing', 'blog', 'album', 'thread', 'mtag', 'friend', 'wall', 'tag', 'notice', 'share', 'home', 'pm', 'app');
 
//...省略数句,直接看这个
$do = (!empty($_GET['do']) && in_array($_GET['do'], $dos))?$_GET['do']:'index';
 
//最后根据动作的值分到其他模块
include_once(S_ROOT."./source/space_{$do}.php");

要虚心学习这段程序的大方向,:-)

它是这个意思:space.php 这个执行脚本,只允许传递$dos数组里的存在的值
比如如果脚本space.php这样传递了参数: space.php?do=feed,那么上面的代码将会直接冲向 space_feed.php去执行!
这样我觉得至少有两个好处
1.一般可以无视用户传来的不合理值,因为它会默认space.php?do=index,看看中间那句(老实说,我是不常用,不过自此以后,我要开始用了)
2.减少space.php的文件大小,这个怎么说呢?
假设你原来有do=index(假设代码量10k) 和 do=blog(假设代码量5k) 两个值
如果不按照上面的方法”分流”的话,那么space.php的代码量就是 do=index + do=blog 约等于15k了
如果”分流”的话 space.php 1k space_index.php 10k space_blog.php 5k
看见了吗?你做space.php?do=blog 这个动作的时候,只需要执行 space.php + space_blog.php = 1+5 = 6k的代码量,而不需要把整个15k的总代码都弄进来搅。

说了一大通不知道对不对,不过这样的大方向,我看是值得学习的。

让js每次都读取新内容忽略缓存

php技巧 No Comments

我有这么一段代码

1
<script src="show.php" type="text/javascript"></script>

 
这个是在网页加载的同时,暗地里执行一段php,为网页里的js 参数赋值的
在调试过程中,我就发现:改一次show.php,按F5,实际上是没有变化的,必须按ctrl+F5(忽略缓存强制更新)。
这是十分讨厌的问题。
而且如果你结合ajax的话,会发现,其实后台数据已经变化好了,但是你按F5,仍然是不更新的。
问题就出在这个暗中调用的show.php,每次都是读取缓存,造成数据不更新。

解决的方向一般是,show.php每次都加上不同的参数,比如show.php?time=time() 这样,ie这个笨蛋就认为这是个新链接,它就会去读取新的内容了。
有两种带入的参数可选
1.随机数
2.时间数 (用毫秒的)
上面的代码大概改成类似这个样子

1
2
<script src="show.php?time={$time}" type="text/javascript"></script>
//其中{$time} 你喜欢用什么生成就用什么生成。

对 获取当前php运行脚本所在目录 的补充

php技巧 No Comments

前面有一篇 获取当前php运行脚本所在目录

实际运用的时候

如果$_SERVER[’PHP_SELF’] 这个出错,可以用$_SERVER[’SCRIPT_NAME’] 代替

效果是一样的

php 下utf8多出问号的问题

php技巧 No Comments

php下utf8格式的文本,读取的时候会多一个符号
我碰到的情况是,我的字符串前面多了一个问号
google了一下,发现是utf8文件保存上要注意一个签名档问题
解决办法是,以editplus为例, 在工具->参数选择->文件:utf8签名,选择总是删除签名

ok了,这样我就看不到那个可恶的问号了。

新的效率提升file_exists 和is_file

php技巧 No Comments

写php任何时候我都会想到效率,效率,因为你永远不知道运行你程序的网站的主机状况。
而且大部分主机都有iis ,cpu占用的限制,没有限制的主机还是别买了,呵呵
我一直以来都用file-exits 来判断文件是否存在,那天偶然发现有这么一说:is_file 比file_exits更快
写了一段代码测试了一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$start_time = get_microtime();
for($i=0;$i<10000;$i++)
{
if(is_file('url.txt')) {
	//do nothing;
}
}
echo 'is_file耗时-->'.(get_microtime() - $start_time).'<br>';
 
$start_time = get_microtime();
for($i=0;$i<10000;$i++)
{
if(file_exists('url.txt')) {
	//do nothing;
}
}
 
echo 'file_exits-->'.(get_microtime() - $start_time).'<br>';
 
 
function get_microtime()//时间
{
	list($usec, $sec) = explode(' ', microtime()); 
	return ((float)$usec + (float)$sec); 
}

上面是1w次的测试,你会发现一个神奇结果
1.如果url.txt确实是存在的
那么is_file大约耗时 0.007sec.
file_exits耗时0.16sec.
is_file函数的确速度惊人!
但是别高兴太早,看另外一种情况
2.如果url.txt确实 不 存在
is_file耗时0.53sec.
file_exits耗时0.21sec.

3.看起来file_exits函数并不会因为该文件是否真的存在而影响速度,但是is_file影响就大了。

还是需要研究一下哪里适用这两个函数…

Icons by N.Design Studio. Designed By Ben Swift. Powered by WordPress and Free WordPress Themes
Entries RSS Comments RSS Log in