You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将对象类转换为字符串?及SSH执行结果转字符串用于strripos

解决对象转字符串与SSH执行结果处理的问题

先针对你的两个需求和代码问题逐一说明:

1. 如何将对象类转换为字符串?

在PHP中,要让自定义对象能被转换为字符串,你需要在类中实现**__toString()魔术方法**。这个方法会在你尝试将对象当作字符串使用时(比如echo $obj、强制类型转换(string)$obj)自动调用,你可以在方法里定义对象要输出的字符串格式。

举个简单例子:

class MyClass {
    private $data = "Hello from MyClass";

    // 实现__toString魔术方法
    public function __toString() {
        return $this->data;
    }
}

$obj = new MyClass();
// 直接echo对象,会调用__toString
echo $obj; // 输出: Hello from MyClass
// 强制转换为字符串
$str = (string)$obj;

如果没有实现这个方法,直接把对象当作字符串使用会触发E_RECOVERABLE_ERROR错误。

2. 处理SSH执行结果并用于strripos()

你当前代码的核心问题是:把$ssh对象直接传给了strripos(),而不是$ssh->exec()的执行结果。另外,ssh2_exec()返回的是一个资源流(resource),不是直接的字符串,需要先读取流内容才能得到字符串。

正确的处理步骤:

  1. 执行SSH命令并获取资源流
  2. 使用stream_get_contents()读取流内容,转换为字符串
  3. 预处理字符串(比如去除多余的换行、空格)
  4. 再传入strripos()使用

修正后的代码示例:

// 执行SSH命令,获取资源流
$stream = $ssh->exec('tail -1 /var/log/playlog.csv');
// 等待命令执行完成(避免流内容不完整)
ssh2_stream_set_blocking($stream, true);
// 读取流内容为字符串
$sshResult = stream_get_contents($stream);
// 关闭流
fclose($stream);

// 预处理:去除字符串首尾的空白字符(比如换行、空格)
$sshResult = trim($sshResult);

// 现在再执行你的字符串处理逻辑
if ($idx = strripos($sshResult, ',')) {
    $ErrorCode = substr($sshResult, $idx + 1);
    // 这里可以简化substr:从idx+1开始到末尾,不需要第二个长度参数
    echo " " . $Playlist . ReturnError($ErrorCode);
} else {
    // 处理没有找到逗号的情况,避免逻辑出错
    echo "未找到错误码分隔符";
}

关键说明:

  • ssh2_exec()返回的是资源,必须用stream_get_contents()读取才能得到字符串
  • 加上ssh2_stream_set_blocking($stream, true)确保命令执行完毕再读取内容
  • trim()可以去除结果首尾的换行、空格,避免这些干扰字符影响strripos()的判断
  • 原代码中substr的长度参数可以省略,因为substr($str, $start)默认会取到字符串末尾

内容的提问来源于stack exchange,提问作者Kai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:12:03