Php 当需要密码加密时,为什么与ASE的连接失败?

Php 当需要密码加密时,为什么与ASE的连接失败?,php,sap-ase,Php,Sap Ase,如何对从PHP到Sybase ASE的数据库服务器连接进行密码加密 当net password encryption reqd=1时,与ASE的PHP连接失败 如何使用密码加密将PHP DB连接到ASE?是否需要在客户端连接上设置PHP关键字或参数?下面是一个解决此问题的方法,它可以从Linux 64位基本机器(PHP版本为5.3.6)和Sybase CTISQL实用程序/15.7/p-EBF19975 ESD#3/DRV.15.7.0.3中的Sybase驱动程序进行连接。虽然我们要让它工作,但

如何对从PHP到Sybase ASE的数据库服务器连接进行密码加密

net password encryption reqd=1
时,与ASE的PHP连接失败


如何使用密码加密将PHP DB连接到ASE?是否需要在客户端连接上设置PHP关键字或参数?

下面是一个解决此问题的方法,它可以从Linux 64位基本机器(PHP版本为5.3.6)和Sybase CTISQL
实用程序/15.7/p-EBF19975 ESD#3/DRV.15.7.0.3
中的Sybase驱动程序进行连接。虽然我们要让它工作,但我们还需要让Apache工作。除此之外,我希望Sybase支持能够帮助我们解决这一问题,就像他们为我们的问题提供下面的解决方案一样。我把这个贴在这里是为了大家的利益。注意:AFAICT,这不是Sybase支持的解决方案。请自行承担风险

要使其正常工作,几乎不需要做什么:

  • 我使用了最新的Debian Stable 6.05压缩64位
  • 我已经安装了从Sybase下载的ebf19977(带开放客户端的开发工具包,是的,该编号已关闭,这不是错误,您将在安装时看到)
  • 从PHP.net网站下载PHP5.3.6,从源代码处编译
  • 步骤1)我认为应该很容易地设置这个。确保您有sudo访问权限

    步骤2)要安装开发者工具包,您需要键入setup.bin文件所在位置的整个路径,就像在sudo/home/btran/ebf19977/setup.bin中键入一样,这将启动安装,基本上按照那里的说明安装OpenClient及其相关工具。确保已安装Open Client和PHP库

    完成安装后,还需要执行其他几个步骤:

    通过在根目录/opt/Sybase中执行Sybase.sh来设置所有Sybase环境变量

    sudo cat /opt/sybase/SYBASE.sh >> /etc/profile , if necessary source /etc/profile
    
    这将设置大多数变量,但您需要添加一对不存在的变量:

        PHPRC=/opt/sybase/OCS-15_0/config
        LD_LIBRARY_PATH=/opt/sybase/OCS-15_0/php/php536_64/lib:/opt/sybase/OCS-15_0/lib
    
    您的/ect/profile应该如下所示:

        # ------------------------------------
        #    Sybase Product Environment variables
        # ------------------------------------
        SYBASE="/opt/sybase"
        export SYBASE
        SYBASE_OCS="OCS-15_0"
        export SYBASE_OCS
        INCLUDE="/opt/sybase/OCS-15_0/include":$INCLUDE
        export INCLUDE
        LIB="/opt/sybase/OCS-15_0/lib":$LIB
        export LIB
        PATH="/opt/sybase/OCS-15_0/bin":$PATH
        export PATH
        LD_LIBRARY_PATH="/opt/sybase/OCS-15_0/php/php536_64/lib:/opt/sybase/OCS-15_0/lib:/opt/sybase/OCS-15_0/lib3p64:/opt/sybase/OCS-15_0/lib3p":$LD_LIBRARY_PATH
        export LD_LIBRARY_PATH
    
        PHPRC="/opt/sybase/OCS-15_0/config"
        export PHPRC
    
        JAVA_HOME="/opt/sybase/jre32"
        export JAVA_HOME
    
        RIBO_HOME="/opt/sybase/jutils-3_0/ribo"
        export RIBO_HOME
        # ------------------------------------
    
        ;;;;;;;;;;;
        ; This is the default external configuration definition file. Feel free
        ; to add your own customizations.
        ;
        [DEFAULT]
        ; This is the default section loaded by applications that use
        CS_SEC_ENCRYPTION = CS_TRUE
        [ANSI_ESQL]
        ; This section defines configuration which an ANSI conforming
        CS_CAP_RESPONSE = CS_RES_NOSTRIPBLANKS
        CS_EXTRA_INF = CS_TRUE
        CS_ANSI_BINDS = CS_TRUE
        CS_OPT_ANSINULL = CS_TRUE
        CS_OPT_ANSIPERM = CS_TRUE
        CS_OPT_STR_RTRUNC = CS_TRUE
        CS_OPT_ARITHABORT = CS_FALSE
        CS_OPT_TRUNCIGNORE = CS_TRUE
        CS_OPT_ARITHIGNORE = CS_FALSE
        CS_OPT_ISOLATION = CS_OPT_LEVEL3
        CS_OPT_CHAINXACTS = CS_TRUE
        CS_OPT_CURCLOSEONXACT = CS_TRUE
        CS_OPT_QUOTED_IDENT = CS_TRUE
        ; End of default sections
    
        [isql]
        CS_SEC_ENCRYPTION = CS_TRUE
    
        [PHP]
        CS_SEC_ENCRYPTION = CS_TRUE
    
        ; This is a sample section showing how you might alter configuration
        ; properties for you Embedded SQL application.
        [SAMPLE_ESQL]
        ; use most of the ANSI properties defined above
        include = ANSI_ESQL
        ; but override some default properties
        CS_OPT_CHAINXACTS = CS_FALSE ; run in autocommit mode
        ;;;;;;;;;
    
        extension=/opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so
    
    然后,您还需要修改位于根目录/opt/sybase的接口文件,使其看起来像这样,请不要使用此文件,使用您的信息:

        dev
            master tcp ether dev.company.com 4425
            query tcp ether dev.company.com 4425
    
        prod
            master tcp ether prod.company.com 4425
            query tcp ether prod.company.com 4425
    
        ribo
            master tcp ether testhost.company.com 5005
            query tcp ether testhost.company.com 5005
    
    您还需要修改ocs.cfg以正确启动PHP,该文件位于文件夹
    /opt/sybase/ocs-15_0/config
    中,如下所示:

        # ------------------------------------
        #    Sybase Product Environment variables
        # ------------------------------------
        SYBASE="/opt/sybase"
        export SYBASE
        SYBASE_OCS="OCS-15_0"
        export SYBASE_OCS
        INCLUDE="/opt/sybase/OCS-15_0/include":$INCLUDE
        export INCLUDE
        LIB="/opt/sybase/OCS-15_0/lib":$LIB
        export LIB
        PATH="/opt/sybase/OCS-15_0/bin":$PATH
        export PATH
        LD_LIBRARY_PATH="/opt/sybase/OCS-15_0/php/php536_64/lib:/opt/sybase/OCS-15_0/lib:/opt/sybase/OCS-15_0/lib3p64:/opt/sybase/OCS-15_0/lib3p":$LD_LIBRARY_PATH
        export LD_LIBRARY_PATH
    
        PHPRC="/opt/sybase/OCS-15_0/config"
        export PHPRC
    
        JAVA_HOME="/opt/sybase/jre32"
        export JAVA_HOME
    
        RIBO_HOME="/opt/sybase/jutils-3_0/ribo"
        export RIBO_HOME
        # ------------------------------------
    
        ;;;;;;;;;;;
        ; This is the default external configuration definition file. Feel free
        ; to add your own customizations.
        ;
        [DEFAULT]
        ; This is the default section loaded by applications that use
        CS_SEC_ENCRYPTION = CS_TRUE
        [ANSI_ESQL]
        ; This section defines configuration which an ANSI conforming
        CS_CAP_RESPONSE = CS_RES_NOSTRIPBLANKS
        CS_EXTRA_INF = CS_TRUE
        CS_ANSI_BINDS = CS_TRUE
        CS_OPT_ANSINULL = CS_TRUE
        CS_OPT_ANSIPERM = CS_TRUE
        CS_OPT_STR_RTRUNC = CS_TRUE
        CS_OPT_ARITHABORT = CS_FALSE
        CS_OPT_TRUNCIGNORE = CS_TRUE
        CS_OPT_ARITHIGNORE = CS_FALSE
        CS_OPT_ISOLATION = CS_OPT_LEVEL3
        CS_OPT_CHAINXACTS = CS_TRUE
        CS_OPT_CURCLOSEONXACT = CS_TRUE
        CS_OPT_QUOTED_IDENT = CS_TRUE
        ; End of default sections
    
        [isql]
        CS_SEC_ENCRYPTION = CS_TRUE
    
        [PHP]
        CS_SEC_ENCRYPTION = CS_TRUE
    
        ; This is a sample section showing how you might alter configuration
        ; properties for you Embedded SQL application.
        [SAMPLE_ESQL]
        ; use most of the ANSI properties defined above
        include = ANSI_ESQL
        ; but override some default properties
        CS_OPT_CHAINXACTS = CS_FALSE ; run in autocommit mode
        ;;;;;;;;;
    
        extension=/opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so
    
    注意:检查同一目录中是否存在php.ini文件也是非常关键的
    /opt/sybase/OCS-15_0/config
    (指向exention文件,请查看环境变量
    LD_LIBRARY_PATH=“/opt/sybase/OCS-15_0/php/php536_64/lib

    您的php.ini应该如下所示:

        # ------------------------------------
        #    Sybase Product Environment variables
        # ------------------------------------
        SYBASE="/opt/sybase"
        export SYBASE
        SYBASE_OCS="OCS-15_0"
        export SYBASE_OCS
        INCLUDE="/opt/sybase/OCS-15_0/include":$INCLUDE
        export INCLUDE
        LIB="/opt/sybase/OCS-15_0/lib":$LIB
        export LIB
        PATH="/opt/sybase/OCS-15_0/bin":$PATH
        export PATH
        LD_LIBRARY_PATH="/opt/sybase/OCS-15_0/php/php536_64/lib:/opt/sybase/OCS-15_0/lib:/opt/sybase/OCS-15_0/lib3p64:/opt/sybase/OCS-15_0/lib3p":$LD_LIBRARY_PATH
        export LD_LIBRARY_PATH
    
        PHPRC="/opt/sybase/OCS-15_0/config"
        export PHPRC
    
        JAVA_HOME="/opt/sybase/jre32"
        export JAVA_HOME
    
        RIBO_HOME="/opt/sybase/jutils-3_0/ribo"
        export RIBO_HOME
        # ------------------------------------
    
        ;;;;;;;;;;;
        ; This is the default external configuration definition file. Feel free
        ; to add your own customizations.
        ;
        [DEFAULT]
        ; This is the default section loaded by applications that use
        CS_SEC_ENCRYPTION = CS_TRUE
        [ANSI_ESQL]
        ; This section defines configuration which an ANSI conforming
        CS_CAP_RESPONSE = CS_RES_NOSTRIPBLANKS
        CS_EXTRA_INF = CS_TRUE
        CS_ANSI_BINDS = CS_TRUE
        CS_OPT_ANSINULL = CS_TRUE
        CS_OPT_ANSIPERM = CS_TRUE
        CS_OPT_STR_RTRUNC = CS_TRUE
        CS_OPT_ARITHABORT = CS_FALSE
        CS_OPT_TRUNCIGNORE = CS_TRUE
        CS_OPT_ARITHIGNORE = CS_FALSE
        CS_OPT_ISOLATION = CS_OPT_LEVEL3
        CS_OPT_CHAINXACTS = CS_TRUE
        CS_OPT_CURCLOSEONXACT = CS_TRUE
        CS_OPT_QUOTED_IDENT = CS_TRUE
        ; End of default sections
    
        [isql]
        CS_SEC_ENCRYPTION = CS_TRUE
    
        [PHP]
        CS_SEC_ENCRYPTION = CS_TRUE
    
        ; This is a sample section showing how you might alter configuration
        ; properties for you Embedded SQL application.
        [SAMPLE_ESQL]
        ; use most of the ANSI properties defined above
        include = ANSI_ESQL
        ; but override some default properties
        CS_OPT_CHAINXACTS = CS_FALSE ; run in autocommit mode
        ;;;;;;;;;
    
        extension=/opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so
    
    步骤3)从源代码编译PHP,再次使用Sybase调用64位

    我将源代码下载到
    /opt/php-5.3.6
    ,以便在Linux上安装大多数应用程序

        cd to /opt/php-5.3.6 
    
        ./configure  
    
    非常重要注意,这就是我们遇到的问题,如果我选择任何其他配置选项而不是默认值。/configure,PHP将无法加载,错误如下:

    btran@sls-baonix:/opt/php-5.3.6$ php ~/test-dev.php
    PHP Warning:  PHP Startup: Unable to load dynamic library
    '/opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so' -
    /opt/sybase/OCS-15_0/php/php536_64/lib/sybaseasephp.so: undefined
    symbol: executor_globals in Unknown on line 0
    
    Fatal error: Call to undefined function sybase_connect() in
    /home/btran/test-dev.php on line 10
    ]
    

    我们需要其他选项的原因是,我们也需要它来与Apache一起工作。我们现在可以使用PHP,但我们需要能够从网站启动PHP,因此依赖项是PHP除了支持Sybase外,还需要支持Apache。如果有任何PHP专家对此有解决方案,请加入并帮助我们。

    我一直在使用Sy多年来,我一直没有看到任何方法可以满足您的要求。我在这里遇到了这篇帖子,可能是一个可能的解决方案。Sybase支持人员说这是一个可能的解决方案。您可以通过使用ocs.cfg文件来解决这个问题。在$Sybase/ocs-15_0/config目录中,是一个sample.cfg文件。vi sample.cfg文件是一个d将此行添加到默认节[Default]CS_SEC_ENCRYPTION=CS_TRUE这可能会起作用。如果应用程序正在传递名称,您将创建一个新节[application name]CS_SEC_ENCRYPTION=CS_TRUE Sybase人员还说,您应该至少使用Sybase版本15.7。我建议您重复您所写的完整答案,您可能会得到一些应得的积分,您的答案将更容易被具有相同问题的人访问。回答自己的问题是可以的,只要是不是收集信用点的把戏。对不起,不是信用点,而是信誉点(或投票)