Linux下PHP自动生成文章预览图,html转换成各种格式图片、PDF

如果输出的内容包括phpwkhtmltox说明扩展成功。

1.5.小试“牛刀”,将谷歌首页保存为图片

1.5.1.编辑测试的php脚本test_html_to_image.php

作为php扩展安装用WordPress建立博客站点,选择了一套可以显示文章缩略图的模板,几经折腾将原有模板改得面目全非,最后还是直接上线吧,不想折腾了。

站点上线没几天,在公司做项目时,对图片做了一个放大的JS,自己博客也加上点击缩略图查看原图的功能,然后迅速的加了。

过了几天,突发奇想,想做文章预览图,即点击缩略图查看文章预览图,也就是你们现在首页和文章列表页看到的那个功能。

不费话了,不知道什么时候又要折腾。。。

Linux下PHP自动生成文章预览图,最初大致的思路很简单,就是我能不能通过某种方式调用浏览器内核来渲染网页即HTML,然后将HTML保存为图片。然后开始一头扎进Google、Baidu,搜索了很长时间,得出结论,资料太少,想自己写一个C扩展,调用webkit内核。就在快要放弃的时候,在论坛里面看到wkhtmltox,然后所有的问题都在于wkhtmltox了,很庆幸的是在google code里面又看到了phpwkhtmltox,然后我笑了。

安装软件清单:

a.libwkhtmltox linux下的webkit内核(不依赖为图形界面)
b.phpwkhtmltox php扩展,可调用webkit内核将网页转换成各种格式图片或者pdf
c.font-chinese 中文字体
d.msyh,Consolas 字体

系统环境:Linux CentOS 6.2 64位

1.Linux下安装libwkhtmltox

libwkhtmltox是提取出来的可以直接复制到linux相应的目录的webkit内核,可能有人想着,要渲染网页是需要图形浏览器,但是我们的VPS一般都是没有图形界面的,其实我们只需要安装libwkhtmltox到linux即可,并不需要图形界面。

1.1.下载libwkhtmltox

下载地址:http://code.google.com/p/wkhtmltopdf/downloads/list?can=1&q=&colspec=Filename+Summary+Uploaded+ReleaseDate+Size+DownloadCount

需要说明的是,libwkhtmltox现在的版本已经是0.11了,但是本人在CentOS 6.2下安装了libwkhtmltox-0.11之后,在将网页转换成图片时会出错,最终选择了0.10版本,这个版本还是相当稳定的。

1.2.安装libwkhtmltox

下载并解压

#mkdir libwkhtmltox
#cd libwkhtmltox
#wget http://wkhtmltopdf.googlecode.com/files/libwkhtmltox-0.10.0_rc2-amd64.tar.bz2
#tar jxvf libwkhtmltox-0.10.0_rc2-amd64.tar.bz2
#ll
drwxr-xr-x 2 root root       59 Jan  3 20:58 examples
drwxr-xr-x 3 1000 1000       22 Nov  7  2010 include
drwxr-xr-x 2 1000 1000       28 Jan 31  2011 lib

安装

 

#cd lib
#cp libwkhtmltox.so /usr/local/lib/
#cd ../include
#cp -R wkhtmltox /usr/local/include/

 

1.3.安装phpwkhtmltox

下载并解压

 

#wget https://github.com/mreiferson/php-wkhtmltox/archive/master.zip
#unzip master.zip

作为php扩展安装

 

#cd php-wkhtmltox-master
#phpize
#./configure
#make install

修改PHP配置文件,追加

 

extension=phpwkhtmltox.so

重新加载系统动态链接库(重要,否则PHP无法完成扩展phpwkhtmltox)

 

#ldconfig

1.4.检查PHP是否已经支持phpwkhtmltox

 

#php -m

 

如果输出的内容包括phpwkhtmltox说明扩展成功。

1.5.小试“牛刀”,将谷歌首页保存为图片

1.5.1.编辑测试的php脚本test_html_to_image.php

 

<?php
wkhtmltox_convert(
    'image',
    array(
        'out' => '/tmp/test.jpg',
        'in' => 'http://www.google.com.hk/'
    )
);
?>

 

1.5.2.wkhtmltox_convert($type, $globalsetting, $objectsetting)说明

html转换为pdf示例:

 

<?php
wkhtmltox_convert('pdf',
    array(
        'out' => '/tmp/test.pdf',
        'imageQuality' => '95'
    ), // global settings
    array(
        array(
            'page' => 'http://www.phpboy.net/'
        ),
        array(
            'page' => 'http://www.baidu.com/'
        )
    )// object settings
);
?>

 

具体其他参数请参考:http://www.cs.au.dk/~jakobt/libwkhtmltox_0.10.0_doc/pagesettings.html#pagePdfGlobal

1.5.2.运行PHP

 

#php test_html_to_image.php

 

到tmp目录下就可以看到我们已经将google的首页保存为test.jpg图片,是不是很有成就感,把图片下载到本地,查看图片,你可能会发现中文显示为乱码,不用担心,请看下文。

1.6.让CentOS支持中文

 

#yum groupinstall chinese-support

 

安装完毕之后,再次运行php test_html_to_image.php,中文就不会出现乱码了,但是你可能会觉得中文显示得不好看,不用担心,请看下文。

1.7.让linux CentOS支持微软雅黑字体

1.7.1.下载或者从本地windows拷贝微软雅黑(注意从windows系统里面拷贝出来应该是有2个文件),并上传到linux服务器

1.7.2.把字体文件拷贝到/usr/share/fonts/xxx,其中xxx为新增字体文件夹,如msyh

 

#cd /usr/share/fonts/
#mkdir msyh
#cd msyh

1.7.3.建立字体缓存

 

#mkfontscale
#mkfontdir
#fc-cache -fv

 

1.8.让Linux CentOS支持Consolas字体(技术类博客可能会发布一个示例代码,大部分wordpress技术博客都会安装SyntaxHighlighter插件,而该插件代码显示字体首选的是Consolas字体,所以为了html转换成图片时示例代码显示得好看,我们也需要让linux支持Consolas字体)

1.8.1下载或者从本地windows拷贝Consolas(注意从windows系统里面拷贝出来应该是有4个文件),并上传到linux服务器

1.8.2.把字体文件拷贝到/usr/share/fonts/xxx,其中xxx为新增字体文件夹,如Consolas

 

#cd /usr/share/fonts/
#mkdir Consolas
#cd Consolas

1.8.3.建立字体缓存

 

#mkfontscale
#mkfontdir
#fc-cache -fv

 

安装完毕之后,你可以再次运行php test_html_to_image.php,如果你填写的网址对应的网页采用微软雅黑字体,该网页转换成图片的显示效果就比较美观了。

最后,写了一个wordpress的插件,实现在保存文章时自动生成文章缩略图,有需要的同仁可以留言留下联系方式。

参考文档:
1.libwkhtmltox支持的参数说明http://www.cs.au.dk/~jakobt/libwkhtmltox_0.10.0_doc/pagesettings.html#pagePdfGlobal
2.自动生成网页截图(Screenshot)方法http://www.phpip.com/design/skill/A62009909P/23444.html
3.CentOS 安装中文语言包以及输入法 http://blog.chinaunix.net/uid-24352482-id-3203655.html

本文链接:http://www.phpboy.net/linux/575.html

Jquery KeyValue 操作

今天在做frasers的corp sale客户要求finance单独拿出来,

拿出来之后当payment的状态不同时需求的action不同,

这就又破坏了开始配置文件里的配置,

增加了定制化的东西,

以后看看怎样改进吧,

而且action的地方和return这个“按钮”的地方是同级的,

也不好在同级里设置变量,

设置了一个循环全局就变成固定值了,具体不解释了。

以下方式通过id解决。

//假设我们有一个 div 如下(HTML 代码): 
<div class="traget"> 123 </div>
 
 
//假设我们已经在页面引入了 Jquery 代码
//那我们往里写缓存数据的时候可以这么写(JS 代码)
var msg = "456";
$(".traget").data("cache",msg);
//那么现在我们的 traget 这个 div 中就会有 
//msg 变量中存储的 “456” 这个字符串了。
 
//取出缓存数据的写法
var getdata = $(".traget").data("cache");
//那么 getdata 变量现在就是“456” 这个变量了。

datatable的条件使用

首先 $aCloumns数组里要有需要查询的列比如说submit_time 这个是按时间跨度查询

array('f'=>'submit_time','d'=>'Reimburse Time','so'=>array('desc','asc'), 'dso'=>'desc','se'=>'btw')

se是搜索‘bwt’是between,具体的在datatable里没有找到

比如说这一列的下标是3 那么在前端页面中会有如下js

$('.show_date').datepicker({dateFormat: 'yy-mm-dd', onSelect: function(){
  var st = $('#start_date').val();
  var ed = $('#end_date').val();
  oReimburseList.fnFilter(st+' 00:00:00'+','+ ed +' 23:59:59', 3);
 }});

看到实力化的对象是oReimburseList 调用的方法是fnFilter

this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal )
  {
   var oSettings = _fnSettingsFromNode( this[_oExt.iApiIndex] );
   
   if ( !oSettings.oFeatures.bFilter )
   {
    return;
   }
   
   if ( typeof bRegex == 'undefined' )
   {
    bRegex = false;
   }
   
   if ( typeof bSmart == 'undefined' )
   {
    bSmart = true;
   }
   
   if ( typeof bShowGlobal == 'undefined' )
   {
    bShowGlobal = true;
   }
   
   if ( typeof iColumn == "undefined" || iColumn === null )
   {
    /* Global filter */
    _fnFilterComplete( oSettings, {
     "sSearch":sInput,
     "bRegex": bRegex,
     "bSmart": bSmart
    }, 1 );
    
    if ( bShowGlobal && typeof oSettings.aanFeatures.f != 'undefined' )
    {
     var n = oSettings.aanFeatures.f;
     for ( var i=0, iLen=n.length ; i<iLen ; i++ )
     {
      $('input', n[i]).val( sInput );
     }
    }
   }
   else
   {
    /* Single column filter */
    oSettings.aoPreSearchCols[ iColumn ].sSearch = sInput;
    oSettings.aoPreSearchCols[ iColumn ].bRegex = bRegex;
    oSettings.aoPreSearchCols[ iColumn ].bSmart = bSmart;
    _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 );
   }
  };

 

 

普通的调用就是select或者单个input 原理一样都要有cloumn在acloumn里然后在前端触发datatable按这个条件去筛选数据

$('#is_paid_filter').change(function(){
  oReimburseList.fnFilter( $(this).val(), 7);
 });

 $('#search_box').keyup(function(){
  oReimburseList.fnFilter( $(this).val() );
 });

 

还有的是直接通过datatable的sDom生成的具体方法还没研究

PHP中explode函数用\n分隔经验

今天左frasers的vms的时候address又3个框,提交时用‘\n’拼接然后取出的时候直接放到js里会有问题

然后晚上查了一下可以这样解决

 

PHP的explode函数用"\n"进行分隔时,使用单引号和双引号会得到不同的结果.

 

单引号:

<?php
$string = "Hello\nHello\nHello";
$arr = explode('\n',$string);//Using single quotes
print_r($arr);
/*
Returns:
Array
(
    [0] => Hello
Hello
Hello
)
*/
?>
双引号:
<?php
$string = "Hello\nHello\nHello";
$arr = explode("\n",$string);//Using double quotes
print_r($arr);
/*
Returns:
Array
(
    [0] => Hello
    [1] => Hello
    [2] => Hello
)
*/

php数组指针

<?php
$arr=array('a','b','c','d' );
echo key($arr);//获取当前指针指向的元素对应的key 
echo current($arr);//获取当前指针指向的的元素
echo next($arr);//指针向后移并取出该元素  打印出b
echo next($arr);//打印出c
echo reset($arr);//移到第一个单元并取出该元素,打印出第一个元素a
echo end($arr) ;// 取出最后一个元素  打印出最后一个元素d
echo prev($arr);//向前移一个单元 并取出该元素 打印出c
?>

php接受xml和发送(post)xml

接收xml:
$xml = file_get_contents('php://input');
 
发送(post):
$xml_data = <xml>…</xml>";

$url http://dest_url
;

$header[] = "Content-type: text/xml";//定义content-type为xml

curl_setopt($chCURLOPT_URL$url
);

curl_setopt($chCURLOPT_RETURNTRANSFER1
);

curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

curl_setopt($chCURLOPT_POST1
);

curl_setopt($chCURLOPT_POSTFIELDS$xml_data
);

$response curl_exec($ch
);

if(
curl_errno($ch
))

{

    print 
curl_error($ch
);

}

curl_close($ch);

 
或者:
$fp = fsockopen($server, 80);

fputs($fp, "POST $path HTTP/1.0\r\n");

fputs($fp, "Host: $server\r\n");

fputs($fp, "Content-Type: text/xml\r\n");

fputs($fp, "Content-Length: $contentLength\r\n");

fputs($fp, "Connection: close\r\n");

fputs($fp, "\r\n"); // all headers sent

fputs($fp, $xml_data);

$result = '';

while (!feof($fp)) {

$result .= fgets($fp, 128);

}

return $result;

6个免费,虚拟主机管理系统

此之前一直在苦苦寻找免费或者破解的类似于DirectAdmin的虚拟主机管理系统,没想到开源界已经产生了如此多优秀的免费的虚拟主机管理系统:ZPanel,web- cp,VHCS,virtualmin,PHPMyWebHosting,SysCP。


1. ZPanel – 在Windows下的免费Hosting Panel
ZPanel已经更名为RapidCP,最新版本为RapidCP 3.0
网 址:

http://sourceforge.net/projects/zpanel/
http://www.rapidcp.com/
RapidCP新功能介绍:http://www.rapidcp.com/features/
ZPanel 2.6 is the latest stable release. It is recommended for production environments.
RapidCP 3.0 is the latest beta release. It is intended for testing purposes only.
 

 

2. web-cp – *nix的虚拟主机管理
网址:
http://sourceforge.net/projects/webcp/
http://www.web-cp.net/
用PHP-CLI写的一个 Web服务器
支持多种脚本Scripting PHP,sun asp,cf,perl…
支持shell access
支 持 SSI
支持.htacess
支持多种DNS服务 bind,powerdns,mydns,tinydns
完全使用 PHP开发,支持Shell Access
要安装PHP CLI(Command-LIne ) 控制面板的后端服务器 server/webcp.php 和 httpd服务器 server/webcp-httpd.php 都需要 PHP CLI二进制支持,以便能够操作系统进程
个人:个人信息,密码,邮件,ftp
域:允许域的所有者在该域下增删用户,设定别名,子域名,数据库
销售商:增加domain
服务器: 监视服务,管理服务

 

3. VHCS – Virtual Hosting Control System
支持*nix系统的,用Perl和C实现核心功能,PHP实现 管理界面。
网址:
http://sourceforge.net/projects/vhcs/
http://www.vhcs.net/

 

4、webmin的虚拟主 机管理模块virtualmin
webmin是一个可运行于Linux/freebsd的web界面的主机管理系统,有中文包
而 virtualmin则是它的一个虚拟主机管理模块,提供中文支持。
webmin官方站: http://www.webmin.com/
virtaulmin站点: http://www.swelltech.com/virtualmin/

 

5、基于php/mysql的虚拟主机控制程序PHPMyWebHosting
PHPMyWebHosting是个开源的, 基于php/mysql的虚拟主机控制面板程序,你可以用它建立带有邮箱,mysql支持的多域名虚拟主机,它须建立在Linux/freebsd之上, 不支持windows。
安装phpmywebhosting你必须拥有系统管理员(root)权限,并依次安装以下套件:
MySQL
Apache and PHP
Postfix
Maildrop
Courier
ProFTPd
PHPMyWebHosting
官方站上有基于各平台详细的安装说明 http://www.ladse.de
phpmywebhosting 下载:http://www.ladse.de/index.php/Files

 

6、SysCP虚拟主机管理系统[全php版]
1.有中文包
2.admin,reseller,client 三级管理
3.全部为php代码构成
4.有不少模块(modules)供选择安装
5.开源,免费(基于GPL)
6.Linux/bsd 环境,特别是debian(最初是专为它开发的)
是德国人写的,有简体中文,英文,法文,德文语言包,是多语言的
具有以下特性:
Customer Interface
* managing email accounts
* managing email forwarders
* managing subdomains
* managing mysql databases
* managing additional ftp account
* managing .htaccess password protections for directories
* managing path options for example directorylisting
Admin Interface:
* managing of customers: you can define exactly what kind of resources your customers get (e.g. amount of pop accounts, amount of mysql databases etc.)
* manage domains: you can individualy edit zone files and directory index per domain
支持以下配套服务器或引擎:
# webserver: [Apache 1.3] with [PHP4] (apache2.0.x也可以)
# mail transfer agent: [Postfix]
# pop/imap server: [Courier]
# ftp server: [ProFTPd]
# database server: [MySQL]
# nameserver: [Bind9]
# traffic accounting and statistics: [Webalizer]
官方站:http://www.syscp.de/
下载:http://www.syscp.de/wiki/EnDownloads
模块下载:http://modules.syscp.de/
在线演示:http://www.syscp.de/onlinedemo/index.php#p# 副标题


Webmin是目前功能最强大的基于Web的Unix系统管理工具


Webmin是目前功能最强大的基于 Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。目前Webmin支持绝大多数 的Unix系统,这些系统除了各种版本的linux以为还包括:AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等。
Webmin 让您能够在远程使用支持 HTTPS (SSL 上的 HTTP)协议的 Web 浏览器通过 Web 界面管理您的主机。这在保证了安全性的前提下提供了简单深入的远程管理。这使得 Webmin 对系统管理员非常理想,因为所有主流平台都有满足甚至超出上述需求的 Web 浏览器。而且,Webmin 有其自己的“Web 服务器”,因此不需要运行第三方软件(比如 Web服务器)。万事具备。Webmin 的模块化架构允许您在需要时编写您自己的配置模块。除了在此介绍的模块之外,Webmin 还包括许多模块。尽管目前我们将主要关注网络服务,但是您会看到,几乎您系统的每一部分都能够通过 Webmin 来配置和管理。


开源主 机/虚拟主机管理系统

ISPCONFIG:安装简单,可以满足基本的虚拟主机服务商需求.
VHCS:感觉安装复杂, 相关说明文档少.
WEB-CP,SYSCP:功能有点弱.
PHPMyWebHosting:需要改动的东西很多.
GNUHH: 功能最强大,管理模块最多,用户和管理员的操作流程也比较清晰.推荐系统管理员和IDC使用.


评价参考

用户群 最多的 VHCS. 而 Web-CP,DTC和SysCp也都有许多用户
功能最强大的 GNU Hosting Helper 支持机群,文档,订单
单机版本功能最强大的是ISPConfig
结构最好的 SysCP, 采用类似结构的有Web-Cp,DTC,VHCS
结论:大型IDC,推荐GNU Hosting Helper,备选ISPMan
单台主机,推荐 VHCS2,备选 Web-CP,DTC,ISPConfig,WHT,RavenCore(推荐程度依次降低,其实这几个系统都不错,看个人的喜好了)
DTC 是一个即适合单机使用,也适合集群使用的主机管理系统,Apple欧洲公司就是选用这套系统在Mac OS X上使用
——————————– 华丽的分割线———————————-
Case1: ISPConfig
Download ==) http://www.ispconfig.org/downloads.htm
Forums ==) http://www.howtoforge.com/forums
The current version is: 2.2.22 (== 2008/15/04

Case2: ISP-Manager
Download ==) http://www.projektfarm.com/updates_en.html
The current version is: 2.0.4 (== 2005/24/10

ispconfig使用手冊
ispconfig user_guide ==) http://ispconfig.org/downloads/manual_big5/toc.html
中 文版的管理員手冊_chinese: Administrator manual
ref: http://ispconfig.org/downloads/manua…n_big5_src.htm
中 文版的reseller手冊_chinese: Reseller manual
ref: http://ispconfig.org/downloads/manua…r_big5_src.htm
中 文版的客戶手冊_chinese: Clients manual
ref: http://ispconfig.org/downloads/manua…e_big5_src.htm

———————————- 再分————————————–
一些獨立主機之_Control_Panel_全部都免費.

1. xpanel.com
2. webmin
3. webcp ==) http://web-cp.net/
4. vhcs.net
5. isp-control.net
6. syscp ==) http://www.syscp.de
7. dtc ==) http://www.gplhost.com/?rub=softwares&sousrub=dtc
8. zpanel ==) http://www.thezpanel.com/
9. http://phpanel.net
0. http://www.ispconfig.org/
a. http://www.parsv.com/winpanel.htm
b. http://cubepanel.com/download/index.htm