error – expat.h: No such file or directory

1

While trying to get a perl utility working, I had to install a bunch of prerequisite perl modules on my CentOS 5 VPS. One requirement was XML::Parser. However when I tried to install it like so:

[root@localhost]perl -MCPAN -e shell
cpan> install XML::Parser

I received errors with the below being the most relevent bit…

cp Expat.pm ../blib/lib/XML/Parser/Expat.pm
/usr/bin/perl /usr/lib/perl5/5.8.8/ExtUtils/xsubpp -noprototypes -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap -typemap typemap Expat.xs > Expat.xsc && mv Expat.xsc Expat.c
gcc -c -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DVERSION=\”2.36\” -DXS_VERSION=\”2.36\” -fPIC “-I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE” Expat.c
Expat.xs:12:19: error: expat.h: No such file or directory
Expat.xs:60: error: expected specifier-qualifier-list before ‘XML_Parser’

To make a long story short, the following was the quick fix…

yum install expat-devel

windows 下安装 VirtualBox 网络配置[zt]

windows 下安装 VirtualBox 网络配置[zt]

0

最近想研究下linux

基本思路是在现有的windows系统下,装个虚拟机,虚拟机上装 linux。

虚拟机选择了 Sun xVM VirtualBox ,理由是界面友好,操作方便。下载地址 www.sun.com

虚拟机安装很向导化,不多阐述。

比较有意思的是关于 VirtualBox 的网络配置,网上搜索了一下,基本没有简单易懂的相关教程。

于是我花时间自己研究了下,其实实现很简单。

VirtualBox 有4种网络配置方式:
NAT
Bridged Adapter
Internal
Host-only Adapter
如图:

(更多…)

一段脚本代码找出Skydrive的真实外链地址

0

javascript:var%20n=document.title.replace('%20-%20Windows%20Live','');var%20id=((location.hash=='')?window.selfPageData.currentItemHash:location.hash).replace('#resId/','');var%20u='http://storage.live.com/items/'+id+'?filename='+encodeURI(n);var%20p='http://'+document.location.host+'/redir.aspx?page=self&resId='+id;var%20e='<input%20onmouseover=%22this.select();%22%20onclick=%22this.select();%22%20value=%22';var%20f='%22%20style=%22width:580px%22%20type=%22text%22%20/><br>';var%20d='by%20(<a%20href=%22http://rpsh.net/%22>Rpsh</a>)';var%20c='\u5916\u94FE\u5730\u5740:'+d+e+u+f+'\u5206\u4EAB\u5730\u5740:'+e+p+f;var%20a=document.getElementById('content');var%20g=(a.getElementsByTagName('p')[0]);var%20b=g?g:document.createElement('P');b.innerHTML=c;a.insertBefore(b,a.firstChild);void(0)

解决K宝U盾等网上银行不能在windows 7 下登录问题

0

在远景里找到的一位网友贴的解决办法,可以解决目前部份银行使用K宝U盾无法登陆网银的问题。方法很实用,不用修改程序文件或浏览器的安全级别,只需手动在注册表里指定网银CSP的一个文件路径。我只试了农行的华大K宝,其它的如(建行、工行、交行、广发、光大、兴业等)按跟贴的朋友尝试也是可行的。方法差不多相同。下面是原贴内容。

目前许多windows 7 IE8用户无法使用USBkey登入网银。该方法支持农行,建行,工行,光大,交行,广发,各股份制商业银行,各城市商业银行,各农村商业银行等多家银行网银,权当抛砖引玉,欢迎各位网友积极测试,以便供后人参考!

[快速导读]:修改注册表

32位WIN 7下找到:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\###]
修改 “Image Path”=”%SystemRoot%\System32\***.dll”

64位WIN 7下找到:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Defaults\Provider\###]
修改 “Image Path”=”%SystemRoot%\SysWOW64\***.dll”

注:不同的网银,###,***会不同,请根据自己需要修改。
(更多…)

google analytics 的cookie值 utmz 的生命周期分析

google analytics 的cookie值 utmz 的生命周期分析

0

google analytics 使用 utma utmb utmc utmz 来做分析,其中 utmz记录了访问的来源 对于市场分析来说非常重要,

有的时候 会出现这个问题 从a网站来的顾客 来到网站 没有买任何东西就走了  后来通过b网站来下单 最后从下单的情况来看 到底是a网站 来的流量还是b (其实对于referral网站 类型 都是以第一次的为准)

有的时候还会碰到这个问题 从百度搜索一个关键词 ,没有没任何东西,又从google搜索一个关键词,买了东西 最后算那个词的转换(其实对于搜索引擎来说是最后一次)

还会碰到更复杂的问题

来一个顾客 从百度搜索一个词 来了网站 没买东西, 然后去别的网站逛 看到别的网站上挂的广告,于是点击这个banner广告来购买了 最后问是在google analytics里 是算那个流量来源的转换  (其实是算搜索的转换)

以上都是经过我多次测试的结果

附上试验表格

结论就是

在金字塔上面的来源的cookie值 ,越能覆盖下来的

文字描述就是 直接来源和推荐来源是算老的, 搜索的是看新的

cpan 更新 中国镜像 加速安装模块[zt]

0

使用cpan,大概进去后,help一下就会用。

但是今天想安装Chart::OFC的时候还是碰到问题。

不知道为什么我的一台老的rhel3的系统里的urllist竟然是ftp://cpan.cse.msu.edu/,半天一个i Chart::OFC的命令也没有反应,速度太慢了,后来查了一下那个大学是密歇根州立大学,好偏远,于是必须更新一下urllist,但是我又忘了怎么更新了。

好在网上找到个帖子(http://mail.pm.org/pipermail/china-pm/2007-August/001002.html)告诉了我,转到如下:

你无需手工修改 /etc/perl/CPAN/Config.pm 来改变 CPAN 镜像地址的,以ROOT身
份运行:

# perl -MCPAN -e shell
cpan> o conf urllist unshift  http://www.perl.com/CPAN/
cpan> o conf commit

在search.cpan.org也看到有两个中国的镜像,考虑到稳定性,还是使用perl.com的

还有一点是在用cpan的时候,因为模块安装时默认的make  test不成功,make install就不会去做,但是因为某些情况并不需要这样,这时候,可以force install DBD::mysql

============================================================
配置http_proxy的方法:
o conf http_proxy http://proxy:8080
============================================================
有时候,可能几个不重要的make test中的测试项导致make test失败,这时候就用强制安装:
force install Test::WWW::Mechanize::Catalyst

Firefox忽略兼容性检查

0

在地址栏输入 about:config
新建一个布尔项,名称是 extensions.checkCompatibility,值为 false,就不会进行扩展兼容性检查了。

Nginx配置

0

Ⅰ、Nginx配置文件的修改

修改nginx的默认配置文件:

CODE:
vi /etc/nginx/nginx.conf

按下面的内容修改Nginx的配置文件。兰色表示需要手动修改的内容红色表示增加的内容

#user  nobody;

# 指定子进程数,酌情修改
worker_processes  4;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

# 最多可打开文件数
worker_rlimit_nofile 8196;

events {
# 最大并发数
worker_connections  1024;
}

http {
include       mime.types;
default_type  application/octet-stream;

# 关掉错误日志
error_log       /dev/null  crit;
# 如果需要错误日志,就用下面这行替换上面这行
#error_log     /var/log/nginx/error.log  notice;

# 定义日志格式,对日志使用缓存,避免频繁的磁盘I/O操作
access_log   /var/log/nginx/access.log combined buffer=1m;

sendfile        on;
tcp_nopush      on;
tcp_nodelay     on;

keepalive_timeout  10;

# 对静态文件和可压缩文件启用压缩,以节约网络带宽,提高访问速度
gzip              on;
gzip_min_length   1k;
gzip_buffers      4 8k;
gzip_http_version 1.1;
gzip_comp_level   3;
gzip_types        text/html text/css text/xml text/plain application/x-javascript application/xml application/pdf application/x-perl application/x-tcl application/msword application/rtf application/vnd.ms-excel application/vnd.ms-powerpoint application/vnd.wap.xhtml+xml image/x-ms-bmp;
gzip_disable      ”MSIE [1-6] .”;
gzip_vary         on;

# 定义输出缓存大小
output_buffers   4 32k;

# 最大允许可上传文件大小
client_max_body_size 20m;

# 定义一个叫“myzone”的记录区,总容量为 10M
# 和下面的limit_conn一起限制单个IP的并发连接数为10
limit_zone myzone $binary_remote_addr  10m;

server {
listen       80;
server_name  localhost;

location / {
root   /var/nginx/html;
index  index.php index.html index.htm;
limit_conn  myzone 10;
}

error_page   500 502 503 504  /50x.html;

location = /50x.html {
root   /var/nginx/html;
}

location ~ .php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /var/nginx/html$fastcgi_script_name;
include        fastcgi_params;
}

# 在浏览器本地暂存图片和静态文件,不记录日志,以节约机器资源
location ~* .(gif|png|jpg|jpeg|bmp|css|js|swf)$
{
root           /var/nginx/html;
access_log off;
expires max;
}

# 在浏览器中输入http://xxx.xxx.xxx/status可以看到Nginx的运行信息
# 需要密码验证,不记录日志,限制IP访问
location ~ /status
{
auth_basic  ”O.N.M.P.”;
auth_basic_user_file password;
stub_status on;
access_log   off;
allow 192.168.0.0/24;
deny all;
}

}

}

其他的部分请酌情修改。

运行下面的命令生成查看Nginx运行状态的密码文件:

CODE:

htpasswd -c /etc/nginx/password webadmin

按提示输入两遍密码即可。

在查看status的时候,输入用户名webadmin(见上面这行)和密码就能够看到Nginx的运行数据了。

Nginx能够流行和它的高负载能力是分不开的,在追求性能表现的场合,推荐使用Nginx+PHP-fastcgi的组合以获得强健的性能表现。而对于那些重视安全性的场合来说,可能OpenBSD内核集成的Apache更合适。OpenBSD下搭建Apache、MySQL、PHP环境的详细内容请参见偶的另篇博文,地址在下面:(博客速度可能较慢,四楼有转帖)
http://blog.chinaunix.net/u2/81136/showart_1860332.html

当然,你也可以利用Nginx内置的负载均衡功能,在前端分配访问流量,后端由Apache来运行PHP环境。Nginx负载均衡的配置可以去Nginx的主页参看相关内容,地址:http://wiki.nginx.org/Main

下面为一个Nginx负载均衡的示例:

http {
upstream myproject {
ip_hash;
server 192.168.1.1:80;
server 192.168.1.2:80;
server 192.168.1.3:80;
server 192.168.1.4:80;
}

server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://myproject;
}
}
}

网络拓扑示意图如下:

Ⅱ、Nginx日志截断

OpenBSD默认每天00:00会执行/etc/daily.local脚本中的内容,我们只需要把Nginx日志截断的命令加入到这个文件中即可。

CODE:
vi /etc/daily.local

加入下面的内容:

#!/bin/sh
# 对Nginx日志进行截断和压缩,以节约log分区空间
# 在张宴的基础上修改,感谢!
mkdir -p /var/log/nginx/$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/
mv /var/log/nginx/access.log /var/log/nginx/$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/access.$(date -d “yesterday” +”%Y%m%d”).log
kill -USR1 `cat /var/run/nginx.pid`
sleep 1
gzip /var/log/nginx/$(date -d “yesterday” +”%Y”)/$(date -d “yesterday” +”%m”)/access.$(date -d “yesterday” +”%Y%m%d”).log

保存退出,为/etc/daily.local加上执行权限:

CODE:
chmod 0755 /etc/daily.local

其他需要每天运行的命令也都可以加在这个脚本里面,各位自行处理。

PHP:两个数组合并,相同键名的值相加

0

$array1 = array('a'=>1,'b'=>2);
$array2 = array('b'=>1,'c'=>5,'d'=>4);
foreach ((array)array_intersect(array_keys($array1),array_keys($array2)) as $key){
$mixed[$key] = $array1[$key]+$array2[$key];
unset($array1[$key],$array2[$key]);
}
$mixed = array_merge($array1,$array2,(array)$mixed);

PHP中二维数组的排序方法

0

本文介绍的是从 BugFree 摘录来的二维数组排序函数,可以实现类似 MySQL 的 ORDER BY 效果,当数组不是从数据库取得时会有特殊应用。

PHP:

// 说明:PHP中二维数组的排序方法
// 整理:http://www.CodeBit.cn
/**
* @package BugFree
* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
*
*
* Sort an two-dimension array by some level two items use array_multisort() function.
*
* sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
* @author Chunsheng Wang
* @param array $ArrayData the array to sort.
* @param string $KeyName1 the first item to sort by.
* @param string $SortOrder1 the order to sort by("SORT_ASC"|"SORT_DESC")
* @param string $SortType1 the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
* @return array sorted array.
*/
function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
if(!is_array($ArrayData))
{
return $ArrayData;
}
// Get args number.
$ArgCount = func_num_args();
// Get keys to sort by and put them to SortRule array.
for($I = 1;$I < $ArgCount;$I ++)
{
$Arg = func_get_arg($I);
if(!eregi("SORT",$Arg))
{
$KeyNameList[] = $Arg;
$SortRule[] = '$'.$Arg;
}
else
{
$SortRule[] = $Arg;
}
}
// Get the values according to the keys and put them to array.
foreach($ArrayData AS $Key => $Info)
{
foreach($KeyNameList AS $KeyName)
{
${$KeyName}[$Key] = $Info[$KeyName];
}
}
// Create the eval string and eval it.
$EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
eval ($EvalString);
return $ArrayData;
}
//################# 示例 #################
$arr = array(
array(
'name' => '学习',
'size' => '1235',
'type' => 'jpe',
'time' => '1921-11-13',
'class' => 'dd',
),
array(
'name' => '中国功夫',
'size' => '153',
'type' => 'jpe',
'time' => '2005-11-13',
'class' => 'jj',
),
array(
'name' => '编程',
'size' => '35',
'type' => 'gif',
'time' => '1997-11-13',
'class' => 'dd',
),
array(
'name' => '中国功夫',
'size' => '65',
'type' => 'jpe',
'time' => '1925-02-13',
'class' => 'yy',
),
array(
'name' => '中国功夫',
'size' => '5',
'type' => 'icon',
'time' => '1967-12-13',
'class' => 'rr',
),
);
print_r($arr);
//注意:按照数字方式排序时 153 比 65 小
$temp = sysSortArray($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING");
print_r($temp);
?>

Go to Top