JavaScript基本对象

[不指定 2005/03/16 22:29 | by ipaddr ]
原文地址:http://www-900.ibm.com/developerWorks/cn/lotus/lo-jsobj/index.shtml

亲密接触单选按钮、复选框和JavaScript的一些有趣的事情

PHP安全配置

[不指定 2005/02/03 22:31 | by ipaddr ]
如果是虚拟主机提供商,需要提高PHP的安全,可如下:

修改php.ini

safe_mode=On
open_basedir=/var/www/html
display_errors=Off
disable_function=phpinfo,get_cfg_var,popen,exec,passthru,system,phpversion
expose_php = Off
allow_url_fopen = Off

log_errors=

有些程序,在XP下开发的,在2000或以下版本运行时,总是报错,提示:

"无法定位程序输入点RestoreLastError于动态链接库kernel32.dll上"

此类问题的原因,主要是因为在XP上的Kernel32.dll上面有RestoreLastError函数,而在2000上面的Kernel32.dll没有这个函数。

可以如下解决:

(一直漂 原创,转载请说明)

用二进制编辑器,把报错的程序的RestoreLastError改成SetLastError。

步骤如下:

假如启动aspbiz.exe报错,

1.用UltraEdit打开aspbiz.exe

2.找到RestoreLastError字符串,将其改为:SetLastError,并且,后面四位补上0x00,就是十六进制的0

3.存盘,退出

4.OK!

Oracle在Linux下的C开发

[不指定 2005/01/19 22:32 | by ipaddr ]
1.首先,要安装Oracle客户端(或在Linux下安装好Oracle)

2.安装Libsqlora8库函数:

 一般Oracle的C开发,是用OCI,C++开发,是用OCCI。安装好Oracle客户端后,就可以用OCI开发了。
 Libsqlora8库函数是GNU/Linux组织开发的针对Oracle8 OCI library的易用性C语言封装。它将大量的OCI数据类型表现为通用C语言数据类型,将OCI函数按类型重新分类封装,大大减少了函数的调用步骤和程序代码量。Libsqlora8库函数的网址是:http://www.poitschke.de/libsqlora8/ 可以到上面下载最新的包安装。
 download libsqlora8-2.3.0.tar.gz
 //设置好ORACLE_HOME,LD_LIBRARY_PATH等环境变量
 #tar zxvf libsqlora8-2.3.0.tar.gz
 #./configure
 #make
 #make install

 安装好了。安装完后,在/usr/local/share/doc/packages/libsqlora8下面,有完整的文档。

3.测试代码:

#include <stdio.h>
#include <stdlib.h>
#include "sqlora.h"

static CONST char * _defuser="scott/tiger@oracledb";

int main(int argc,char **argv)
{
sqlo_db_handle_t dbh;
CONST char * cstr = _defuser;
char server_version[100];
if (SQLO_SUCCESS!= sqlo_init(SQLO_OFF,1,100))
{
 printf("Failed to init libsqlora8\n");
 return EXIT_FAILURE;
}
if (SQLO_SUCCESS != sqlo_connect(&dbh,cstr))
{
 printf("Cannot login with %s \n",cstr);
 return EXIT_FAILURE;
}
if (SQLO_SUCCESS != sqlo_server_version(dbh,server_version,sizeof(server_version)))
{
 printf("Failed to get the server version: %s\n", sqlo_geterror(dbh));
    return EXIT_FAILURE;
}
printf("Connected to:\n%s\n\n", server_version);
}

编译运行:

#gcc -lsqlora8 test.c -o test
#./test

Oracle/PHP 常见问题解答

[不指定 2004/12/25 23:53 | by ipaddr ]
文章来源:http://www.oracle.com/technology/global/cn/tech/opensource/php_faq.html

最近网站上要弄个论坛,

找了好久,发现,在PHP环境下,免费的,好用的论坛确实不多,最后决定用PHPBB.

上传程序,上传文件,安装,安装界面,一切很顺利,

最后发现,基本安装的PHPBB没有上传功能,:(,真是不如意呀。

后来,不得不安装了一个 Attachment Mod[2.0.10],还真烦琐,更新数据库,上传了一些新的文件,还更新了几十个文件,终于搞定。

后来网站编辑要求加一个精华功能,找了好久也没找到插件,原来国外的论坛,大多数都没有精华功能的,最后不得不手工改PHPBB,新增一个精华功能,以下是过程。



最近网站上要弄个论坛,

找了好久,发现,在PHP环境下,免费的,好用的论坛确实不多,最后决定用PHPBB.

上传程序,上传文件,安装,安装界面,一切很顺利,

最后发现,基本安装的PHPBB没有上传功能,:(,真是不如意呀。

后来,不得不安装了一个 Attachment Mod[2.0.10],还真烦琐,更新数据库,上传了一些新的文件,还更新了几十个文件,终于搞定。

后来网站编辑要求加一个精华功能,找了好久也没找到插件,原来国外的论坛,大多数都没有精华功能的,最后不得不手工改PHPBB,新增一个精华功能,以下是过程。

1.修改数据库

在Topics表格中新增一字段topic_pink  tinyint(1)  UNSIGNED 默认为0,为1时表示为精华帖。

2.改资源文件

includes/contants.php
          在define('POST_GLOBAL_ANNOUNCE', 3);后加入define('POST_PINK', 1);
language/lang_chinese_simplified/lang_main.php
          在$lang['Topic_Sticky'] = "置顶:";后加入$lang['Topic_Pink'] = "精华:";
          在$lang['Topics_Locked'] = "选择的主题已经成功的被锁定";后加入$lang['Topics_Pinked'] = "选择的主题已经成功的被设为精华";
          在$lang['Topics_Unlocked'] = "选择的主题已经成功的被解锁";后加入$lang['Topics_Unpinked'] = "选择的主题已经成功的取消精华";
templates/xxxxxx/viewforum_body.tpl
          在图示后面,加入精华帖的图示。
templates/xxxxxx/xxxx.cfg
          在$images['folder_sticky'] = "$current_template_images/folder_sticky.gif";
          后面加入$images['folder_pink'] = "$current_template_images/folder_pink.gif";
                      $images['folder_pink_new'] = "$current_template_images/folder_pink_new.gif";
templates/xxxxxx/images/
          做两个图标,folder_pink.gif:精华帖的图标,folder_pink_new.gif有新帖时的精华帖图标

3.实现显示

a.viewforum.php
     在$topic_type = $topic_rowset[$i]['topic_type'];后加入$topic_pink = $topic_rowset[$i]['topic_pink'];
     在
        else if( $topic_type == POST_STICKY )
       {
            $topic_type = $lang['Topic_Sticky'] . ' ';
       }
     后加入
       else if( $topic_pink == POST_PINK )
      {
           $topic_type = $lang['Topic_Pink'] . ' ';
      }
     在
      else if( $topic_rowset[$i]['topic_status'] == TOPIC_LOCKED )
     {
         $folder = $images['folder_locked'];
         $folder_new = $images['folder_locked_new'];
     }
     后加入
    else if( $topic_rowset[$i]['topic_pink'] == POST_PINK )
   {
        $folder = $images['folder_pink'];
        $folder_new = $images['folder_pink_new'];
   }

b.search.php
     在$topic_type = $searchset[$i]['topic_type'];后加入$topic_pink = $searchset[$i]['topic_pink'];
     在
        else if( $topic_type == POST_STICKY )
       {
            $topic_type = $lang['Topic_Sticky'] . ' ';
       }
     后加入
       else if( $topic_pink == POST_PINK )
      {
           $topic_type = $lang['Topic_Pink'] . ' ';
      }
     在
      else if( $searchset[$i]['topic_status'] == TOPIC_LOCKED )
     {
         $folder = $images['folder_locked'];
         $folder_new = $images['folder_locked_new'];
     }
     后加入
    else if( $searchset[$i]['topic_pink'] == POST_PINK )
   {
        $folder = $images['folder_pink'];
        $folder_new = $images['folder_pink_new'];
   }
  //注意,与viewforum.php有一点点不同,就是$searchset不同。

c.modcp.php
     在$topic_type = $row['topic_type'];后加入$topic_pink = $row['topic_pink'];
     在
        else if( $topic_type == POST_STICKY )
       {
            $topic_type = $lang['Topic_Sticky'] . ' ';
       }
     后加入
       else if( $topic_pink == POST_PINK )
      {
           $topic_type = $lang['Topic_Pink'] . ' ';
      }
     在
      else if( $row['topic_status'] == TOPIC_LOCKED )
     {
         $folder = $images['folder_locked'];
         $folder_new = $images['folder_locked_new'];
     }
     后加入
    else if( $row['topic_pink'] == POST_PINK )
   {
        $folder = $images['folder_pink'];
        $folder_new = $images['folder_pink_new'];
   }
  //注意,与search.php也有不同,就是$searchset[$i]变成了$row。

基本也就这三个地方要显示精华帖。改法都相似,就是在相应的地方加入一些语句

4.实现操作

实现设置精华和取消精华的操作,只需修改两个地方,

a.viewtopic.php增加一个操作界面(链接)
在148行的"$sql = "SELECT t.topic_id, t.topic_title, t.topic_status, "后面加入"t.topic_pink, ",从数据库里读取topic_pink字段,便于判断
在if ( $is_auth['auth_mod'] ) {}段里的$topic_mod .= ( $forum_topic_data['topic_status'] == TOPIC_UNLOCKED ) 行后面加入:
$topic_mod .= ( $forum_topic_data['topic_pink'] == POST_PINK ) ? "

b.修改modcp.php实现这个功能
1.在$unlock = ( isset($HTTP_POST_VARS['unlock']) ) ? TRUE : FALSE;加入
$pink = ( isset($HTTP_POST_VARS['pink']) ) ? TRUE : FALSE;$unpink = ( isset($HTTP_POST_VARS['unpink']) ) ? TRUE : FALSE;
2.在
else if ( $unlock )
{
 $mode = 'unlock';
}
后加入
else if ( $pink )
{
 $mode = 'pink';
}
else if ( $unpink )
{
 $mode = 'unpink';
}
3.在case 'unlock':.........break;那后面加上:
case 'pink':
 if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
 {
  message_die(GENERAL_MESSAGE, $lang['None_selected']);
 }

 $topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ?  $HTTP_POST_VARS['topic_id_list'] : array($topic_id);

 $topic_id_sql = '';
 for($i = 0; $i < count($topics); $i++)
 {
  $topic_id_sql .= ( ( $topic_id_sql != '' ) ? ', ' : '' ) . intval($topics[$i]);
 }

 $sql = "UPDATE " . TOPICS_TABLE . "
  SET topic_pink = 1
  WHERE topic_id IN ($topic_id_sql)
   AND forum_id = $forum_id
   AND topic_moved_id = 0";
 if ( !($result = $db->sql_query($sql)) )
 {
  message_die(GENERAL_ERROR, 'Could not update topics table', '', __LINE__, __FILE__, $sql);
 }

 if ( !empty($topic_id) )
 {
  $redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
  $message = sprintf($lang['Click_return_topic'], '', '');
 }
 else
 {
  $redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
  $message = sprintf($lang['Click_return_modcp'], '', '');
 }

 $message = $message . '

' . sprintf($lang['Click_return_forum'], '

 $template->assign_vars(array(
  'META' => '')
 );

 message_die(GENERAL_MESSAGE, $lang['Topics_Pinked'] . '

' . $message);

 break;

case 'unpink':
 if ( empty($HTTP_POST_VARS['topic_id_list']) && empty($topic_id) )
 {
  message_die(GENERAL_MESSAGE, $lang['None_selected']);
 }

 $topics = ( isset($HTTP_POST_VARS['topic_id_list']) ) ?  $HTTP_POST_VARS['topic_id_list'] : array($topic_id);

 $topic_id_sql = '';
 for($i = 0; $i < count($topics); $i++)
 {
  $topic_id_sql .= ( ( $topic_id_sql != "") ? ', ' : '' ) . intval($topics[$i]);
 }

 $sql = "UPDATE " . TOPICS_TABLE . "
  SET topic_pink = 0
  WHERE topic_id IN ($topic_id_sql)
   AND forum_id = $forum_id
   AND topic_moved_id = 0";
 if ( !($result = $db->sql_query($sql)) )
 {
  message_die(GENERAL_ERROR, 'Could not update topics table', '', __LINE__, __FILE__, $sql);
 }

 if ( !empty($topic_id) )
 {
  $redirect_page = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id&sid=" . $userdata['session_id'];
  $message = sprintf($lang['Click_return_topic'], '', '');
 }
 else
 {
  $redirect_page = "modcp.$phpEx?" . POST_FORUM_URL . "=$forum_id&sid=" . $userdata['session_id'];
  $message = sprintf($lang['Click_return_modcp'], '', '');
 }

 $message = $message . '

' . sprintf($lang['Click_return_forum'], '

 $template->assign_vars(array(
  'META' => '')
 );

 message_die(GENERAL_MESSAGE, $lang['Topics_Unpinked'] . '

' . $message);

 break;
//可以拷贝lock那段的内容,将SQL语句和最后面的message_die()那句改改就可以了。

到此,基本完工了!

Linux下PHP+Oracle乱码解决

[不指定 2004/12/15 23:55 | by ipaddr ]
1.安装好服务器,设置好服务端的字符集(比如:ZHS16GBK为中文)

2.查看客户端查看服务端的语言,

 sql>select * from V$NLS_PARAMETERS Where PARAMETER='NLS_LANGUAGE';

  比如是"SIMPLIFIED CHINESE"

 sql>select * from V$NLS_PARAMETERS Where PARAMETER='NLS_TERRITORY';

  比如是"CHINA"

 sql>select * from V$NLS_PARAMETERS Where PARAMETER='NLS_CHARACTERSET';

  比如是"ZHS16GBK"

3.在Apache启动脚本里加入环境变量:

export NLS_LANG="SIMPLIFIED CHINESE"_CHINA_CHS16GBK

(在/etc/init.d/httpd里加入,源代码安装的Apache写一个脚本调用apachectl)

4.OK.

5.注意:
a.如果是简体中文环境,请用上面的参数
b.NLS_LANG是在客户端设置,由"语言_国家.字符集"组成,中文对应为:""SIMPLIFIED CHINESE"_CHINA_CHS16GBK",由于中间有空格,所以用引号.
c.如果只设置了export NLS_LANG="SIMPLIFIED CHINESE",很多繁体字无法识别。


文章来源: http://www.oracle.com/technology/global/cn/tech/opensource/php/php_troubleshooting_faq.html

PHP+Oracle整合

[不指定 2004/12/15 23:53 | by ipaddr ]
安装了Oracle后,才可以与PHP整合
a.设置好ORACLE_HOME环境变量(Oracle的安装目录)
b.Apache以DSO方式安装 ./configure --enable-module=so
c.重装编译安装PHP,并加上--with-oci8=$ORACLE_HOME
d.注意,还要设置LD_LIBRARY_PATH环境变量 引用:

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH  

另外,如果运行时如果要用到这个变量,可以加入到/etc/ld.so.conf中。比如,在/etc/ld.so.conf中加入
/opt/oracle/product/9.2.0/lib
e.改Apache的启动脚本
Apache启动的时候,要有环境变量ORACLE_HOME,如果是RHEL3自带的Apache,则需要在/etc/init.d/httpd里,加入如下两句:
引用:
在/etc/init.d/httpd的31行后,加入:
#在这句之后
# RETVAL=0
ORACLE_HOME=/opt/oracle/product/9.2
ORACLE_SID=koook
#ORACLE_SID可以不用设置,但登录是要指定SID
export ORACLE_HOME ORACLE_SID  

另外,如果是自安装的Apache,用apachectl启动的话,可以写一个脚本,如下:
引用:(oracle-apache-ctl)
#!/bin/sh
ORACLE_HOME=/opt/oracle/product/9.2
ORACLE_SID=koook
export ORACLE_HOME ORACLE_SID
echo "Oracle Home: $ORACLE_HOME"
echo "Oracle SID: $ORACLE_SID"
echo Starting Apache
./apachectl start  

(另外,可能还需加入NLS_LANG环境变量,防止乱码)





以下是测试:


$db_conn = ocilogon( "system", "syspassword","koookdb");

//koookdb在Netca里设置,或修改tnsnames.ora文件

$cmdstr = "select ename, sal from scott.emp";

$parsed = ociparse($db_conn, $cmdstr);
ociexecute($parsed);

$nrows = ocifetchstatement($parsed, $results);

echo "";
echo "

Oracle PHP Test

";
echo "\n \n";
echo " Name \n Salary \n
\n";

for ($i = 0; $i < $nrows; $i++ )
{
   echo "
\n";
   echo " " . $results["ENAME"][$i] . " ";
   echo " $ " . number_format($results["SAL"][$i],   2). " ";
   echo "
\n";

}

echo "
Number of Rows: $nrows
";
echo "
If you see data, then it works!

\n";


?>


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