PHP8.1调用fclose报TypeError:参数应为资源类型而非字符串
问题分析与解决
你的致命错误核心原因是**file_get_contents()返回的是文件内容的字符串,而fclose()要求传入的是合法的文件资源句柄**。PHP7对类型检查相对宽松,不会触发致命错误,但PHP8.1启用了严格的类型校验,直接暴露了这个逻辑错误。
代码里存在两个关键问题:
- 误用
file_get_contents()的第二个参数:该函数的第二个参数是use_include_path,仅接受布尔值(true/false),你传入的'w'属于无效参数。 - 多余的
fclose($file)调用:file_get_contents()是一次性读取文件内容到字符串的函数,不会创建持久的文件资源句柄,完全不需要用fclose()关闭。只有fopen()这类函数打开的资源才需要手动关闭。
修正后的代码:
$remoteFile = '/in/' . $row['verificatie'] . '_' . $bestandsnaam . '.xml'; // 移除无效参数,正确获取远程文件内容 $fileContent = file_get_contents("ssh2.sftp://$sftp$remoteFile"); // 建议添加读取失败的错误处理 if ($fileContent === false) { die('远程XML文件读取失败'); } $xml = simplexml_load_string($fileContent); $json = json_encode($xml); $response = json_decode($json); // 移除多余的fclose调用
内容的提问来源于stack exchange,提问作者Matthijs
相关产品推荐
相关产品推荐

