Entries in the ‘Linux/c/c++’ Category:

Zend Optimizer不起作用,又是SELinux搞得鬼

今天一台linux服务器上遭遇Zend加密的php文件无法加密,可是我记得已经安装过Zend Optimizer的啊,phpinfo();查看了一下。发现没有Zend Optimizer;
打开php.ini,看到最后明明有zend扩展配置啊:

[Zend]
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so
zend_optimizer.version=3.3.0a
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.0
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.0

找了好久,终于在运行完php -v的命令后找到了原因,提示:

[root@locoy 5_2_x_comp]# /usr/local/webserver/php/bin/php -v
Failed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so: /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so: cannot restore segment prot after reloc: Permission denied
PHP 5.2.10 (cli) (built: Dec 6 2009 01:35:07)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies

上网一搜,原来又是SELinux搞得鬼~~把selinux关了就可以,或者运行
chcon -t texrel_shlib_t /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so

Tags: , ,

Comments (4)

MIME Types惹的祸(IE和Firefox处理MIME Types的区别)

问题描述:
将一个站搬到新架设的服务器环境中. nginx + php + mysql + CentOS ,遇到一个奇怪的问题,IE下浏览正常,但是在火狐下完全乱的。用firebug查看css,提示 “该URL 的资源不是文本 css” …应该是无法读取css文件。开始以为是浏览器兼容问题,或者是css文件里面有语法错误…但是在本地测试环境里都是正常的啊?

问题分析:
通过抓包分析获取css的数据包(请求包 Request Headers 和响应包的Response Headers),发现服务器响应包(Response Headers)的Content-Type属性为application/octet-stream;在火狐下直接输入css文件访问路径,发现弹出下载窗口…我记得在火狐下应该能直接查看css文件内容才对的啊~~~通过比较其他正常网站的css文件请求数据包,发现他们的Content-Type的属性是text/css~~~
于是怀疑是Content-Type的问题,查看nginx的配置文件nginx.conf

worker_processes 2;
error_log /var/log/nginx/error_log info;
events {
worker_connections 1024;
use epoll;
}
http {
#include mime.types;
default_type application/octet-stream;

log_format main
‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” ‘
‘”$gzip_ratio”‘;
client_header_timeout 10m;
client_body_timeout 10m;
send_timeout 10m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 4 2k;
request_pool_size

Tags: , ,

Comments (1)

关于ldconfig及其使用

今天试用了一下张宴大师的HTTPSQS【HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储。】
安装过程一切顺利,但使用中遇到一个错误:
[root@localhost httpsqs]#httpsqs -h
httpsqs: error while loading shared libraries: libtokyocabinet.so.9: cannot open shared object file: No such file or directory
提示找不到一个链接库(libtokyocabinet.so.9),find发现此文件位于/usr/local/lib目录,而系统搜索的是/usr/lib目录,可以简单的做一个软链接(ln -s)来解决问题,还有更好的解决方法是
将/usr/local/lib添加到/etc/ld.so.conf文件中,然后在命令行执行/sbin/ldconfig

man ldconfig查看ldconfig命令的描述,
ldconfig creates the necessary links and cache to the most recent shared
libraries found in the directories specified on the command line, in the
file /etc/ld.so.conf, and in the trusted directories (/lib and /usr/lib).
The cache is used by the run-time linker, ld.so or ld-linux.so. ldconfig
checks the header and filenames of the libraries it encounters when deter-
mining which versions should have their links updated.
你会发现他默认是在/lib and /usr/lib这两个目录下找的,而我们的libtokyocabinet.so.9是安装在/usr/local/lib下的。

罗嗦一句:Linux下的man是个好东西,熟悉了会比google解决问题的效率高~~~

Tags: ,

Leave a Comment

phpize是什么?

今天在配置一台nginx的web服务器时,参考张宴(blog.s135.com)大师的《Nginx 0.8.x + PHP 5.2.10(FastCGI)搭建胜过Apache十倍的Web服务器(第5版)》
安装php(fastcgi模式)的时候,常常有这样一句命令:/usr/local/webserver/php/bin/phpize

一、phpize是干嘛的?

phpize是什么东西呢?php官方的说明:
http://php.net/manual/en/install.pecl.phpize.php

phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块

比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpize,通过以下几步工作。

二、如何使用phpize?

当php编译完成后,php的bin目录下会有phpize这个脚本文件。在编译你要添加的扩展模块之前,执行以下phpize就可以了;

比如现在想在php中加入memcache扩展模块:我们要做的只是如下几步
————————————————————————
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/usr/local/webserver/php/bin/phpize
./configure –with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
————————————————————————
注意./configure 后面可以指定的是php-config文件的路径

这样编译就完成了,还需要做的是在php.ini文件中加入extension值
extension = “memcache.so”

Tags: , , ,

Comments (1)

Segmentation fault in sprintf

最近在写C程序的时候常常遇到“Segmentation fault ”错误,号称“c 指针出现最多的错误”。而这次的错误可以肯定出现在使用sprintf函数时出现了问题。

编译成功通过,但运行时报“Segmentation fault ”错误。

查了一下sprintf函数原型说明:

sprintf() 格式化输出函数(图形)

功能: 函数sprintf()用来作格式化的输出。
用法:此函数调用方式为int sprintf(char *string,char *format,arg_list);
说明:函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不定个数。通常在绘图方式下输出数字时可调用sprintf()函数将所要输出的格式送到第一个参数,然后显示输出。

函数名: sprintf
功  能: 送格式化输出到字符串中
用  法: int sprintf(char *string, char *farmat [,argument,...]);

sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕
sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现     ”该程序产生非法操作,即将被关闭….”的提示。
因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。

原来我定义query这个变量的时候用了char *query;而没有使用数组分配大小;

Tags: , ,

Leave a Comment

VMware手工启动停止批处理 加速开机启动

很多朋友都有这样的问题,安装VMware后发现开机速度变得好慢,其实是因为VMware开机自动启动了4个服务,大大拖慢了开机速度。而我们往往不用每次开机都启动VMware,所以最好的办法就是讲VMware的服务设成手动启动,但设成手动启动后要开启VMware一个一个的开又很麻烦,写个VMware手工启动停止的批处理是个好主意,简单易用~~~

第一步:控制面板 ->管理工具 -> 服务
找到所有关于VMware的服务,将其启动类型设为 手动
第二步:下面是我写的简单的VMware手工启动停止批处理脚本,复制粘贴到记事本里,然后改后缀名为bat

1ba06818c51712ce641b777771a4d047000

如果需要对网卡同时启用或禁用,就需要devcon 工具来控制网络连接的停用/启用,需要到微软网站下载该工具。
然后在 start 里面加入
devcon.exe enable *vmnetadapter1
devcon.exe enable *vmnetadapter8

在 stop 里面加入:
devcon.exe disable *vmnetadapter1
devcon.exe disable *vmnetadapter8

Tags: ,

Leave a Comment

Libpcap开发集介绍

libpcap是一个C语言库,libpcap的英文意思是 Packet Capture library,即数据包捕获函数库,其功能是通过网卡抓取网络以太网中的数据包。这个库为不同的平台提供了一致的c函数编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由地跨平台使用。它支持多种操作系统。libpcap 结构简单,使用方便;它提供了20多个api封装函数,我们利用这些api函数即可完成本网络探测器所需的网络数据包监听功能。
Libpcap开发库的应用

*
网络统计软件
*
入侵检测系统
*
网络调试
*
数据包过滤,支持过滤机制BPF

Libpcap开发库使用说明

基于pcap的嗅探器程序的总体架构,其流程如下:

1.
首先要决定用哪一个接口进行嗅探开始。在Linux中,这可能是eth0,而在BSD系统中则可能是xl1等等。我们也可以用一个字符串来定义这个设备,或者采用pcap提供的接口名来工作。
2.
初始化pcap。在这里需要告诉pcap对什么设备进行嗅探。假如愿意的话,我们还可以嗅探多个设备。怎样区分它们呢?使用 文件句柄。就像打开一个文件进行读写一样,必须命名我们的嗅探“会话”,以此使它们各自区别开来。
3.
如果只想嗅探特定的传输(如TCP/IP包,发往端口23的包等等),我们必须创建一个规则集合,编译并且使用它。这个过程分为三个相互紧密关联的阶段。规则集合被置于一个字符串内,并且被转换成能被pcap读的格式(因此编译它)。编译实际上就是在我们的程序里调用一个不被外部程序使用的函数。接下来我们要告诉 pcap使用它来过滤出我们想要的那一个会话。(此步骤可选)
4.

Tags: ,

Leave a Comment

libpcap 编程入门资源

最近在学习libpcap编程,找到几个非常好的libpcap编程入门资源。
第一个当然是官网www.tcpdump.org/ 的document:
《Programming with pcap
《Programming with Libpcap – Sniffing the network from our own application》 (pdf,非常漂亮,文章写得又好)
还有一篇《Aprendiendo a programar con libpcap》可惜是西班牙语,看不懂,不过从里面的图来看貌似是个好文档。

第二个是个非常好的libpcap编程入门教程。通俗易懂:
《The Sniffer’s Guide to Raw Traffic》
这篇教材里的例子国内非常多的人转载,而且有中文的分析,一个比较好的地址是:http://blog.csdn.net/bat603/archive/2006/09/04/1176251.aspx

当然啦,最好的学习资源还是tcpdump的源代码啦,看完上面那几篇文章后,估计读tcpdump也就比较轻松了~~

Tags: , ,

Leave a Comment

VMware迁移后网卡问题解决方案

如果重新安装VMware或者将vmware移到另一台电脑上后,启动Linux系统会发现找不到网卡,

ifconfig eth0 up

会提示
unknown interface: No such device

或者出现一个eth2或者eth3其他网卡标号

这是因为udev在发现网卡mac变更之后,自动将接口改名的结果。

解决方法:将这个/etc/udev/rules.d/70-persistent-net.rules删除,
重启后网卡eth0成功启动,并重新生成/etc/udev/rules.d/70-persistent-net.rules文件

Tags: , ,

Leave a Comment

[原]编译IMQ内核具体步骤

日期:2009-2-18
编译人:cgeek
编译环境:fedora 7 & centos 5.0

1、下载所需软件包:
linux-2.6.25.tar.gz
iptables-1.4.1.tar.bz2
ipset-2.4.9.tar.bz2
netfilter-layer7-v2.21.tar.gz

iptables-1.4.1-imq.diff
linux-2.6.25-imq5.diff

2、拷贝这些文件到 /usr/src/ 目录下,并解压
tar 文件用
$tar -xvf xxx.tar解压
tar.gz文件用
$tar -zxvf xxx.tar.gz解压
如果有tar.bz2文件,用
$bunzip2 xxx.tar.bz2
把文件xxx.tar.bz2变成xxx.tar再用上面的命令解压

3、创建一个软连接
当前目录 /usr/src/
$ln -s linux-2.6.25 linux

4、设置环境变量
当前目录 /usr/src/
$export KERNEL_DIR=/usr/src/linux
$export IPTABLES_DIR=/usr/src/iptables-1.4.1

5、当前目录 /usr/src/
$cd linux
配置内核:
$make menuconfig
保存退出
可以取消一些选项,此处略。

6、进入目录/usr/src/ipset-2.4.9
依次输入:
$make KERNEL_DIR=/usr/src/linux binaries
$make KERNEL_DIR=/usr/src/linux binaries_install
$make KERNEL_DIR=/usr/src/linux patch_kernel
7、打layer7补丁
当前目录/usr/src/linux
输入:
$patch -p1 < ../netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch
$make menuconfig

进入网络选项把layer7support选上(M),自己查一下:
Core Netfilter Configuration --->
IP: Netfilter Configuration —>

8.打IMQ补丁:
$patch -p1 < ../linux-2.6.25-imq5.diff
$make menuconfig

驱动模块
IMQ (intermediate queueing device) support (IMQ)
Location:
-> Device Drivers
-> Networking support
-> Network device support (NETDEVICES)
-> IMQ (intermediate queueing device) support (IMQ)

选择编译为模块后,有两个参数可以设置:

Tags: , , ,

Leave a Comment