php通过正则提取页面相关信息

1、获取页面标题

<?php
//提取标题
preg_match('/<title>(?<title>.*?)<\/title>/i', $html, $titleArr);
$title = $titleArr['title'];
?>

2、获取body主体内容,并将背景图片提取出来替换成其他图片地址

/**
 * 获取BODY主体区域内容
 * @param $html
 * @param $urlRoot
 * @return mixed
 */
function getBody($html,$urlRoot = null){
	//提取BODY主体
	preg_match('/<!--body-->(.*?)<!--body-->/is ', $html, $bodyArr);
	if(!$bodyArr){
		preg_match('/<body.*?>(.*?)<\/body>/is ', $html, $bodyArr);
	}
	$body = $bodyArr[1];
	//替换img文件
	$body =  preg_replace('/(<[img|IMG].*src=[\'|"])(\.\.\/)*(img.[^\'||^"]+)/',"$1$urlRoot$3",$body);
	//替换html文件内的css背景图片
	$body =  preg_replace('~\b(background(-image)?\s*:(.*?)\(\s*[\'|"]?)(\.\.\/)*(img.*?)?\s*\)~i',"$1$urlRoot$5)",$body);
	return $body;
}

3、提取页面Description内容

function getDescription($html){
	// Get the 'content' attribute value in a <meta name="description" ... />
	$matches = array();

	// Search for <meta name="description" content="Buy my stuff" />
	preg_match('/<meta.*?name=("|\')description("|\').*?content=("|\')(.*?)("|\')/i', $html, $matches);
	if (count($matches) > 4) {
		return trim($matches[4]);
	}

	// Order of attributes could be swapped around: <meta content="Buy my stuff" name="description" />
	preg_match('/<meta.*?content=("|\')(.*?)("|\').*?name=("|\')description("|\')/i', $html, $matches);
	if (count($matches) > 2) {
		return trim($matches[2]);
	}

	// No match
	return null;
}

4、替换css文件的背景图片地址

/**
 * 获取CSS内容
 * @param $cssCnt
 * @param $urlRoot
 * @return mixed
 */
function getCss($cssCnt,$urlRoot =null){
	//匹配包含 img文件夹的相对路径图片 (含义绝对路径的不包含在其中)
	//匹配替换不一定准确,因为只是将 含义 ../ 的地址转为url 而没有考虑 ../../ 之类的层级关系
	$css =  preg_replace('~\b(background(-image)?\s*:(.*?)\(\s*[\'|"]?)(\.\.\/)*(img.*?)?\s*\)~i',"$1$urlRoot$5)",$cssCnt);
	//添加css前缀
	$css =  preg_replace('/\b.(.*?)[,|{]/',"pat .$0",$cssCnt);
	//TODO 压缩css
	return $css;
}

minify:css和js的优化合并工具

Minify 是 PHP5 应用程序,它能合并、压缩 js 和 css 文件,并且能通过 HTTP gzip/deflate 及一些相关头,优化客户端缓存。

它会合并多个CSS或者JavaScript文件,移除一些不必要的空格和注释,进行gzip压缩,并且会设置浏览器的缓存头。Minify 在设计上和Yahoo的 Combo Handler Service非常像,不过Minify可以合并任何你想要合并的JavaScript和CSS文件。

下载地址:http://code.google.com/p/minify/

这个工具安装使用也非常简单。下载后放到网站根目录或任意目录,然后访问。

如放网站根目录,访问地址:http://localhost/min/builder/,则看到如下界面

在项目中的使用方法:

把 js 和 css 文件的路径按 Minify 的方式写,就完成了。

如单个css

<link media="screen" type="text/css" href="/min/f=style.css" rel="stylesheet" />

如果有多个,就用“,”隔开,如

<link media="screen" type="text/css" href="/min/f=style1.css,style2.css" rel="stylesheet" />

js也是一样写法

<script type="text/javascript" src="/min/f=script.js,script2.js"></script>

如果不知道路径怎么写,不要急,可以在http://localhost/min/builder/ 输入你需要合并压缩的 js 或 css 路径,按 Update 按钮后,它会给你生成一个完成的代码,你只需要将代码粘帖到文件中即可。

在wordpress下,也有一个插件,核心也是通过minify进行合并压缩,插件名称是wp-minify,
http://wordpress.org/extend/plugins/wp-minify/

我博客也试用了这个插件,呵呵。

解决PHP file_put_contents函数输出文件为UTF-8乱码问题

在做TES项目时,有个奇怪问题,生成html文件是UTF-8编码。而生成的CSS文件却是GBK编码。
代码都是一样,输出的编码类型却不一样。
经过测试,得出以下结论:
1、输出纯英文字符串时,其编码默认是GBK的,因为没有中文字符存在,则无法判断是否是utf-8。
2、有中文存在,则文件输出UTF-8的。

故解决方法如下:

<?php 

$f="Post.txt";
$p=iconv("ASCII","UTF-8","I love you.");
if(is_writable($f)){file_put_contents($f,chr(0xEF).chr(0xBB).chr(0xBF).$p);
}?>

原理很简单,主要是这句代码“chr(0xEF).chr(0xBB).chr(0xBF)”,人工指定输出BOM头即可。
否则的话,需要有UTF8编码的字符,例如中文字符。英文则UTF8和ASCII是一样的。

php 创建png8格式的图片 与png、jpg格式互转

php 创建png8格式的图片 代码如下

<?php
// Create a new true color image
$im = new imagecreatetruecolor(100, 100);;

// Fill with alpha background
$alphabg = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $alphabg);

// Convert to palette-based with no dithering and 255 colors with alpha
imagetruecolortopalette($im, false, 255);
imagesavealpha($im, true);

// Save the image
imagepng($im, './paletteimage.png');
imagedestroy($im);
?>

php实现jpg图片与png图片互相转换函数:

/**
 *转换格式
 *
 */
function change_type($filepath,$filename,$type = 'png') {
	//获取图片的宽高等信息
	$img = $filepath.$filename;
	$info = GetImageSize($img);
	$width = $info[0];
	$height = $info[1];
	$temp = explode(".",$filename); 
	$new_filename = $temp[0] .'.' . $type;
	$save_path = $filepath . $new_filename;
	switch ($type) {
		case 'png' :
			$im = imagecreatefromjpeg($img);
			// Fill with alpha background
			$alphabg = imagecolorallocatealpha($im, 0, 0, 0, 127);
			imagefill($im, 0, 0, $alphabg);
			
			// Convert to palette-based with no dithering and 255 colors with alpha
			imagetruecolortopalette($im, false, 255);
			imagesavealpha($im, true);
			// Save the image
			imagepng($im, $save_path);
			imagedestroy($im);
			$process = true;
			break;
			
		case 'jpeg' :
		default :
			$image = imagecreatefrompng($img);
			imagejpeg($image, $save_path, 60);;
			imagedestroy($image);
			$process = true;
			break;
	}
	$filesize = filesize($save_path);
	$json_all=array();
	$json=array(
		"filename"=>$new_filename,
		"width"=>$width,
		"size"=>$this->formatSizeUnits($filesize)
	);
	array_push($json_all,$json);


	return $json_all;

}

apache 配置反向代理解决javascript ajax跨域问题

1、打开apache下的http.conf 文件。
找到

#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so

把前面的#去掉。(如果不开启这3个的话,ajax post 数据会出现http 500错误)

2、在http.conf文件末尾加上以下代码

ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /foo/ http://foo.example.com/bar/
ProxyPassReverse /foo/ http://foo.example.com/bar/

说明 /foo/ 是本地服务器根目录下的foo文件夹。 这个文件夹映射到http://foo.example.com/bar/ 这里。

3、重启apache即可!

js就可以实现跨域post了。

$.post("http://localhost/foo/test.php")

实际是post到:http://foo.example.com/bar/test.php

相关参考网址:http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_proxy.html

http://shiningray.cn/proxypass-directive-in-apache.html

http://blog.csdn.net/paulluo0739/archive/2008/04/08/2260137.aspx

javascript传递日期参数给php date函数处理

php 使用 date 函数得出的长整型 和js 得出的长整型老是对不上。困扰了一上午,下午问archer,才把问题解决了。

php存储的时间截是到秒的,js存储的时间截是到毫秒,所以在js处理时,要除以1000。

多简单的一个问题啊,看来以后要多问问,免得浪费时间~~

给个参考:

// create a new javascript Date object based on the timestamp
// multiplied by 1000 so that the argument is in milliseconds, not seconds
var date = new Date(unix_timestamp*1000);;
// hours part from the timestamp
var hours = date.getHours();
// minutes part from the timestamp
var minutes = date.getMinutes();
// seconds part from the timestamp
var seconds = date.getSeconds();

// will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes + ':' + seconds;

关键是 unix_timestamp*1000 这句。

php正常处理即可。

站点缩略图生成器

Website Thumbnail Generator
站点缩略图生成器
出处:http://www.zubrag.com/scripts/website-thumbnail-generator.php
翻译:Fising@phpchina.com http://www.fising.cn
Website Thumb Generator can be used to create website thumbnails for your needs, or start your own website thumbnail generation service.
站点缩略图生成器可以根据需要被用来生成网站缩略图,或者启动你自己的网站缩略图生成服务。
Requirements:
Windows hosting
PHP GD library (installed on most hostings)
Permissions to execute third-party applications (i.e. exe files)
Permissions to execute Internet Explorer
需求:
Windows 主机
PHP GD 扩展库(大多数主机都有安装)
执行第三方应用程序的许可(i.e. exe 文件)
执行 Internet Explorer 的许可
How it works:
Website Thumbnail Generator checks if it already has website image in the cache, and shows it in the browser.
If no cached image then IECapt would be run from the script.
IECapt would run Internet Explorer, grab full sized website screenshot from it, and save image into the folder you specified in script settings.
Then Website Thumbnail Generator would resize image, and show it in the browser.
它如何工作:
站点缩略图生成器检查缓存中是否已经存在站点缩略图,并将之展示到浏览器中。
如果没有缓存图片,IECapt 将由本脚本启动。
IECapt 将运行 Internet Explorer,从中抓取全尺寸屏幕截图并将图片保存到你在脚本中设定的目录中。
然后站点缩略图生成器将重置图片尺寸,将之展示到浏览器中。
Installation:
Download IECapt from http://iecapt.sourceforge.net or from our site: IECapt. Place it in some folder on your server.
Download Website Thumbnail Generator using link below, and unzip it to the same folder.
Update webthumb.php with your settings for thumbnails folder, cache time, default thumbnail size, etc.
安装:
从 http://iecapt.sourceforge.net 或者我们的网站下载 IECapt。将它放到服务器的相同目录下。
从下面的链接下载站点缩略图生成器,解压到相同的目录下。
配置 webthumb.php,设定缩略图存放目录,缓存时间,默认尺寸等。
Sample usage:
webthumb.php?url=http://www.microsoft.com
webthumb.php?url=http://www.thumbnails.com&x=150&y=150
使用范例:
webthumb.php?url=http://www.microsoft.com
webthumb.php?url=http://www.thumbnails.com&x=150&y=150
附:站点缩略图生成器下载地址(附件中也有) http://www.zubrag.com/downloads/webthumb.zip

PHP使用GD库实现截屏

PHP5.2.2以上版本的GD库实现了两个截屏函数 imagegrabscreen 和 imagegrabwindow
分别用于截取整个屏幕和截取某个窗口(同ALT+PrintScreen)的屏幕。
1. 截取整个屏幕 Screenshot

<!--?php $im = imagegrabscreen(); imagepng($im, "myscreenshot.png"); ?-->

2. 截取一个窗口 Capture a window (IE for example)

<!--?php $browser = new COM("InternetExplorer.Application"); $handle = $browser--->HWND;
$browser->Visible = true;
$im = imagegrabwindow($handle);
$browser->Quit();
imagepng($im, "iesnap.png");
$im = imagegrabscreen();
?>

3. 截取IE内容 Capture a window (IE for example) but with its content!

<!--?php $browser = new COM("InternetExplorer.Application"); $handle = $browser--->HWND;
$browser->Visible = true;
$browser->Navigate("http://www.21andy.com/blog/");

/* Still working? */
while ($browser->Busy) {
    com_message_pump(4000);;
}
$im = imagegrabwindow($handle, 0);;
$browser->Quit();
imagepng($im, "iesnap.png");
?>

4. 截取IE的全屏模式 IE in fullscreen mode

<!--?php $browser = new COM("InternetExplorer.Application"); $handle = $browser--->HWND;

$browser->Visible = true;
$browser->FullScreen = true;
$browser->Navigate("http://www.21andy.com/blog/");

/* Is it completely loaded? (be aware of frames!)*/
while ($browser->Busy) {
    com_message_pump(4000);;
}
$im = imagegrabwindow($handle, 0);;
$browser->Quit();
imagepng($im, "iesnap.png");
?>

I use Internet Example Explorer as example, if you like to play more with IE and com, check out the IBrowser2 documentation at MSDN. It should work with any kind of window as long as you give the correct handle (usually $obj->HWND).
php_gd2.dll for 5.2.x thread safe build
php gd image documentation
IE manual (useful to tweak it from com_dotnet
原文: http://www.21andy.com/blog/20071122/684.html

 

IIS环境下wordpress中永久链接去掉index.php

最近经常有同学问我Wordpress上设置永久链接前面的index.php怎么去掉。这其实和服务器有关,IIS 和Apache 下,情况不大一样。一般出现index.php 主要是iis这边设置的问题。网上找了一些资料,以下这篇文章测试可用。

=======================

因为服务器是使用的Windows2003+IIS,想摆脱Wordpress永久链接前面的index.php不像在APACHE下那么容易。只好GOOGLE+BAIDU,输入词条,搜到N多关于WP永久链接的文章。

最后发现两种已成功实现的方案:

第一种方案:

不需要第三方插件cos-html-cache支持,利用服务器有自定义404错误页面的功能解决问题,但前提是你的服务器或者主机有自定义404错误页面的功能。如果是服务器那肯定可以支持,如果是虚拟主机,需你的服务器供应商提供自定义404错误页面选项。你只需创建一个404错误页面,并且写入下列几行代码即可简单优雅的实现无插件完美支持windows iis主机的永久固定链接的伪静态化地址格式。

具体设置步骤:

1.用DW新建一个PHP文档,并且页面属性里面把编码设置成UTF-8,在里面写入下面代码,保存,命名为404.php。将404.php上传到网站根目录。

<?php
header("HTTP/1.1 200 OK");
$ori_qs = $_SERVER['QUERY_STRING'];
$pattern = '/[^;]+;[^:]+://[^/]+(/[^?]*)(?:?(.*))?/i';

preg_match($pattern, $ori_qs, $matches);
$_SERVER['PATH_INFO'] = $matches[1] . '?' . $matches[2];
$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
$query_args = explode('&', $matches[2]);
unset($_GET);
foreach ($query_args as $arg)
{
$the_arg = explode('=', $arg);
$_GET[$the_arg[0]] = $the_arg[1];
}

include('index.php');
?>

我开始从网上复制该段代码使用的时候发现出现500错误,仔细一看原来是大家转载代码的时候都没有把代码里面错误的单引号修正过来,网上流传的这段代码里面不少单引号都是中文全角单引号,需要改成英文半角的才可以。上面的我已经改过了。大家直接复制即可!

2.设置404自定义错误指向404.php,一般来说,绝大多数服务器控制面板均提供该选项。

3.进入wordpress管理后台,设置(Options)-永久链接(Permalinks),你就当自己的主机是linux主机使好了,任意、随便设置自己喜欢的伪静态地址格式及静态地址后缀。
例如:
/y%year%/%post_id%.html
/%year%/%monthnum%/%post_id%/
/%year%/%monthnum%/%postname%.html
我用的格式是:/%year%/%monthnum%/%postname%/

第二种方案:

无Rewrite用cos-html-cache实现静态化
要求:使用cos-html-cache插件
具体下载,设置步骤和使用方法请查看插件作者的说明:cos-html-cache插件链接

用起来有点麻烦,我还是选择了第一种 :razz:

看来大家有点小麻烦,可能我也不知道是怎么回事。我把我正常用的404文件打包了,大家可以下载了试试!【404.PHP下载

转自:http://www.ossi.cn/2009-02/iis-wordpress-indexphp

php版的FCKeditor上传文件(或图片)中文显示为乱码的解决方法

测试环境:php 5 , utf-8编码

1、修正上传中文文件时文件名乱码问题
在文件connectors/php/commands.php中查找:
$sFileName = $oFile[‘name’] ;
在后面添加一行:
$sFileName = iconv(“utf-8″,”gbk”,$sFileName);

2、修正文件列表时中文文件名显示乱码问题
在文件connectors/php/util.php中查找:
return ( utf8_encode( htmlspecialchars( $value ) ) ) ;
修改为:
return iconv(”,’utf-8′,htmlspecialchars( $value ));

3、修正新建中文文件夹时的文件夹名乱码问题
在文件connectors/php/commands.php中查找:
$sNewFolderName =
在后面添加一行:
$sNewFolderName = iconv(“utf-8″,”gbk”,$sNewFolderName);

2.6.3版及后续版本的fck下的html文件已经加了utf-8的文件头。