本节内容:
php读取大文件内容
例子:
<?php
/*
* 读取大文件最后几行数据
* by www.
*/
$file = $handledir.'/venocap.1';
$fp = fopen($file, "r");
$line = 100;
$pos = -2;
$t = " ";
$data = "";
while ($line > 0) {
while ($t != "\n") {
$flag=fseek($fp, $pos, SEEK_END);
if (fseek($fp, $pos, SEEK_END)==-1){
//fseek($fp, 0);
rewind($fp);
$t="\n";
$line=0;
}else{
$t = fgetc($fp);
$pos --;
}
}
$t = " ";
$line --;
}
while (!feof($fp)) {
$data .= fgets($fp);
$data.='<br/>';
}
fclose ($fp);
echo $data
本节内容:
远程copy与执行命令
本节分享的例子,实现思想如下:
远程copy文件以及在远程服务器中执行命令时,使用ssh2模块,所有的操作依据ssh2连接句柄完成。
1. SSH2模块的安装
1.1 安装需要的扩展包
wget http://www.libssh2.org/download/libssh2-1.4.2.tar.gz
tar zxf libssh2-1.4.2.tar.gz
cd libssh2-1.4.2
./configure && make && make install
wget http://pecl.php.net/get/ssh2-0.11.3.tgz
cd ssh2-0.11.3
phpize (如果报错命令没有找到,apt-get install php5-dev)
./configure —with-ssh2 && make && make install
1.2 修改php配置信息
cd /etc/php5/cgi
vim php.ini
添加项:
ssh2.so是编译ssh2时得到的模块,上面是模块的位置。
cd /etc/php5/cli
vim php.ini
添加项:
ssh2.so是编译ssh2时得到的模块,上面是模块的位置。
1.3 重启web服务器
1.4 查看是否加载了ssh2
ssh2
2. SSH2模块的连接应用
SSH2连接有两种方式,分别是用户名密码,ssh密钥形式。
2.1 用户名与密码
if (ssh2_auth_password($connection,"veno","ubuntu"))
{
echo "Authentication Successful! ";
}else{
die("Authentication Failed...");
}
2.2 ssh密钥
if (ssh2_auth_pubkey_file($connection, 'root',
'/root/.ssh/id_rsa.pub',
'/root/.ssh/id_rsa'))
{
echo "Public Key Authentication Successful\n";
} else {
echo ('Public Key Authentication Failed');
}
密钥生成:
在服务器192.168.6.229上面以root登录
#ssh-keygen
有什么提问基本上回车即可
后成的公钥在~/.ssh/id_rsa.pub
如果想在229通过密钥验证登录到222上面,则把229的公钥id_rsa.pub cp到222上面,先手动登录root,然后运行:
cat id_rsa.pub >> ~/.ssh/authorized_keys
这样就可以在229上面ssh 192.168.6.229不需要输入密码即可登录到222。上面php代码在229上面也可以通过验证。
3. SSH2模块的具体应用
通过SSH2验证通过后,得到的连接符为$connection
3.1 实现远程copy文件
远程服务器文件copy到本地:
Ps: 接收文件时,后面文件名可以为空,如:
本地文件copy到远程服务器
Ps:发送文件时,后面的文件名不能为空,如:
3.2 执行远程服务器上的命令并取返回值
在229上面执行222上的命令具体实例:
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
测试用例:
echo "是访问到这里来了";
$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
if (ssh2_auth_pubkey_file($connection, 'root',
'/root/.ssh/id_rsa.pub',
'/root/.ssh/id_rsa'))
{
echo "Public Key Authentication Successful\n";
//$flag=ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/');
//接收时,后面文件名可以为空
//$flag=ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
//发送时,后面的文件名不能为空
//echo $flag;
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
} else { // www.
echo ('Public Key Authentication Failed');
}
echo "<br/>";
$connection = ssh2_connect('192.168.6.222', 22);
ssh2_auth_password($connection, 'veno', '*******');
$tcmd="cd /home/veno/gateway/radiusclient;";
$tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
$stream = ssh2_exec($connection, $tcmd);
echo "<br/>";
echo "-----------------------------------------------";
stream_set_blocking($stream,true);
echo stream_get_contents($stream);
echo "-----------------------------------------------";
echo "<br/>";
本节内容:
php读取配置文件
1,配置文件格式:
# Main Configuration File
#
# it can be default or whatever language. Only greek are supported
# from non latin alphabet languages
# These attribute only apply for ldap not for sql
#
general_prefered_lang: el
general_prefered_lang_name: Greek
#
# Uncomment this if normal attributes (not the ;lang-xx ones) in ldap
# are utf8 encoded.
#
#general_decode_normal_attributes: yes
#
general_base_dir: /usr/local/dialup_admin
general_radiusd_base_dir: /usr/local/
general_domain: my.domain
2,读取配置文件的php代码,如下:
/**
* 读取配置文件
* by www.
*/
if (!isset()($config)){
$ARR=file("admin.conf");
foreach($ARR as $val) {
$val=chop($val);
if (ereg('^[[:space:]]*#',$val) || ereg('^[[:space:]]*$',$val))
continue;
list($key,$v)=split(":[[:space:]]*",$val,2);
if (preg_match("/%\{(.+)\}/",$v,$matches)){
$val=$config[$matches[1]];
$v=preg_replace("/%\{$matches[1]\}/",$val,$v);
}
$config["$key"]="$v";
}
echo "<pre>";
var_dump($config);
}