在第0行出现“未知”的情况下,模块“ssh2”已被加载。

6
我使用以下功能将文件从一个服务器复制到另一个服务器。它大多数时间都能正常工作,但有时我会在日志文件中看到以下错误:
Module 'ssh2' already loaded in Unknown on line 0

并且它停止了复制。之后由于某种原因,错误将停止,复制将重新开始工作。这里的问题是什么?

function getConn($server,$username,$password)
{
    $connection = 0;

    if (function_exists("ssh2_connect")) 
    {
        $connection = ssh2_connect($server, 3817);
        if($connection)
        {
            if(ssh2_auth_password($connection, $username, $password))
            {
                return $connection;
            }
        }
    }
    return 0;
}
function scp($server,$username,$password,$remotepath,$localpath)
{
    $connection = 0;
    $connection = $this->getConn($server,$username,$password);
    if($connection)
    {
        $ret = ssh2_scp_send($connection, $localpath, $remotepath, 0644);
        ssh2_exec($connection, 'exit'); 
    }
}
3个回答

16
错误信息“Module 'ssh2' already loaded in Unknown on line 0”表示您的PHP配置存在问题。请检查php.ini文件,看看是否有一行代码写着“extension=ssh2.so”。如果有,请将其删除并检查是否一切正常。可能是因为extension=ssh2.so被加载了两次,这意味着PHP会报告模块已经加载。祝好运。

我们遇到一个情况,即/etc/php.d目录中有两个文件包含了ssh2模块。不知道是怎么发生的,但我们删除了其中一个,现在一切都正常了。 - UncaAlby
在FreeBSD中,您将拥有/usr/local/etc/php.ini,其中通常会设置这些内容,但是此外,软件包管理器会在/usr/local/etc/php下添加特定于模块的ini文件,例如ext-20-ssh2.ini,其中包含“extension=ssh2.so”的引用。在这些情况下,请从php.ini或/usr/local/etc/php下的特定ini文件中删除引用(更喜欢前者)。 - Bjørn H. Sandvik

1
在我的情况下,我将位于此处的/etc/php5/mods-available/ssh2.ini中的一行注释掉了。
现在,该文件的内容如下:
;extension=ssh2.so

谢谢!


0
如果上述方法无效,请查看 /etc/php5/conf.d 目录下的文件。
如果您发现有重复的 ssh2.ini 文件,请删除多余的文件。
在我的情况下,我有 50-ssh2.ini 和 ss2.ini 两个文件。这两个文件都提供了同一行代码:
extension=ssh2.so

对我来说,删除50-ssh2.ini文件解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接