SuidPerl的替换

[不指定 2006/04/12 23:34 | by ipaddr ]
默认情况下,用PERL写的CGI,是不可以调用某些系统管理命令的,比如iptables,近日开发一网关,要求Perl调用iptables实现网络配置,本来打算用SuidPerl实现Perl调用iptables的,但发现那网关系统上没有SuidPerl,而且不带编译器,无法编辑同版本的Suidperl。

最后想一办法,用C写程序,把C程序设成suid程序,把ipables命令做为这个C程序的参数调用,成功的解决了这一问题。

C程序大概如下:

#include <string.h>

...(ipaddr,admin.net(at)163.com)

int main(int argv,char * argc[])

{

.....

return (system(argc[1]));

}

gcc syscommand.c
chmod a+x syscommand
chmod a+s syscommand
chown root.root syscommand
mv syscommand /sbin/

Perl里面这样调用iptables:

system("/sbin/syscommand 'iptables -L'");

以上思路经测试成功,一直漂原创,转载请注明。

常用CSS缩写语法总结

[不指定 2006/03/15 23:36 | by ipaddr ]
使用缩写可以帮助减少你CSS文件的大小,更加容易阅读。css缩写的主要规则如下:

颜色16进制的色彩值,如果每两位的值相同,可以缩写一半,例如:
#000000可以缩写为#000;#336699可以缩写为#369;

盒尺寸通常有下面四种书写方法:

property:value1; 表示所有边都是一个值value1;
property:value1 value2; 表示top和bottom的值是value1,right和left的值是value2
property:value1 value2 value3; 表示top的值是value1,right和left的值是value2,bottom的值是value3
property:value1 value2 value3 value4; 四个值依次表示top,right,bottom,left
方便的记忆方法是顺时针,上右下左。具体应用在margin和padding的例子如下:
margin:1em 0 2em 0.5em;

边框(border)边框的属性如下:

border-width:1px;
border-style:solid;
border-color:#000;
可以缩写为一句:border:1px solid #000;

语法是border:width style color;

背景(Backgrounds)背景的属性如下:

background-color:#f00;
background-image:url(background.gif);
background-repeat:no-repeat;
background-attachment:fixed;
background-position:0 0;
可以缩写为一句:background:#f00 url(background.gif) no-repeat fixed 0 0;

语法是background:color image repeat attachment position;

你可以省略其中一个或多个属性值,如果省略,该属性值将用浏览器默认值,默认值为:

color: transparent
image: none
repeat: repeat
attachment: scroll
position: 0% 0%
字体(fonts)字体的属性如下:

font-style:italic;
font-variant:small-caps;
font-weight:bold;
font-size:1em;
line-height:140%;
font-family:"Lucida Grande",sans-serif;
可以缩写为一句:font:italic small-caps bold 1em/140% "Lucida Grande",sans-serif;

注意,如果你缩写字体定义,至少要定义font-size和font-family两个值。

列表(lists)取消默认的圆点和序号可以这样写list-style:none;,

list的属性如下:

list-style-type:square;
list-style-position:inside;
list-style-image:url(image.gif);
可以缩写为一句:list-style:square inside url(image.gif);

CSS速成手册

[不指定 2006/03/15 23:35 | by ipaddr ]
参考:CSS速成手册

开发环境是win2000+sql server+php4
数据表中时间字段名是ldt ,字段类型是datetime
我写的代码如下:
$query = "select * from table";

$result = mssql_query($query) or die("无法执行SQL:$query");

while ($myrow=mssql_fetch_array($result))
{

echo $myrow["ldt"];

}

默认情况下,PHP将输出2006 二月 6 10:46,这显然不是我们想要的输出格式。

需要修改PHP的配置,将php.ini中mssql.datetimeconvert = Off就可以了。

注:Windows下PHP连接MSSqlServer,需要把开php.ini里的extension=php_mssql.dll,并且,需要拷ntwdblib.dll到 \winnt\system32目录

package javax.servlet does not exist

[不指定 2005/11/30 22:23 | by ipaddr ]
编译servlet程序时,提示如下错误:

package javax.servlet does not exist

这是因为java找不到servlet包,需要将这个包放进CLASSPATH中.

以tomcat环境为例,在系统环境变量里,新加TOMCAT_HOME
TOMCAT_HOME=C:\Program Files\Apache Software Foundation\Tomcat\

在CLASSPATH中加入:

;%TOMCAT_HOME%\common\lib\servlet-api.jar

再重新编译即可.

Eclipse基础--安装eclipse及语言包

--转载--一直漂整理

这里主要介绍eclipse及其语言包的下载与安装

一.下载eclipse和其语言包

Eclipse下载地址:
http://www.eclipse.org/downloads/index.php
下载文件:eclipse-SDK-3.1.1-win32.zip

语言包下载地址:
http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/

http://eclipse.cis.sinica.edu.tw/downloads/

http://eclipse.openwebeng.com/downloads/
下载对应版本的语言包文件,比如:NLpack1-eclipse-SDK-3.1.1a-win32.zip


二.安装eclipse和其语言包

环境要求:Java(TM) 2 SDK,建议使用使用比较新的版本.

安装过程:
解压Eclipse3.1.1到一个目录(这里我解压到D:\program files\eclipse),然后把语言包NLpack-eclipse-SDK-3.1.1a-win32.zip也解压到D:\program files\eclipse目录。然后双击此目录中的eclipse.exe文件即可打开eclipe并实现了汉化.

注意:
1.最好使用一个从未被启动过的Eclipse,这样可以完全中文化。
如果在安装中文包时Eclipse已经被使用过,则可能会出现有部分内容不能被汉化,比如“搜索”、“运行”等菜单。如果中文化的不完全,把eclipse 目录下的configuration目录删除,重启即可。
2.
对于使用过的eclipse.可以加上这个参数后启动 eclipse -nl "zh_CN"
这样就是中文的了。然后zh_US是英文的。以后可以自由切换.

对于e文不好的人或者初学者来说,中文版本的eclipse可以显著提高学习效率,便于接受和使用eclipse。但是,毕竟当前先进的技术是英文一统天下,所以,在对eclipse有了初步的认识之后,还是建议大家多使用英文版的eclipse,这样,对以后的进一步学习和使用有好处。

假设有10个网站,分布在各地,它们的库存要同步,而数据库不支持远程连接。

我们要实时地取得服务器的库存数,可以通过很多种方法,我所知道的有以下几种:

·CURL方式
·SOCKET方式
·PHP5中的SOAP方式

以下分别给出示例来实现它:

[b]CURL方式[/b]

client.php

<?php
$psecode = ’NDE005’;
$website = ’www.abc.com’;
$amt = 1;
$pwd = 123456;
$ch = curl_init();
$curl_url = "http://ics1.server.com/index.php?web=" . $website .
"&pwd=" . $pwd . "&action=check&pseid=" . $psecode .
"&amt=" . $amt;
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不直接输出,返回到变量
$curl_result = curl_exec($ch);
$result = explode(’,’, $curl_result);
curl_close($ch);
print_r($result);
?>

  服务器端只需按一定的格式输出,然后客户端按此格式接收就可以了如:

echo "OK," . $fpsecode . "," . $fbalance ;//以逗号分隔

  SOCKET方式

  这个要借助第三方类库HttpClient,可以到这里下载:http://scripts.incutio.com/httpclient/

<?php
require_once ’class/HttpClient.php’;
$params = array(’web’ => ’www.abc.com’,
’pwd’ => ’123456’,
’action’ => ’check’,
’pseid’ => ’NDE005’,
’amt’ => 1);
$pageContents = HttpClient::quickPost(’http://ics.server.com/index.php’, $params);
$result = explode(’,’, $pageContents);
print_r($result);
?>

  PHP5中的SOAP方式

  server.php

<?php
function getQuote($fpsecode) {
global $dbh;
$result = array();
try {
$query = "SELECT fprice, fcansale, fbalance, fbaltip FROM tblbalance where upper(trim(fpsecode)) = :psecode limit 1";
$stmt = $dbh->prepare($query);
$stmt->execute(array(’:psecode’ => strtoupper(trim($fpsecode))));
$stmt->bindColumn(’fprice’, $fprice);
$stmt->bindColumn(’fcansale’, $fcansale);
$stmt->bindColumn(’fbalance’, $fbalance);
$stmt->bindColumn(’fbaltip’, $fbaltip);
while($row = $stmt->fetch(PDO_FETCH_BOUND)) {
//
}
} catch (PDOException $e) {
echo $e->getMessage();
}
return $fprice; //你可以返回一个数组
}

$dsn = ’pgsql:host=192.168.*.* port=5432 dbname=db user=123456 password=123456’;
try {
$dbh = new PDO($dsn);
} catch (PDOException $e) {
die(’Connection failed: ’ . $e->getMessage());
}
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
$server = new SoapServer("stockquote.wsdl"); //配置文件
$server->addFunction("getQuote");
$server->handle();
?>

  stockquote.wsdl

<?xml version =’1.0’ encoding =’UTF-8’ ?>
<definitions name=’StockQuote’
targetNamespace=’http://example.org/StockQuote’
xmlns:tns=’ http://example.org/StockQuote ’
xmlns:soap=’http://schemas.xmlsoap.org/wsdl/soap/’
xmlns:xsd=’http://www.w3.org/2001/XMLSchema’
xmlns:soapenc=’http://schemas.xmlsoap.org/soap/encoding/’
xmlns:wsdl=’http://schemas.xmlsoap.org/wsdl/’
xmlns=’http://schemas.xmlsoap.org/wsdl/’>

<message name=’getQuoteRequest’>
<part name=’symbol’ type=’xsd:string’/>
</message>
<message name=’getQuoteResponse’>
<part name=’Result’ type=’xsd:float’/>
</message>

<portType name=’StockQuotePortType’>
<operation name=’getQuote’>
<input message=’tns:getQuoteRequest’/>
<output message=’tns:getQuoteResponse’/>
</operation>
</portType>

<binding name=’StockQuoteBinding’ type=’tns:StockQuotePortType’>
<soap:binding style=’rpc’
transport=’http://schemas.xmlsoap.org/soap/http’/>
<operation name=’getQuote’>
<soap:operation soapAction=’urn:xmethods-delayed-quotes#getQuote’/>
<input>
<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’
encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/>
</input>
<output>
<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’
encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/>
</output>
</operation>
</binding>

<service name=’StockQuoteService’>
<port name=’StockQuotePort’ binding=’StockQuoteBinding’>
<soap:address location=’http://192.168.3.9/php5/server.php’/>
</port>
</service>
</definitions>

client.php

<?php
$client = new SoapClient("stockquote.wsdl");
$result = $client->getQuote("nde005");
print_r($result);
?>

PHP-JSP性能不完全测试

[不指定 2005/11/05 22:50 | by ipaddr ]
前几天在CU看到有人比较PHP与JSP,.net,结果表明PHP比JSP,.net性能低下很多。本人认为即使有差距,也不应该有这么大,所以认真测试一下几者间的性能差距。由于很久没用.net了,所以,暂时没有测试.net。

本测试数据真实,但只做为参考。欢迎大家讨论。
除做比较外,也可供PHP,JSP程序员参考,以便优化自己的程序。

本测试由一直漂(ipaddr,bcomcn)原创,欢迎转载,并注明出处。问题反馈:admin.net(at)163.com

由于这博客帖表格页面容易乱,所以,测试报告放另一服务器上,详情请点击:

http://www.makepic.com/phpjsp.htm
http://www.eit.name/other/phpjsp.htm

Tomcat中数据库连接池的配置

[不指定 2005/11/01 22:21 | by ipaddr ]
Tomcat中数据库连接池的配置
Tomcat的配置真麻烦,手工操作的话,不但容易出错,而且,输入的内容还挺多,此外,有的配置选项和格式,我个人认为太冗余了。
在Tomcat下配置数据源连接池,按书本上的操作不成功,在网上找资料找了很多,还是不成功,一般是提示URL为null,或Class为null。

Tomcat的官方文档上的方法也行不通,估计是最新版(5.0.28)的Tomcat连接池配置有些变化。
最后,经过摸索,终于配置成功,共享一下。
(ipaddr,bcomcn笔记,转载请注明)
使用Tomcat自动的管理工具(提示:根据多次配置经验,建议大家以后配置Tomcat最好是用自带的管理工具/admin)
a.登录管理界面:http://localhost/admin (或其它形式的地址http://ip:8080/admin)
b.左边的菜单栏时有Tomcat Server,Resources,User Definition.(//注意,不是在Resource里配置数据源,这里配置的是全局的数据源)
c.进入Tomcat Server->Service(Catalina)->Host(一般是loalhost)->Context(/ipaddr),找到具体要配置数据源的context[点左边的树形节

点打开子树,不是直接点节点名称]。
d.打开Context(/ipaddr)[这里是你需要配置数据源的Context,比如Contet(/test)][点左边的树形节点打开子树,不是直接点节点名称]
e.再打开Resources->Data Sources,这里就是针对某个具体Context的DataSource了,点击这里的DataSources,在右边的下拉菜单中选择

Create New Data Source.
f.输入相应的JNDI的名字(一般是jdbc/dbname),URL,驱动(mysql是com.mysql.jdbc.Driver),UserName,UserPassword,以及连接数,点下面的保

存(Save),再点上面的(Comit Changes)。退出管理,你就可以使用数据源了。(一般不需要重启tomcat)
g.测试
Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/ipaddr");
Connection con=ds.getConnection();
Statement stmt=con.createStatement();
....
经研究发现:Tomcat自带的管理工具配置连接池,只在是TOMCAT_HOME/conf/Catalina/hostname/contextn.xml里做了些修改。这里的配置文件的功能说明,参考我写的另外一篇笔记,“Tomcat的配置文件”
欢迎大家讨论和反映问题.


Tomcat配置文件补充

[不指定 2005/11/01 22:20 | by ipaddr ]
Tomcat的配置文件,[Ipaddr,bcomcn学习笔记,转载请注明]在绝大多数资料上,都只提到了conf/server.xml以及context下面的WEB-INF/web.xml,但我发现,有时,在server.xml上面没有配置的内容,tomcat也运行着,后来发现,原来除了这两处配置外,还有一处重要的配置文件,在TOMCAT_HOME/conf/Catalina/下面(Catalina是server.xml里的engine的名称),也是一些关键的配置文件,每个主机(server.xml里的Host),在这里有一个目录,每个主机(Host)里的一个context在该主机目录下有一个对应的xml文件,比如,根目录对应ROOT.xml,其它名为test的context对应test.xml。

TOMCAT_HOME/conf/Catalina/hostname/context1.xml相当于在server.xml中的Catalina引擎下的hostname主机下配置context1WEB应用。在目录里配置,和在server.xml里配置效果是一样的,Tomcat自带的admin,自动将所有context转到目录下配置,而不是集中在server.xml。

分页: 11/13 第一页 上页 6 7 8 9 10 11 12 13 下页 最后页 [ 显示模式: 摘要 | 列表 ]