由于 isset 属于 php 中的语言结构,而 array_key_exists 是函数,所以 isset 更快。并且 isset 在其他语言中也存在,更具可读性。
顿时很是疑惑——什么,isset竟然不是函数?而至于处理效率isset更快,倒变得不重要了(至少我一直使用isset,几乎没有关注过array_key_exists,具体可以见文章)
PHP.net中,也被分在Variable handling 函数,但是其实在中间有这样一段话:
Note: 因为是一个语言构造器而不是一个函数,不能被 可变函数 调用。
PHP里有echo、print、die、require等几个特殊的关键字,虽然它们用起来像是函数,但实际上更类似于if、while这样控制语句,而不是一个函数。也就是说,当解释器遇到:
print 'Hello world';
这样的一个表达式的时候,并不会把它转换成函数调用,而是直接映射到一系列预先定义好的操作。使用语言构成的时候可以加括号,也可以不加括号,但是使用函数的时候必须加括号。
可变函数可见:http://www.php.net/manual/zh/functions.variable-functions.php
$func = 'foo';
$func(); // This calls foo()
$func = 'bar';
$func('test'); // This calls bar()
$func = 'echoit';
$func('test'); // This calls echoit()
而如果
$func = 'print';
// 这样做会产生异常,因为print不是一个函数,而是语言的构成部分
$func('hello world');
这么写的话就会导致报错了。
在PHP源码里,关于isset是这么写的:
很明显不是函数的写法。
又长见识了。
代码如下 | 复制代码 |
<?php /** * 时间差计算 * * @param Timestamp $time 时间差 * @return String Time Elapsed * @author jakehu (http://www.111cn.net/) */ function time2Units ($time) { $year = floor($time / 60 / 60 / 24 / 365); $time -= $year * 60 * 60 * 24 * 365; $month = floor($time / 60 / 60 / 24 / 30); $time -= $month * 60 * 60 * 24 * 30; $week = floor($time / 60 / 60 / 24 / 7); $time -= $week * 60 * 60 * 24 * 7; $day = floor($time / 60 / 60 / 24); $time -= $day * 60 * 60 * 24; $hour = floor($time / 60 / 60); $time -= $hour * 60 * 60; $minute = floor($time / 60); $time -= $minute * 60; $second = $time; $elapse = ''; $unitArr = array('年前' =>'year', '个月前'=>'month', '周前'=>'week', '天前'=>'day', '小时前'=>'hour', '分钟前'=>'minute', '秒前'=>'second' ); foreach ( $unitArr as $cn => $u ) { if ( $year > 0 ) {//大于一年显示年月日 $elapse = date('Y/m/d',time()-$time); break; } else if ( $$u > 0 ) { $elapse = $$u . $cn; break; } } return $elapse; } $past = 1390000000; //起点时间 $diff = time() - $past;//时间差 echo '发表于' . time2Units($diff) . '前'; ?> |
使用演示:
代码如下 | 复制代码 |
//加载类库文件 //实例化类库,传入你要处理的图片的地址可以是网络地址,也可以是本地地址 //把图片等比缩小到最大宽度 100px或者最高100px,当只输入一个参数的时候,是限制最宽的尺寸。 //把图片等比缩小到原来的百分数,比如50就是原来的50%。 //截取一个175px * 175px的图片,注意这个是截取,超出的部分直接裁切掉,不是强制改变尺寸。 //从图片的中心计算,截取200px * 100px的图片。 //截图,前两个参数分别是需要解出的图片的右上角的坐标X,Y。 后面两个参数是需要解出的图片宽,高。 //把图片顺时针反转180度 //保存(生成)图片,你可以保存其他格式,详细参考文档 |
这个类库还有更多功能就不多做介绍了,如果你也在开发PHP网站过程中需要处理图片不妨阅读一下这个类库的文档,保证你处理图片很简单,再也不用和那十几个烦人的php图片处理函数打交道了!
另外一个强大的PHP图片缩略图类:phpThumb
该类除了缩放图片外,还能将图片转换成不同的格式输出(比如将GIF格式的图片输出为PNG格式),其特色功能还包括色彩、特效等
官方网址:http://phpthumb.sourceforge.net/
We’ll be using phpThumb , the open source PHP script to generate thumbnails on the fly.
Download and extract phpThumb to somewhere in your website folder. Now to use a rounded corner thumbnail of an image, simply use the img tag of HTML with src as
代码如下 | 复制代码 |
<img" width=100% src=”phpThumb.php?src=test.jpg&w=200&h=150&fltr[]=ric|20|20&f=png” /> Adjust the path to phpThumb according to where you place the phpThumb files. <html> <head> </head> <body> <img" width=100% src="phpThumb/phpThumb.php?src=../images/test.jpg&w=400&fltr[]=fram|3|2|CC9966|333333|CCCCCC" alt=""> </body> </html> |
一般只需要下面的文件就可以了
其实phpThumb的功能比我原先想象的要强大一些,下面把他的其他一些有用的参数列一下:
src:目标图片的地址
w:输出图片的宽度
h:输出图片的高度(如果不指定他将按w参数等比缩放)
q:输出如果是JPG格式的,可以规定它的输出质量
bg:输出时的背景(如果需要)
sw、sh、sx、sy:局部输出,宽高、起始位置
f:输出格式,可以为jpeg、png、gif、ico
sfn:输出gif动画中的某一帧
fltr[]:滤镜,可以有很多效果,包括锐化、模糊、旋翻转、水印、边框、遮照、色彩调整等
服务端
代码如下 | 复制代码 |
<?php |
客户端
代码如下 | 复制代码 |
<?php |
代码如下 | 复制代码 |
<?php //以程序登陆一个论坛登录为例 function bbslogin($user_login, $password, $host, $port = "80") { //需要提交的post数据 $argv = array('cookie' => array('user_login' => $user_login, 'password' => $password, '_wp_http_referer' => '/bbpress/', 're' => '', 'remember' => true)); foreach ($argv['cookie'] as $key => $value) { $params[] = $key . '=' . $value; } $params = implode('&', $params); $header = "POST /bbpress/bb-login.php HTTP/1.1rn"; $header .= "Host:$host:$portrn"; $header .= "Content-Type: application/x-www-form-urlencodedrn"; $header .= "Content-Length: " . strlen($params) . "rn"; $header .= "Connection: Closernrn"; $header .= $params; $fp = fsockopen($host, $port); fputs($fp, $header); while (!feof($fp)) { $str = fgets($fp); //以下是自己的逻辑代码,这里主要是模拟cookie,可用来同步登陆 if (!(strpos($str, "Set-Cookie:") === false)) { $tmparray = explode(" ", $str); $cookiearray = explode("=", $tmparray[1]); $cookiepaths = explode("=", $tmparray[6]); $cookiename = urldecode($cookiearray[0]); $cookievalue = urldecode(substr($cookiearray[1], 0, strlen($cookiearray[1]) - 1)); $cookietime = time() + 3600 * 24 * 7; $cookiepath = urldecode(substr($cookiepaths[1], 0, strlen($cookiepaths[1]) - 1)); setcookie($cookiename, $cookievalue, $cookietime, $cookiepath); } } fclose($fp); } ?> <?php // PHP POST数据的三种方法 // php有三种方法可以post数据,分别为Curl、socket、file_get_contents: /** * Socket版本 * 使用方法: * $post_string = "app=socket&version=beta"; * request_by_socket('facebook.cn','/restServer.php',$post_string); */ function request_by_socket($remote_server, $remote_path, $post_string, $port = 80, $timeout = 30) { $socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout); if (!$socket) die("$errstr($errno)"); fwrite($socket, "POST $remote_path HTTP/1.0rn"); fwrite($socket, "User-Agent: Socket Examplern"); fwrite($socket, "HOST: $remote_serverrn"); fwrite($socket, "Content-type: application/x-www-form-urlencodedrn"); fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . 'rn'); fwrite($socket, "Accept:*/*rn"); fwrite($socket, "rn"); fwrite($socket, "mypost=$post_stringrn"); fwrite($socket, "rn"); $header = ""; while ($str = trim(fgets($socket, 4096))) { $header .= $str; } $data = ""; while (!feof($socket)) { $data .= fgets($socket, 4096); } return $data; } /** * Curl版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_curl('http://facebook.cn/restServer.php',$post_string); */ function request_by_curl($remote_server, $post_string) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remote_server); curl_setopt($ch, CURLOPT_POSTFIELDS, 'mypost=' . $post_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Jimmy's CURL Example beta"); $data = curl_exec($ch); curl_close($ch); return $data; } /** * 其它版本 * 使用方法: * $post_string = "app=request&version=beta"; * request_by_other('http://facebook.cn/restServer.php',$post_string); */ function request_by_other($remote_server, $post_string) { $context = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded' . 'rn'.'User-Agent : Jimmy's POST Example beta' . 'rn'.'Content-length:' . strlen($post_string) + 8, 'content' => 'mypost=' . $post_string) ); $stream_context = stream_context_create($context); $data = file_get_contents($remote_server, false, $stream_context); return $data; } ?> |