存档

文章标签 ‘PHP’

PHP获取各大视频网站页面中的Flash播放地址

2013年3月24日 5 条评论

目前已支持新浪播客、优酷网、土豆网、酷6网、搜狐视频、56网、奇艺网、凤凰网等视频网站的视频播放页链接。
PHP API调用实例:http://fengdingbo.com/tools/web_video.php?url=视频页面地址[……]

Read more

分类: PHP 标签: ,

PHP flock文件锁定 独占操作测试

2013年3月15日 没有评论

flock – 轻便的咨询文件锁定

flock()函数原型

bool flock ( int handle, int operation [, int &wouldblock] )

PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部[……]

Read more

分类: PHP 标签: ,

PHP CURL模拟登录163邮箱抓取好友列表

2013年3月9日 1 条评论
<?php
$username	="username@163.com";
$password	="password";
$robot = new web_robot();
// 获取163联系人
$address_list = $robot->get_address_list($username, $password);
print_r($address_list);
 
/**
 * 模拟登录163邮箱抓取好友列表
 * @copyright (c) 2013
 * @author qiufeng <fengdingbo@gmail.com>
 * @link	http://www.fengdingbo.com
 * @version 1.0
 */
class web_robot{
 
	/**
	 * 存放cookie信息的临时文件名 
	 * @var string
	 */
	public $cookie_tmp_file;
 
	public function __construct()
	{
		$this->cookie_tmp_file = tempnam( ini_get( "upload_tmp_dir" ), "cookie" );
	}
 
	public function __destruct()
	{
		// 删除临时COOKIE
		unlink($this->cookie_tmp_file);
	}
 
	/**
	 * 获取联系人列表
	 * || ============================
	 * || 返回值说明:
	 * || ----------------------------
	 * || int data type:
	 * || 201:用户名或密码不正确.
	 * || 202:服务器异常,请稍后再试.
	 * || 203:没有找到邮箱联系人.
	 * || 
	 * || array data type:
	 * || 获取联系人列表成功.
	 * || ============================
	 * @param string $username
	 * @param string $password
	 * @return mixed
	 */
	public function get_address_list($username, $password)
	{
		if ( ! $this->login($username, $password))
		{
			return 201;
		}
 
		$header = $this->_getheader($username);
 
		if ( ! $header['sid'])
		{
			return 202;
		}
 
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, "http://" . $header['host'] . "/js4/s?sid=" . $header['sid'] . "&func=global:sequential");
		curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_tmp_file);
		curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Language: zh-cn', 'Connection: Keep-Alive', 'Content-Type: application/xml; charset=UTF-8'));
		$str = "<?xml version=\"1.0\"?><object><array name=\"items\"><object><string name=\"func\">pab:searchContacts</string>" .
				"<object name=\"var\"><array name=\"order\"><object><string name=\"field\">FN</string><boolean name=\"ignoreCase\">true</boolean></object>" .
				"</array></object></object><object><string name=\"func\">user:getSignatures</string></object>" .
				"<object><string name=\"func\">pab:getAllGroups</string></object></array></object>";
 
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
		curl_setopt($ch, CURLOPT_TIMEOUT, 60);
		ob_start();
		curl_exec($ch);
		$data = ob_get_clean();
 
		// 把字符转转化为SimpleXMLElement Object
		$XML = (array)simplexml_load_string($data)->array->object[0]->array;
		if (array_key_exists('object', $XML))
		{
			foreach($XML['object'] as $v)
			{
				$array_format = (array)$v;
				$list[] = $array_format['string'];
			}
 
			return $list;
		}
 
		return 203; }
 
	/**
	 * 登陆163邮箱
	 * @param string $username
	 * @param string $password
	 * @return boolean
	 */
	private function login($username, $password)
	{
		// 登陆163,保存cookie
		$cookies = array();
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 
		curl_setopt($ch, CURLOPT_URL, "http://reg.163.com/logins.jsp");
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, "username=".$username."&password=".$password."&type=1");
 
		curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_tmp_file);
		curl_setopt($ch,CURLOPT_HEADER,1);
		curl_setopt($ch, CURLOPT_TIMEOUT, 30);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //文件流形式返回
		$str = curl_exec($ch);
		curl_close($ch);
 
		preg_match('/(window.location.replace\(\"(.*)\"\))/i', $str,$content);
 
		if (isset($content) && is_array($content) && array_key_exists(2, $content))
		{
			ob_start();
			$ch = curl_init($content[2]);
			curl_setopt($ch, CURLOPT_TIMEOUT, 30);
			curl_setopt($ch,CURLOPT_COOKIEFILE, $this->cookie_tmp_file);
			$str2 = curl_exec($ch);
			curl_close($ch);
			$content = ob_get_clean();
 
			// 校验是否登陆成功
			if (strpos($content, "安全退出") && strpos($content, $username))
			{
				return TRUE;
			}
		}
 
		return FALSE;
	}
 
	/**
	 * 获取头部信息
	 * @param string $username
	 * @return array
	 */
	private function _getheader($username)
	{
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, "http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=" . $username);
		curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_tmp_file);  //当前使用的cookie
		curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_tmp_file);   //服务器返回的新cookie
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch, CURLOPT_HEADER, true);
		curl_setopt($ch, CURLOPT_NOBODY, true);
		$content = curl_exec($ch);
		curl_close($ch);
 
		preg_match_all('/Location:\s*(.*?)\r\n/i', $content, $regs);
		$refer = $regs[1][0];
		preg_match_all('/http\:\/\/(.*?)\//i', $refer, $regs);
		$host = $regs[1][0];
		preg_match_all("/sid=(.*)/i", $refer, $regs);
		$sid = $regs[1][0];
 
		return array('sid' => $sid, 'refer' => $refer, 'host' => $host);
	}
}
?>
分类: PHP 标签: ,

Linux下vim添加PHP函数提示

2013年2月5日 没有评论

首先下载PHP函数列表文件,将PHP函数列表文件保存在目录 ~/.vim/下:
也可以自己去选择版本下载:http://svn.php.net/viewvc/phpdoc/doc-base/trunk/funclist.txt

我这里选的是当前最新的。

64c89997c8e1430c[……]

Read more

分类: Linux 标签: ,

PHP 打印所有常量

2013年2月3日 没有评论

官方给的原型:
array get_defined_constants ([ bool $categorize = false ] )
下边是人类的理解:
get_defined_constants(true)
参数为TRUE时:返回一个多维数组,分类为第一维的键名,常量和它们的值位于第二维。

get_defined_constants() e.g #1:
PHP打印所有常量

get_defined_constants() e.g #2:
PHP打印用户自定义常量:

get_defined_constants() e.g #3:
PHP给定一个常量值,返回常量名称:

get_defined_constants() e.g #4:
如果你想过滤,并按常量的前缀来查询(即你已经有一套常量的命名方案),那么你可以使用这个小巧的功能,进行简单的调试:[……]

Read more

分类: PHP 标签: ,

PHP socket模拟POST请求

2013年1月31日 2 条评论

一听到这个功能需求的时候,立即就蒙了,俺一直以为socket是C/S架构里边的东西,俺错了,俺有罪,俺应该主动蹲墙角去。。。
以前模拟post请求俺都用PHP curl扩展实现来着,没想过PHP socket也可以实现。最近翻了下相关资料才发现原来没有那么高深,只是以前一直没有完全理解post的原[……]

Read more

分类: PHP 标签: ,

PHP扩展Xdebug的安装使用实例

2013年1月29日 没有评论

测试环境:Ubuntu12.04+PHP 5.3.10

# 获取xdebug最新源码包
git clone git://github.com/derickr/xdebug.git
cd xdebug/
# 如果没有安装phpize扩展,请尝试:apt-get install phpize
phpize
./configure --enable-xdebug
make && make install

我这边生成的路径为:/usr/lib/php5/20090626+lfs/xdebug.so
然后更改php.ini文件
自行选择增加这些配置选项[……]

Read more

分类: PHP 标签: ,

PHP读取文件

2013年1月24日 没有评论

以前使用PHP读取文件一直惯用fread读取来着,上次看CI源码时发现他们读取文件时首选是file_get_contents。

看了PHP官网手册也建议使用file_get_contents来读取文件。

于是做了个测试:测试对象为一个只有2个字节的文件,循环1000次读取,统计时间差。
测试结果截图如下:[……]

Read more

分类: PHP 标签: