websitepanel更换服务的版本

Websitepanel虽然开源免费,但仍有很多不足。比起Plesk易用性差很多。

这次转移碰到个问题,之前是03的系统,转移后复制了原数据库,但服务的信息仍是旧的,面板又不支持自动更新服务的版本。这个时候需要根据Providers中的ServiceID来修改Services表中的数据,这样就可以了。

查询整个数据库中某个特定值所在的表和字段的方法

查询整个数据库中某个特定值所在的表和字段的方法

有时候我们想通过一个值知道这个值来自数据库的哪个表以及哪个字段,在网上搜了一下,找到一个比较好的方法,通过一个存储过程实现的。只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名。

前提是要将这个存储过程放在所查询的数据库。


CREATE PROCEDURE [dbo].[SP_FindValueInDB]
(
@value VARCHAR(1024)
)        
AS
BEGIN
— SET NOCOUNT ON added to prevent extra result sets from
— interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @sql VARCHAR(1024) 
DECLARE @table VARCHAR(64) 
DECLARE @column VARCHAR(64) 

CREATE TABLE #t ( 
tablename VARCHAR(64), 
columnname VARCHAR(64) 

DECLARE TABLES CURSOR 
FOR 

SELECT o.name, c.name 
FROM syscolumns c 
INNER JOIN sysobjects o ON c.id = o.id 
WHERE o.type = ‘U’ AND c.xtype IN (167, 175, 231, 239) 
ORDER BY o.name, c.name 

OPEN TABLES 

FETCH NEXT FROM TABLES 
INTO @table, @column 

WHILE @@FETCH_STATUS = 0 
BEGIN 
SET @sql = ‘IF EXISTS(SELECT NULL FROM [‘ + @table + ‘] ‘ 
SET @sql = @sql + ‘WHERE RTRIM(LTRIM([‘ + @column + ‘])) LIKE ”%’ + @value + ‘%”) ‘ 
SET @sql = @sql + ‘INSERT INTO #t VALUES (”’ + @table + ”’, ”’ 
SET @sql = @sql + @column + ”’)’ 

EXEC(@sql) 

FETCH NEXT FROM TABLES 
INTO @table, @column 
END 

CLOSE TABLES 
DEALLOCATE TABLES 

SELECT * 
FROM #t 

DROP TABLE #t 

End

 

例如,要查询值’BBQ CHIC SW’,结果如下:

返回三条记录,说明这个值存在于三个表中,分别为_dts_menudef, g_dts_menudef和g_recipe中,字段名分别为name1, name1, name。

非常好用。

使用TCPDF输出完美的中文PDF文档

<转自: 可以任意转载, 转载时请务必以超链接形式标明文章原始出处及此声明 本文地址: http://www.yinzhili.com/2009/08/using-tcpdf-to-generate-pdf-in-chinese.html />

[转者注:我使用joomshoping 3.0.0(for joomla1.6),按本文方法,不嵌入字体成功。但生成三种字体并拷贝到font文件夹,修改应用文件后,不行。顺便说一句,希望高手指点。我不知道我哪里错了?使用TCPDF输出完美的中文PDF文档]

TCPDF是一个用于快速生成PDF文件的PHP5函数包。TCPDF基于FPDF进行扩展和改进。支持 UTF-8,Unicode,HTML和XHTML。在基于PHP开发的Web应用中,使用它来输出PDF文件是绝佳的选择。但毕竟这款开源软件是外国人开发的,对中文的支持总不是那么尽如人意,因此我们需要对它作进一步的增强。
首先要下载TCPDF。访问http://www.tcpdf.org ,单击导航条上的”Download”链接,即可下载到最新版本的TCPDF压缩包。因为里面包含了范例和字体,因此文件大概有10M左右。下载完后解压它,会得到一个名为tcpdf的目录,此目录的结构大概是这样的:

使用TCPDF输出完美的中文PDF文档TCPDF目录结构图

将此目录移动到Apache的网页根目录下(假设您使用的是Apache,并且使用80端口,如有不同请根据实际情况修改),打开浏览器,访问 http://localhost/tcpdf/ 应该就可以看到此目录下的文件和文件夹列表。由于TCPDF已经自带了一些范例,因此为了节省时间,我们可以直接对范例进行修改再使用。打开tcpdf目录下的examples目录,下面有50多个范例文件,其中example_038.php就是用来测试东亚字体的(比如简体/繁体中文、日文等等),打开此文件,找到$pdf->SetFont 这一行,修改为:

$pdf->SetFont(‘stsongstdlight’, ”, 20);

这一行代码的作用是设置PDF正文所用的字体及字号。其中”stsongstdlight”表示”STSongStdLight”字体,这是 Adobe Reader的默认简体中文字体,TCPDF中已经内置这个字体的配置文件,我们只需直接调用即可。接下来,将$pdf->Cell那一段修改为:

$pdf->Cell(0, 10, ‘敏捷的棕毛狐狸跃过那只懒狗。’, ”,1, 1, ‘C’);
$pdf->Cell(0, 10, ‘The quick brown fox jumps over the lazy dog.’, ”,1, 1, ‘C’);
$pdf->Cell(0, 10, ‘1234567890’, ”,1, 1, ‘C’);

保存,然后访问 http://localhost/tcpdf/examples/example_038.php 就可以生成一份PDF文档了:

使用TCPDF输出完美的中文PDF文档

使用默认中文字体生成的PDF文件

这种方式生成的PDF文件的优点是:文件体积小,生成快速。但也有缺点是,没有嵌入中文字体,只限于安装了Adobe Reader之后才能正常显示。那万一用户使用的是FoxIt Reader或者是Linux操作系统呢?显示效果就不一样了。因此,为了保证生成的PDF文件在任何环境下都有同样的显示效果,嵌入字体是必需的。
Windows下有很多中文字体,但是我们要用在TCPDF中的中文字体有下面几个要求:

支持Unicode,因为TCPDF支持的是Unicode;
体积越小越好;
最好是也支持繁体中文;

这样看来,微软雅黑以及方正的一些字体都符合要求。但是他们都是商业字体,而且个头都不小,以微软雅黑为例,msyh.ttf 文件就超过10M,如果使用它,生成的PDF文件体积也会很大。
综合考虑,我觉得”Droid Sans Fallback”字体符合要求:

首先它是免费字体;
其次它也是Unicode编码,支持简体繁体中文以及日文韩文等等;
然后它的体积很小,不超过5M。

然而TCPDF不支持TTF字体文件,因此我们先将它转换成TCPDF支持的格式,然后再使用。在TCPDF目录下有个fonts子目录,这个子目录下又有个utils,这里面带有一个字体转换工具ttf2ufm.exe。下面是转换的步骤:
在网上很容易找到Droid Sans Fallback字体的下载链接,因此在这里就没有必要多做描述了。我们把下载到的 DroidSansFallback.ttf 复制到 TCPDF\fonts\utils 下面,然后打开Windows的命令行,切换到此路径下,输入如下命令:

D:\www\tcpdf\fonts\utils>ttf2ufm -a -F DroidSansFallback.ttf

等待一段时间,等到命令行窗口显示

“Finished – font files created”

之后,可以发现此目录下生成了DroidSansFallback.afm,DroidSansFallback.t1a 和 DroidSansFallback.ufm 这三个文件。
在命令行中输入

“C:\Program Files\WAMP\PHP5\php.exe” -q makefont.php DroidSansFallback.ttf DroidSansFallback.ufm

说明:这里的”C:\Program Files\WAMP\PHP5\php.exe”为php.exe文件所在的路径,请根据实际情况输入。回车运行之后,稍等片刻,命令行窗口中会提示

Font definition file generated

至此大功告成。将生成的droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z这三个文件复制到 TCPDF\fonts 下面即可。
打开example_038.php文件,将

$pdf->SetFont(‘stsongstdlight’, ”, 20);

修改为

$pdf->SetFont(‘droidsansfallback’, ”, 20);

这样就能够调用我们刚才生成的字体,再访问 http://localhost/tcpdf/examples/example_038.php 就可以看到重新生成的PDF文档。

使用TCPDF输出完美的中文PDF文档

嵌入DroidSansFallback字体后的PDF文档

Squid配置

Squid代理服务器简介

Squid是一种在Linux系统下使用的优秀的代理服务器软件。

squid不仅可用在Linux系统上,还可以用在AIX、Digital Unix、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系统上。

Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。

对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid不仅支持HTTP协议,还支持FTP、gopher、SSL和WAIS等协议。

实验环境:

系统 redhat linux 5.4
外网 eth0:192.168.0.1
内网 eth1:192.168.1.254
Squid Cache: Version 3.1.7

RPM安装,这里就不说明了。下载地址:http://www.squid-cache.org/

修改配置文件

[root@a ~]# cat /etc/squid/squid.conf

配置文件说明

定义acl访问控制元素:ip地址、端口

acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

acl worktime time 8:00-23:59 //定义工作时间
acl worktime time 00:00-5:59
http_access allow mynetwork !worktime //只允许非工作时间上网

访问控制设置
http_access allow manager localhost
http_access deny manager

# Deny requests to certain unsafe ports
http_access deny !Safe_ports 禁止非安全端口的访问

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access allow all 最好一条http_access设置默认访问规则

# Squid normally listens to port 3128
http_port 192.168.1.254:3128 transparent 代理服务器监听的地址及端口,transparent 为透明代理模式

# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?

# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid 1000 8 128 配置缓存文件的文件格式,缓存大小,缓存目录数

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

visible_hostname 192.168.1.254
cache_mem 128 MB //squid服务器占用内存大小
forwarded_for off //不传递被代理地址
via off //不传递代理服务器信息

初始化squid代理服务器

squid -z

开启路由功能,并将下面的命令写入/etc/rc.d/rc.local 文件,使其开机自动开启路由功能

echo ‘1’ >/proc/sys/net/ipv4/ip_forward

配置iptables防火墙

自动将http请求转发到代理服务器上

iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-ports 3128

设置源地址映射

iptables -t nat -A POSTROUTING -j SNAT –to-source 192.168.1.254 (外网地址)

iptables -P INPUT ACCEPT

启动squid代理服务

[root@a ~]# service squid restart

查看squid代理服务器缓存日志

[root@a ~]# tail -f /var/log/squid/access.log

个人感觉使用缓存服务器之后网页访问速度有大幅度的加快。