【问题标题】:Missing DLL when run as script作为脚本运行时缺少 DLL
【发布时间】:2011-03-23 11:24:33
【问题描述】:

我正在尝试让 PHP 脚本在我的服务器上每 30 分钟运行一次(Win XP SP3、xampp 1.7.3)。 为此,我正在使用 MS 任务调度程序运行以下脚本 (update.cmd)

SET PATH="C:\xampp\PHP"
start php.exe \htdocs\update_dashboard.php

我在我的网络服务器上使用 oci8 php 扩展,但是当我运行该脚本时,它给我的错误是 php.exe 找不到 oci8 扩展所需的 dll。我收到以下错误:

This application has failed to start because OCI.dll was not found. Re-installing the application may fix this problem.

PHP 启动:无法加载动态库 'C:\xampp\php\ext\php_oci8.dll' - 找不到指定的模块计数。

我知道该文件在那里,并且当通过 apache 运行 php 时我没有收到这些错误,我是否运行了错误的 php.exe 副本?有什么想法为什么不呢?我的 PATH 是否必须设置不同?我的 Windows PATH 包括:

C:\instantclient_11_2;C:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;C:\Program Files\Oracle\jre\1.1.8\bin;C:\Program Files\ActiveState Komodo Edit 5\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\Altiris\Software Virtualization Agent\

感谢您的帮助。

【问题讨论】:

    标签: php batch-file xampp


    【解决方案1】:

    当我在 Windows 7 上从 php 5.3 非线程安全切换到 php 5.3 线程安全时发现了这个问题,我勾选了安装所有内容

    我通过在 php.ini 中注释掉 extension=php_oci8.dll, extension=php_oci8_11g.dll, extension=php_pdo_oci.dll 解决了这个问题

    我还遇到了需要 libcs​​.dll 的 sybase 扩展的问题,我通过删除“extension=php_sybase_ct.dll”解决了这个问题

    例如

    ; at bottom of php.ini -->>
    [PHP_BZ2]
    extension=php_bz2.dll
    [PHP_CURL]
    extension=php_curl.dll
    [PHP_ENCHANT]
    extension=php_enchant.dll
    [PHP_FILEINFO]
    extension=php_fileinfo.dll
    [PHP_GD2]
    extension=php_gd2.dll
    [PHP_GETTEXT]
    extension=php_gettext.dll
    [PHP_GMP]
    extension=php_gmp.dll
    [PHP_IMAP]
    extension=php_imap.dll
    [PHP_INTL]
    extension=php_intl.dll
    [PHP_LDAP]
    extension=php_ldap.dll
    [PHP_MBSTRING]
    extension=php_mbstring.dll
    [PHP_MYSQL]
    extension=php_mysql.dll
    [PHP_MYSQLI]
    extension=php_mysqli.dll
    ;[PHP_OCI8]
    ;extension=php_oci8.dll
    ;[PHP_OCI8_11G]
    ;extension=php_oci8_11g.dll
    [PHP_OPENSSL]
    extension=php_openssl.dll
    [PHP_PDO_MYSQL]
    extension=php_pdo_mysql.dll
    ;[PHP_PDO_OCI]
    ;extension=php_pdo_oci.dll
    [PHP_PDO_ODBC]
    extension=php_pdo_odbc.dll
    [PHP_PDO_PGSQL]
    extension=php_pdo_pgsql.dll
    [PHP_PDO_SQLITE]
    extension=php_pdo_sqlite.dll
    [PHP_PGSQL]
    extension=php_pgsql.dll
    [PHP_SHMOP]
    extension=php_shmop.dll
    [PHP_SNMP]
    extension=php_snmp.dll
    [PHP_SOAP]
    extension=php_soap.dll
    [PHP_SOCKETS]
    extension=php_sockets.dll
    [PHP_SQLITE]
    extension=php_sqlite.dll
    [PHP_SQLITE3]
    extension=php_sqlite3.dll
    ;[PHP_SYBASE_CT]
    ;extension=php_sybase_ct.dll
    [PHP_TIDY]
    extension=php_tidy.dll
    [PHP_XMLRPC]
    extension=php_xmlrpc.dll
    [PHP_XSL]
    extension=php_xsl.dll
    [PHP_EXIF]
    extension=php_exif.dll
    

    猜测您是否需要 sybase 和 oracle 数据库连接,标准客户端会在适当的位置安装 oci.dll 和 libcs​​.dll,对于不需要使用这些数据库的其他所有人,只需禁用 php 扩展,它应该可以运行很好:)

    蚂蚁

    【讨论】:

      【解决方案2】:

      我通过更改脚本以某种方式解决了这个问题。现在是:

      C:\xampp\PHP\php.exe -f C:\xampp\htdocs\php_scripts\utils\update_dashboard.php

      感谢您的帮助。

      【讨论】:

        【解决方案3】:

        通过从命令行运行 phpinfo() 检查 php 正在使用的 php.ini 文件,并查看该文件中启用了哪些扩展。从命令行运行时,将 php 设置为使用不同的 php.ini 文件是很常见的;并且 xampp 默认情况下当然使用不同的 php.ini 文件。您还可以通过 -c 开关告诉它要使用哪个 php.ini 文件

        【讨论】:

        • 感谢您的回复。目前我什至无法使用“phpinfo.php”运行一个简单的 php 文件,因为我无法启动 php...
        【解决方案4】:

        我运行了 php -m 命令。结果是我系统的 OCI.dll 损坏或丢失。我通过在运行框中运行 sfc /scannow 来恢复它,重新启动,系统重新安装它,它已经启动并运行,我的扩展现在都可以正常工作了。

        【讨论】:

          【解决方案5】:

          C:\instantclient_11_2 和 C:\oracle\ora92\bin 都包含 OCI.DLL 是否正确?由于路径的顺序,您可能会加载错误的 dll。当我阅读Which OCI8 DLL to use in PHP 5.3 时,您需要在 php.ini 中使用不同的行,具体取决于 oracle 客户端的版本。我目前无法使用 oracle 访问电脑,因此无法验证这一点。

          【讨论】:

            猜你喜欢
            • 2012-07-28
            • 2011-10-07
            • 2021-05-16
            • 2020-08-14
            • 1970-01-01
            • 1970-01-01
            • 2018-10-28
            • 1970-01-01
            • 2021-12-27
            相关资源
            最近更新 更多