1. 不要使用mysql_函数
这一天终于来了,从此你不仅仅“不应该”使用mysql_函数。PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mysqli_函数,或者更灵活的 PDO 实现。
2. 不要编写垃圾代码
这一条可能易于理解,但是会变得越来越重要,因为 PHP 7 的速度提升可能会隐藏你的一些问题。不要仅仅满足于你的站点速度,因为迁移到 PHP 7 才让它变快。
为了理解速度有多重要,以及如何把事情做得更好,请看一看我们的文章速度优化入门指南。
作为一名开发者,你应该总是确保按需加载脚本,尽可能连接它们,编写高效的数据库查询,尽可能使用缓存,以及其它。
3. 不要在文件末尾使用 PHP 闭合标签
你可以看一看,当一个文件以 PHP 代码结尾时,WordPress 多数核心代码都把末尾的 PHP 标签去掉了。实际上,Zend 框架特别禁止了它。PHP 并不需要文件末尾的闭合标签,并且我们可以通过去掉它来保证不会在后面添加任何的空白字符。
4. 不要做不必要的引用传递
我个人不喜欢引用传递。我知道有时候它很实用,但是其它情况下它使代码变得难懂,并且更难预测结果。
据说一些人认为它使代码运行更快,但是根据一些 PHP 高级程序员所说,这并不正确。
说明引用为什么不好的一个例子是,PHP 内建了shuffle()和sort()。它们修改原始数组,而不是返回处理后的数组,这很不合逻辑。
5. 不要在循环中执行查询
在循环中执行查询非常浪费。它给你的系统施加不必要的压力,并且可能能够在循环外部更快获得相同结果。当我遇到需要这样的情况时,我通常会使用两个分离的查询来解决问题,我会使用它们来构建数据数组。之后我会遍历数组,并不需要在这个过程中执行查询。
由于 WordPress 适用于这里,它可能有一些例外。虽然get_post_meta() 会从数据库获取大量数据,如果你正在遍历某个特殊博文的元数据你可以在循环中使用它。这是因为当你第一次调用它的时候,WordPress实际上会获取所有元数据并缓存它们。后续的调用使用这些缓存数据,没有数据库的调用。
弄懂这些的最佳方式是阅读函数文档,以及使用类似 Query Monitor 的工具。
6. 不要在 SQL 查询中使用*
当然,这个更像 MySQL 的问题,但是我们习惯在 PHP 中编写 SQL 代码,所以都差不多。无论如何,如果可以避免的话,不要在 SQL 查询里使用通配符,尤其是数据库有很多列的时候。
你应该明确指定需要哪些行,并且仅仅获取它们。这有助于减少所用资源,保护数据,以及让事情变得尽可能清晰。
对于 SQL,你需要了解所有可用的函数,并且尽可能测试其速度。在计算均值、求和或计算类似数值时,要使用 SQL 函数而不是 PHP 函数。如果你不确定某个查询的速度,测试它并且尝试一些其它的编译 -- 之后使用最好的那个。
7. 不要信任用户输入
信任用户输入是不明智的。始终校验、过滤、转义、检查并留好退路。用户数据存在三个问题:我们开发者并没有考虑每种可能性,它通常不正确,以及它可能是蓄意破坏。
经过周密考虑的系统可以防护这些威胁。要确保使用类似filter_var()的内建函数检查适当的值,以及在处理数据库时转义(或预编译)。
WordPress 拥有一些函数来解决问题。详见文章校验、转义和过滤用户数据。
8. 不要故作聪明
你的目标应该是编写优雅的代码,来更清晰地表达你的意图。你可能能够通过将任何东西缩短为一个单词的变量,使用多层的三元逻辑,以及其它手段,从每个页面中优化 0.01 秒。但这只会给你和你周围的人产生大麻烦。
合理命名变量,为代码编写文档,优先选择清晰而不是简洁。甚至还可以更好,使用标准的面向对象代码,它本身或多或少就是文档,不需要一大堆内联数值。
9. 不要重新发明轮子
PHP 到现在为止有很长时间了,网站被造出来的时间更长。很可能无论你需要造出什么,一些人之前早就造出来了。不要害怕向他人寻求支持,Github是你的好朋友,Composer也是,Packagist也是。
从日志工具到调色工具,从性能分析器到单元测试框架,从 Mailchimp API 到 Twitter Bootstrap,每个东西都可以通过按下按键(或者敲下命令)来获取,使用它们吧!
10. 不要忽略其它语言
如果你是个 PHP 程序员,现在有个好机会去至少了解 HTML、CSS、JavaScript 和 MySQL。当你能够更好地处理这些语言时,就是重新学习 JavaScript 的时机了。JavaScript 并不是 jQuery,你应该合理地学习 JavaScript 来更高效地使用它。
我也打算向你推荐学习面向对象的 PHP,它可以节省时间,并且在代码规模更大时会变得更好。对于类似 C# 和 Java 的语言,在你了解 OOP 之后,它们也更易于理解。
通过了解包管理器、构建脚本、CoffeeScript、LESS、SASS、YAML 、脚本引擎和其它强大的工具来扩展你的知识面。我强烈向你推荐看一看其它框架,尤其是 Laravel。
当你使用它们出色完成任务时,学习 Ruby、RoR、Android、iPhone 和 Windows Phone 应用开发如何?你可能会认为这毫无意义,因为它们在你的舒适区和工作所需范围之外,但是这就是它们的意义。每种语言都有一些要学习的实用的东西,以及从没碰到的新知识。所有 PHP 顶级开发者都懂得很多其它编程语言,这并非偶然。
- echo比print快。
- 使用echo的多重参数代替字符串连接。
- 在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
- 对global变量,应该用完就unset()掉。
- 用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会。
- 函数代替正则表达式完成相同功能。
- 当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。
- 使用选择分支语句(switch case)好于使用多个if,else if语句。
- 利用var_dump进行PHP代码调试。如果你在寻找php调试技术,我必须说var_dump应该是你要找的目标,在显示php信息方面这个命令可以满足你的所有需要,而调试代码的多数情况与得到PHP中的数值有关。
- 在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。
- 动辄创建全局数值是一种糟糕的做法,不过有时候实际情况的确又需要这么做。对于数据库表或数据库连接信息使用全局数值是一个不错的想法,但不要在你的PHP代码中频繁使用全局数值。另外,更好的一种做法是把你的全局变量存放在一个config.php文件中。
- 如果你想知道脚本开始执行的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
- 打开apache的mod_deflate模块。
- 用@屏蔽错误消息的做法非常低效。
- 尽量采用大量的PHP内置函数。
- 递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
- 派生类中的方法运行起来要快于在基类中定义的同样的方法。
- 仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)
- Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
- 正如之前提到的,任何php网站中最重要的部分有99%的可能是数据库。因此,你需要非常熟悉如何正确的使用sql,学会关联表和更多高级的数据库技术。
- 调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。
- 当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回zval结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。
- 并不是所有情况都必须使用面向对象开发,面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
- 除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
------------------
1、PHP加密解密
PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密。
function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12"); return $decrypted; }else{ $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); return $encrypted; } }
使用方法如下:
//以下是将字符串“Helloweba欢迎您”分别加密和解密 //加密: echo encryptDecrypt('password', 'Helloweba欢迎您',0); //解密: echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1);
2、PHP生成随机字符串
当我们需要生成一个随机名字,临时密码等字符串时可以用到下面的函数:
function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; }
使用方法如下:
echo generateRandomString(20);
3、PHP获取文件扩展名(后缀)
以下函数可以快速获取文件的扩展名即后缀。
function getExtension($filename){ $myext = substr($filename, strrpos($filename, '.')); return str_replace('.','',$myext); }
使用方法如下:
$filename = '我的文档.doc'; echo getExtension($filename);
4、PHP获取文件大小并格式化
以下使用的函数可以获取文件的大小,并且转换成便于阅读的KB,MB等格式。
function formatSize($size) { $sizes = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"); if ($size == 0) { return('n/a'); } else { return (round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizes[$i]); } }
使用方法如下:
$thefile = filesize('test_file.mp3'); echo formatSize($thefile);
5、PHP替换标签字符
有时我们需要将字符串、模板标签替换成指定的内容,可以用到下面的函数:
function stringParser($string,$replacer){ $result = str_replace(array_keys($replacer), array_values($replacer),$string); return $result; }
使用方法如下:
$string = 'The {b}anchor text{/b} is the {b}actual word{/b} or words used {br}to describe the link {br}itself'; $replace_array = array('{b}' => '<b>','{/b}' => '</b>','{br}' => '<br />'); echo stringParser($string,$replace_array);
6、PHP列出目录下的文件名
如果你想列出目录下的所有文件,使用以下代码即可:
function listDirFiles($DirPath){ if($dir = opendir($DirPath)){ while(($file = readdir($dir))!== false){ if(!is_dir($DirPath.$file)) { echo "filename: $file<br />"; } } } }
使用方法如下:
listDirFiles('home/some_folder/');
7、PHP获取当前页面URL
以下函数可以获取当前页面的URL,不管是http还是https。
function curPageURL() { $pageURL = 'http'; if (!empty($_SERVER['HTTPS'])) {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; }
使用方法如下:
echo curPageURL();
8、PHP强制下载文件
有时我们不想让浏览器直接打开文件,如PDF文件,而是要直接下载文件,那么以下函数可以强制下载文件,函数中使用了application/octet-stream头类型。
function download($filename){ if ((isset($filename))&&(file_exists($filename))){ header("Content-length: ".filesize($filename)); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . $filename . '"'); readfile("$filename"); } else { echo "Looks like file does not exist!"; } }
使用方法如下:
download('/down/test_45f73e852.zip');
9、PHP截取字符串长度
我们经常会遇到需要截取字符串(含中文汉字)长度的情况,比如标题显示不能超过多少字符,超出的长度用…表示,以下函数可以满足你的需求。
/* Utf-8、gb2312都支持的汉字截取函数 cut_str(字符串, 截取长度, 开始长度, 编码); 编码默认为 utf-8 开始长度默认为 0 */ function cutStr($string, $sublen, $start = 0, $code = 'UTF-8'){ if($code == 'UTF-8'){ $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; preg_match_all($pa, $string, $t_string); if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; return join('', array_slice($t_string[0], $start, $sublen)); }else{ $start = $start*2; $sublen = $sublen*2; $strlen = strlen($string); $tmpstr = ''; for($i=0; $i<$strlen; $i++){ if($i>=$start && $i<($start+$sublen)){ if(ord(substr($string, $i, 1))>129){ $tmpstr.= substr($string, $i, 2); }else{ $tmpstr.= substr($string, $i, 1); } } if(ord(substr($string, $i, 1))>129) $i++; } if(strlen($tmpstr)<$strlen ) $tmpstr.= "..."; return $tmpstr; } }
使用方法如下:
$str = "jQuery插件实现的加载图片和页面效果"; echo cutStr($str,16);
10、PHP获取客户端真实IP
我们经常要用数据库记录用户的IP,以下代码可以获取客户端真实的IP:
//获取用户真实IP function getIp() { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return ($ip); }
使用方法如下:
echo getIp();
11、PHP防止SQL注入
我们在查询数据库时,出于安全考虑,需要过滤一些非法字符防止SQL恶意注入,请看一下函数:
function injCheck($sql_str) { $check = preg_match('/select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/', $sql_str); if ($check) { echo '非法字符!!'; exit; } else { return $sql_str; } }
使用方法如下:
echo injCheck('1 or 1=1');
12、PHP页面提示与跳转
我们在进行表单操作时,有时为了友好需要提示用户操作结果,并跳转到相关页面,请看以下函数:
function message($msgTitle,$message,$jumpUrl){ $str = '<!DOCTYPE HTML>'; $str .= '<html>'; $str .= '<head>'; $str .= '<meta charset="utf-8">'; $str .= '<title>页面提示</title>'; $str .= '<style type="text/css">'; $str .= '*{margin:0; padding:0}a{color:#369; text-decoration:none;}a:hover{text-decoration:underline}body{height:100%; font:12px/18px Tahoma, Arial, sans-serif; color:#424242; background:#fff}.message{width:450px; height:120px; margin:16% auto; border:1px solid #99b1c4; background:#ecf7fb}.message h3{height:28px; line-height:28px; background:#2c91c6; text-align:center; color:#fff; font-size:14px}.msg_txt{padding:10px; margin-top:8px}.msg_txt h4{line-height:26px; font-size:14px}.msg_txt h4.red{color:#f30}.msg_txt p{line-height:22px}'; $str .= '</style>'; $str .= '</head>'; $str .= '<body>'; $str .= '<div>'; $str .= '<h3>'.$msgTitle.'</h3>'; $str .= '<div>'; $str .= '<h4>'.$message.'</h4>'; $str .= '<p>系统将在 <span style="color:blue;font-weight:bold">3</span> 秒后自动跳转,如果不想等待,直接点击 <a href="{$jumpUrl}">这里</a> 跳转</p>'; $str .= "<script>setTimeout('location.replace(\'".$jumpUrl."\')',2000)</script>"; $str .= '</div>'; $str .= '</div>'; $str .= '</body>'; $str .= '</html>'; echo $str; }
使用方法如下:
message('操作提示','操作成功!','http://www.helloweba.com/');
13、PHP计算时长
我们在处理时间时,需要计算当前时间距离某个时间点的时长,如计算客户端运行时长,通常用hh:mm:ss表示。
function changeTimeType($seconds) { if ($seconds > 3600) { $hours = intval($seconds / 3600); $minutes = $seconds % 3600; $time = $hours . ":" . gmstrftime('%M:%S', $minutes); } else { $time = gmstrftime('%H:%M:%S', $seconds); } return $time; }
----------------------
尽管PHP经常被人诟病,被人贬低,被人当玩笑开,事实证明,PHP是全世界网站开发中使用率最高的编程语言。PHP最大的缺点是太简单,语法不严谨,框架体系很弱,但这也是它最大的优点,一个有点编程背景的普通人,只需要学习PHP半天时间,就可以上手开始开发web应用了。
网上有人总结几种编程语言的特点,我觉得也挺有道理的:
PHP 就是: Quick and Dirty
Java 就是: Beauty and Slowly
Ruby 就是: Quick and Beauty
python 就是: Quick and Simple
在PHP的流行普及中,网上总结出了很多实用的PHP代码片段,这些代码片段在当你遇到类似的问题时,粘贴过去就可以使用,非常的高效,非常的省时省力。将这些程序员前辈总结出的优秀代码放到自己的知识库中,是一个善于学习的程序员的好习惯。
一、黑名单过滤
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
26
27
28
29
30
31
|
function
is_spam(
$text
,
$file
,
$split
=
':'
,
$regex
= false){
$handle
=
fopen
(
$file
,
'rb'
);
$contents
=
fread
(
$handle
,
filesize
(
$file
));
fclose(
$handle
);
$lines
=
explode
(
"n"
,
$contents
);
$arr
=
array
();
foreach
(
$lines
as
$line
){
list(
$word
,
$count
) =
explode
(
$split
,
$line
);
if
(
$regex
)
$arr
[
$word
] =
$count
;
else
$arr
[preg_quote(
$word
)] =
$count
;
}
preg_match_all(
"~"
.implode(
'|'
,
array_keys
(
$arr
)).
"~"
,
$text
,
$matches
);
$temp
=
array
();
foreach
(
$matches
[0]
as
$match
){
if
(!in_array(
$match
,
$temp
)){
$temp
[
$match
] =
$temp
[
$match
] + 1;
if
(
$temp
[
$match
] >=
$arr
[
$word
])
return
true;
}
}
return
false;
}
$file
=
'spam.txt'
;
$str
=
'This string has cat, dog word'
;
if
(is_spam(
$str
,
$file
))
echo
'this is spam'
;
else
echo
'this is not spam'
;
|
ab:3 dog:3 cat:2 monkey:2
二、随机颜色生成器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
function
randomColor() {
$str
=
'#'
;
for
(
$i
= 0 ;
$i
< 6 ;
$i
++) {
$randNum
= rand(0 , 15);
switch
(
$randNum
) {
case
10:
$randNum
=
'A'
;
break
;
case
11:
$randNum
=
'B'
;
break
;
case
12:
$randNum
=
'C'
;
break
;
case
13:
$randNum
=
'D'
;
break
;
case
14:
$randNum
=
'E'
;
break
;
case
15:
$randNum
=
'F'
;
break
;
}
$str
.=
$randNum
;
}
return
$str
;
}
$color
= randomColor();
|
三、从网络下载文件
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
26
27
28
29
30
31
32
|
set_time_limit(0);
// Supports all file types
// URL Here:
$pi
=
pathinfo
(
$url
);
$ext
=
$pi
[
'extension'
];
$name
=
$pi
[
'filename'
];
// create a new cURL resource
$ch
= curl_init();
// set URL and other appropriate options
curl_setopt(
$ch
, CURLOPT_URL,
$url
);
curl_setopt(
$ch
, CURLOPT_HEADER, false);
curl_setopt(
$ch
, CURLOPT_BINARYTRANSFER, true);
curl_setopt(
$ch
, CURLOPT_AUTOREFERER, true);
curl_setopt(
$ch
, CURLOPT_FOLLOWLOCATION, true);
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, true);
// grab URL and pass it to the browser
$opt
= curl_exec(
$ch
);
// close cURL resource, and free up system resources
curl_close(
$ch
);
$saveFile
=
$name
.
'.'
.
$ext
;
if
(preg_match(
"/[^0-9a-z._-]/i"
,
$saveFile
))
$saveFile
= md5(microtime(true)).
'.'
.
$ext
;
$handle
=
fopen
(
$saveFile
,
'wb'
);
fwrite(
$handle
,
$opt
);
fclose(
$handle
);
|
四、Alexa/Google Page Rank
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
function
page_rank(
$page
,
$type
=
'alexa'
){
switch
(
$type
){
case
'alexa'
:
$handle
=
fopen
(
$url
.
$page
,
'r'
);
break
;
case
'google'
:
break
;
}
$content
= stream_get_contents(
$handle
);
fclose(
$handle
);
$content
= preg_replace(
"~(n|t|ss+)~"
,
''
,
$content
);
switch
(
$type
){
case
'alexa'
:
if
(preg_match(
'~<div class="data (down|up)"><img.+?>(.+?) </div>~im'
,
$content
,
$matches
)){
return
$matches
[2];
}
else
{
return
FALSE;
}
break
;
case
'google'
:
$rank
=
explode
(
':'
,
$content
);
if
(
$rank
[2] !=
''
)
return
$rank
[2];
else
return
FALSE;
break
;
default
:
return
FALSE;
break
;
}
}
// Alexa Page Rank:
echo
'Alexa Rank: '
.page_rank(
'techug.com'
);
echo
'
';
// Google Page Rank
echo
'Google Rank: '
.page_rank(
'techug.com'
,
'google'
);
|
五、强制下载文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
$filename
=
$_GET
[
'file'
];
//Get the fileid from the URL
// Query the file ID
$query
= sprintf(
"SELECT * FROM tableName WHERE id = '%s'"
,mysql_real_escape_string(
$filename
));
$sql
= mysql_query(
$query
);
if
(mysql_num_rows(
$sql
) > 0){
$row
= mysql_fetch_array(
$sql
);
// Set some headers
header(
"Pragma: public"
);
header(
"Expires: 0"
);
header(
"Cache-Control: must-revalidate, post-check=0, pre-check=0"
);
header(
"Content-Type: application/force-download"
);
header(
"Content-Type: application/octet-stream"
);
header(
"Content-Type: application/download"
);
header(
"Content-Disposition: attachment; filename="
.
basename
(
$row
[
'FileName'
]).
";"
);
header(
"Content-Transfer-Encoding: binary"
);
header(
"Content-Length: "
.
filesize
(
$row
[
'FileName'
]));
@readfile(
$row
[
'FileName'
]);
exit
(0);
}
else
{
header(
"Location: /"
);
exit
;
}
|
六、通过Email显示用户的Gravatar头像
1
2
|
echo
'<img src="'
.
$gravatar_link
.
'" />'
;
|
七、通过cURL获取RSS订阅数
1
2
3
4
5
6
7
|
$ch
= curl_init();
curl_setopt(
$ch
,CURLOPT_URL,
'https://feedburner.google.com/api/awareness/1.0/GetFeedData?id=7qkrmib4r9rscbplq5qgadiiq4'
);
curl_setopt(
$ch
,CURLOPT_RETURNTRANSFER,1);
curl_setopt(
$ch
,CURLOPT_CONNECTTIMEOUT,2);
$content
= curl_exec(
$ch
);
$subscribers
= get_match(
'/circulation="(.*)"/isU'
,
$content
);
curl_close(
$ch
);
|
八、时间差异计算函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function
ago(
$time
)
{
$periods
=
array
(
"second"
,
"minute"
,
"hour"
,
"day"
,
"week"
,
"month"
,
"year"
,
"decade"
);
$lengths
=
array
(
"60"
,
"60"
,
"24"
,
"7"
,
"4.35"
,
"12"
,
"10"
);
$now
= time();
$difference
=
$now
-
$time
;
$tense
=
"ago"
;
for
(
$j
= 0;
$difference
>=
$lengths
[
$j
] &&
$j
<
count
(
$lengths
)-1;
$j
++) {
$difference
/=
$lengths
[
$j
];
}
$difference
=
round
(
$difference
);
if
(
$difference
!= 1) {
$periods
[
$j
].=
"s"
;
}
return
"$difference $periods[$j] 'ago' "
;
}
|
九、裁剪图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
$filename
=
"test.jpg"
;
list(
$w
,
$h
,
$type
,
$attr
) =
getimagesize
(
$filename
);
$src_im
= imagecreatefromjpeg(
$filename
);
$src_x
=
'0'
;
// begin x
$src_y
=
'0'
;
// begin y
$src_w
=
'100'
;
// width
$src_h
=
'100'
;
// height
$dst_x
=
'0'
;
// destination x
$dst_y
=
'0'
;
// destination y
$dst_im
= imagecreatetruecolor(
$src_w
,
$src_h
);
$white
= imagecolorallocate(
$dst_im
, 255, 255, 255);
imagefill(
$dst_im
, 0, 0,
$white
);
imagecopy(
$dst_im
,
$src_im
,
$dst_x
,
$dst_y
,
$src_x
,
$src_y
,
$src_w
,
$src_h
);
header(
"Content-type: image/png"
);
imagepng(
$dst_im
);
imagedestroy(
$dst_im
);
|
十、检查网站是否宕机
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
function
Visit(
$url
){
$agent
=
"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
;
$ch
=curl_init();
curl_setopt (
$ch
, CURLOPT_URL,
$url
);
curl_setopt(
$ch
, CURLOPT_USERAGENT,
$agent
);
curl_setopt (
$ch
, CURLOPT_RETURNTRANSFER, 1);
curl_setopt (
$ch
,CURLOPT_VERBOSE,false);
curl_setopt(
$ch
, CURLOPT_TIMEOUT, 5);
curl_setopt(
$ch
,CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(
$ch
,CURLOPT_SSLVERSION,3);
curl_setopt(
$ch
,CURLOPT_SSL_VERIFYHOST, FALSE);
$page
=curl_exec(
$ch
);
//echo curl_error($ch);
$httpcode
= curl_getinfo(
$ch
, CURLINFO_HTTP_CODE);
curl_close(
$ch
);
if
(
$httpcode
>=200 &&
$httpcode
<300)
return
true;
else
return
false;
}
echo
"Website OK"
.
"n"
;
else
echo
"Website DOWN"
;
|