我有一个php代码,它将ssh到远程机器并执行shell脚本来获取文件夹列表。远程机器在shell脚本的指定路径中包含300多个文件夹.Shell脚本执行良好并返回所有文件夹的列表。但是当我在php中检索此输出时,我只得到大约150,200个文件夹
这是我的PHP代码,
<?php
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!($con = ssh2_connect("ip.add.re.ss", "port")))
{
echo "fail: unable to establish connection";
}
else
{
if(!ssh2_auth_password($con, "username", "password"))
{
echo "fail: unable to authenticate";
}
else
{
$stream = ssh2_exec($con, "/usr/local/listdomain/listproject.sh");
stream_set_blocking($stream, true);
$item = fread($stream,4096);
$items = explode(" ", $item);
print_r($items);
}
}
?>
这是我的shell脚本。
#!/bin/bash
var=$(ls /home);
echo $var;
这里的php有什么问题。在这里动态获取数据时,php中的数组大小是否有任何限制。请告知我,我是PHP的初学者。
感谢。
答案 0 :(得分:0)
您只从流中读取一个包含4096个字符的块。如果您的文件夹列表长于此值,您将丢失其余部分。你需要这样的东西:
stream_set_blocking($stream, true);
$item = "";
// continue reading while there's more data
while ($input = fread($stream,4096)) {
$item .= $input;
}
$items = explode(" ", $item);
print_r($items);
答案 1 :(得分:0)
您要求fread()
仅读取4096个字节。在fread()
文档的示例部分中,建议使用stream_get_contents()
来读取文件句柄。否则,您必须使用循环并继续读取数据,直到feof($stream)
返回FALSE
。