Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将对象类转换为字符串_Php_String_Object_Ssh_Ssh2 Exec - Fatal编程技术网

Php 如何将对象类转换为字符串

Php 如何将对象类转换为字符串,php,string,object,ssh,ssh2-exec,Php,String,Object,Ssh,Ssh2 Exec,如何将以下对象转换为字符串: $ssh->exec('tail -1 /var/log/playlog.csv'); 因此,我可以将字符串作为strripos()中的第一个参数进行解析: 与当前运行脚本时一样,我收到以下错误消息: strpos() expects parameter 1 to be string 我见过类似的问题,包括这一个,但我似乎仍然不能想出一个解决办法 这行代码有两个问题: if($idx = strripos($ssh,',')) $ssh是某个类的实例。您

如何将以下对象转换为字符串:

$ssh->exec('tail -1 /var/log/playlog.csv');
因此,我可以将字符串作为strripos()中的第一个参数进行解析:

与当前运行脚本时一样,我收到以下错误消息:

strpos() expects parameter 1 to be string

我见过类似的问题,包括这一个,但我似乎仍然不能想出一个解决办法

这行代码有两个问题:

if($idx = strripos($ssh,','))
  • $ssh
    是某个类的实例。您可以将其作为
    $ssh->exec(…)
    使用。您应该检查它返回的值(可能是一个字符串)和
    stripos()
    ,而不是
    $ssh

  • 如果在找到子字符串或数字(可以是
    0
    )时找不到它,则返回
    FALSE
    。但是在布尔上下文中,
    0
    false
    相同。这意味着当逗号(
    )作为字符串的第一个字符被找到或根本找不到时,此代码无法区分大小写

  • 假设
    $ssh->exec()
    以字符串形式返回远程命令的输出,编写此代码的正确方法是:

    $output = $ssh->exec('tail -1 /var/log/playlog.csv');
    
    $idx = strrpos($output, ',');        //Get the last index of ',' substring 
    if ($idx !== FALSE) {
        // The value after the last comma is the error code
        $ErrorCode = substr($output, $idx + 1);
        echo ' ', $Playlist, ReturnError($ErrorCode);
    } else {
       // Do something else when it doesn't contain a comma
    }
    
    没有必要使用。它执行不区分大小写的比较,但您搜索的字符不是字母,因此区分大小写对它没有任何意义

    您可以改为使用,它产生相同的结果,并且比strripos()快一点。


    另一种方法 获得相同结果的另一种方法是使用将
    $output
    拆分为多个片段(用逗号分隔),并获取最后一个片段(使用或)作为错误代码:

    $output = $ssh->exec('tail -1 /var/log/playlog.csv');
    
    $pieces = explode(',', $output);
    if (count($pieces) > 1) {
        $ErrorCode = (int)end($pieces);
        echo ' ', $Playlist, ReturnError($ErrorCode);
    } else {
       // Do something else when it doesn't contain a comma
    }
    

    这不一定是更好的方法。然而,它对PHP来说更具可读性和习惯性(使用
    strrpos()
    substr()
    的代码更像是C代码)。

    什么类型的
    $ssh
    ?您应该对
    $ssh->exec()
    返回的值使用
    stripos()
    ,而不是
    $ssh
    。这就是我试图实现的目标,我正在考虑将
    $ssh
    变量(类型对象)的输出转换为字符串,然后将该字符串解析为
    stripos()
    @axiac可能是,我想我们需要看看OP是否回复。@chris85该函数是一个全局函数,问题中发布的代码使用了某个类的方法(可能包装了PHP扩展提供的函数)。它们不能相同。@axiac我同意
    stripos($ssh
    不起作用,因为
    $ssh
    不是字符串,所以它不起作用。没有
    $ssh
    定义虽然很难说,但除了说分配返回值之外。如果返回值是一个对象,或者甚至是空值,分配返回值将不起作用。我想我会删除该注释,直到他们的
    exec
    做的事情清楚。Ass将输出从
    exec
    触发到变量,例如
    $output
    ,这是我的目标,因此我现在可以将其解析为
    stripos()
    ,但您的
    stripos()是
    函数在最后一个“,”之后没有输出任何内容。我知道这与我的原始问题无关,但如果您能提供帮助,我可以上传相关代码,因为我似乎无法找出我的错误所在。尽管如此,我仍然会接受您的回答,因为这是原始问题的解决方案。我不明白您的意思。如果
    $idx
    不是
    FALSE
    then
    substr($output,$idx+1)
    返回在最后一个逗号之后开始的
    $output
    片段。当然,如果逗号是
    $output
    中的最后一个字符,它将返回一个空字符串。这就是我的
    $output
    返回的内容:
    2018-03-22 12:43:21,NM\u Test.h264,-2
    。在最后一个逗号之后总是有一个数字,我有一个sw因此,我试图让我的
    stripos()
    函数查看“,”之后的最后一个输出,并将其与
    ReturnError(res)
    函数中的一个大小写进行匹配。
    $output
    的值可能以新行结尾。您应该将错误代码转换为整数。请检查此处:
    $output = $ssh->exec('tail -1 /var/log/playlog.csv');
    
    $pieces = explode(',', $output);
    if (count($pieces) > 1) {
        $ErrorCode = (int)end($pieces);
        echo ' ', $Playlist, ReturnError($ErrorCode);
    } else {
       // Do something else when it doesn't contain a comma
    }