我的服务器模型中有一个函数:
public function getStatus($server) {
$socket = @fsockopen($server, '80', $errno, $errstr, 3);
if($errno == 0) { return true; }
else { return false;}
fclose($socket);
}
在Server视图中的admin.php中:
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'server-grid',
'dataProvider'=>$model->search(),
//'filter'=>$model,
'columns'=>array(
'id',
'server_name',
'server_ip',
array(
'header'=>'Status',
'type'=>'html',
'value'=>$model->getStatus($model->server_ip)?'1':'0',
),
),
)); ?>
server_ip的mysql列是:
`server_ip` varchar(20) NOT NULL DEFAULT '0.0.0.0',
我无法使用getStatus函数获得所需的结果。它一直返回0。当我输入静态值
时'value' => $model->getStatus('192.168.1.1')?'1':'0',
它运作正常。
'value' => '$data->server_ip',
给我每个服务器的ip地址。但是当传递给getStatus时,无论服务器状态如何,它总是返回1。
有人可以指导我解决这个问题吗?
答案 0 :(得分:0)
在CGridView
值表达式$data
中,每个Server
引用当前对象/数组。因此,您可以使用Server
访问$data
属性和方法:
'value'=>'$data->getStatus($data->server_ip)?1:0',
修改强>
fsockopen()
中的最后一个参数是一个浮点数,表示以秒为单位的超时时间。为了减少加载时间: