<?php
header("Content-type:text/html;charset=utf-8");


/**
* 程序说明:php记录所有post,get,cookie以及IP地址,来路,访问网址
* @author    yujianyue <admin@ewuyi.net>
* @homepage  http://12391.net
*/


//记录得到的
function slog($rr,$StrValue) {
  $logfile = fopen($rr,'a+');
  fwrite($logfile,"\r\n".$StrValue);
  fclose($logfile);
}

function arraforeach($arr) {
  static $str;
  static $keystr;
  if (!is_array($arr)) {
  return $arr;
  }
  foreach ($arr as $key => $val ) {
  $keystr=$keystr.$key;
  if (is_array($val)) {
  arraforeach($val);
  } else {
  $str[] = $val.$keystr;
  }
  }
  return implode($str);
}

function rlog($StrKey,$StrValue,$ArrReq,$method) {
  $StrValue=arraforeach($StrValue);
  return  "<tr><td>$method</td><td>$StrKey</td><td>$StrValue</td></tr>\r\n";
}

$linev = "<h1>".date('Y-m-d H:i:s')."</h1>\r\n";
$linev .= "<table>\r\n";

//逐个GET
  foreach($_GET as $key=>$value) {
$linev .= "\r\n".rlog($key,$value,$getfilter,"GET");
  }

//逐个POST
  foreach($_POST as $key=>$value) {
$linev .= "\r\n".rlog($key,$value,$postfilter,"POST");
  }

//逐个COOKIE
  foreach($_COOKIE as $key=>$value) {
$linev .= "\r\n".rlog($key,$value,$cookiefilter,"COOKIE");
  }

//尝试记录RAW等POST过来的xml,json数据
  $datainput = file_get_contents('php://input');
  if($datainput){
  $datainput=arraforeach($datainput);
$linev .= "\r\n".rlog("Input",$datainput,$datainput,"Input");
  }else{
  $datainput = $GLOBALS['HTTP_RAW_POST_DATA'];
  $datainput = arraforeach($datainput);
if($datainput) $linev .= "\r\n".rlog("Input",$datainput,$datainput,"RAW_POST");
  }

/*
$linev .=  "\r\n MYIP-=>".$_SERVER["REMOTE_ADDR"]."\r\n";
$linev .=  " From-=>".$_SERVER['HTTP_REFERER']."\r\n";
$linev .=  " Uurl-=>".$_SERVER["REQUEST_URI"]."\r\n";
$linev .=  " Agen-=>".$_SERVER['HTTP_USER_AGENT']."\r\n\r\n";
*/

$linev .=  "\r\n".rlog("From",$_SERVER['HTTP_REFERER'],$_SERVER['HTTP_REFERER'],"From");
$linev .=  "\r\n".rlog("Uurl",$_SERVER["REQUEST_URI"],$_SERVER["REQUEST_URI"],"Uurl");
$linev .=  "\r\n".rlog("MYIP",$_SERVER["REMOTE_ADDR"],$_SERVER["REMOTE_ADDR"],"MYIP");
$linev .=  "\r\n".rlog("Agen",$_SERVER['HTTP_USER_AGENT'],$_SERVER['HTTP_USER_AGENT'],"Agen");
$linev .=  "\r\n</table>\r\n";


$lines='<style type="text/css">table{border:1px solid #0180CF; margin:0 auto;font-size:12px;width:92%;}table td{border:1px solid #a2c6d3;padding:5px;word-wrap:break-word;word-break:break-all;}</style>';

$rr = './_12391.net_'.date('Y-m-d').'.html';//按天存放

if(!file_exists($rr)){
slog($rr,$lines);
}

slog($rr,$linev);
echo $lines;
echo $linev;


?>

PHP是否命令行执行 不指定

jed , 2018-3-14 11:13 , 代码编程 , 评论(0) , 阅读(18633) , Via 本站原创

<?php
function is_cli()
{
    return preg_match("/cli/i", php_sapi_name()) ? true : false;
}


<?php

function getRedis()
{
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    return $redis;
}

function getApiLimit($api, $default = '2000')
{
    //接口名称 = 每次请求ms间隔
    $info = [
        'user.info' => '500',
        'user.login' => '1000'
    ];
    return isset($info[$api]) ? $info[$api] : $default;
}

$api = isset($_GET['path']) ? $_GET['path'] : 'main';
$time = getApiLimit($api);
$key = "api_limit_" . $api;
$redis = getRedis();
$num = $redis->incr($key);
if($num == 1) {
    $redis->pExpire($key, $time);
} else {
    exit('api limit');
}
echo 'success';

PHP+Crontab执行定时任务 不指定

jed , 2018-3-14 10:40 , 服务器技术 , 评论(0) , 阅读(13133) , Via 本站原创
我们做web项目开发的,经常会需要定时备份数据,定时执行重启某个服务或者定时执行某个PHP程序等等,一般在Linux下使用Crontab,在Windows下使用计划任务。本文主要介绍Linux下使用Crontab基础知识以及执行PHP任务。

Crontab是一个Unix/Linux系统下的常用的定时执行工具,可以在无需人工干预的情况下运行指定作业。
最近在开发一个PHP程序时遇到了下面的错误:
PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted
错误信息显示允许的最大内存已经耗尽。遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个foreach循环语句在一个有4万条记录的表里全表搜索具有特定特征的数据,也就是说,一次要把4万条数据取出,然后逐条检查每天数据。可想而知,4万条数据全部加载到内存中,内存不爆才怪。
毕竟编程这么多年,我隐约记得PHP里提供有非一次全部加载数据的API,是像处理流媒体那样,随用随取随丢、数据并不会积累在内存的查询方法。经过简单的搜索,果然在官方网站上找到的正确的用法。
这个问题在PHP的官方网站上叫缓冲查询和非缓冲查询(Buffered and Unbuffered queries)。 PHP的查询缺省模式是缓冲模式。也就是说,查询数据结果会一次全部提取到内存里供PHP程序处理。这样给了PHP程序额外的功能,比如说,计算行数,将 指针指向某一行等。更重要的是程序可以对数据集反复进行二次查询和过滤等操作。但这种缓冲查询模式的缺陷就是消耗内存,也就是用空间换速度。
相对的,另外一种PHP查询模式是非缓冲查询,数据库服务器会一条一条的返回数据,而不是一次全部返回,这样的结果就是PHP程序消耗较少的内存,但却增加了数据库服务器的压力,因为数据库会一直等待PHP来取数据,一直到数据全部取完。
很显然,缓冲查询模式适用于小数据量查询,而非缓冲查询适应于大数据量查询。
对于PHP的缓冲模式查询大家都知道,下面列举的例子是如何执行非缓冲查询API。

威盾PHP加密专家解密算法 不指定

jed , 2018-3-14 10:34 , 代码编程 , 评论(0) , 阅读(10292) , Via 本站原创

<?php
/***********************************
*威盾PHP加密专家解密算法 By:Neeao
*http://Neeao.com
*2009-09-10
***********************************/

$filename="logincheck-hou.php";//要解密的文件
$lines = file($filename);//0,1,2行

//第一次base64解密
$content="";
if(preg_match("/O0O0000O0\('.*'\)/",$lines[1],$y))
{
    $content=str_replace("O0O0000O0('","",$y[0]);
    $content=str_replace("')","",$content);
    $content=base64_decode($content);
}


//第一次base64解密后的内容中查找密钥
$decode_key="";
if(preg_match("/\),'.*',/",$content,$k))
{
    $decode_key=str_replace("),'","",$k[0]);
    $decode_key=str_replace("',","",$decode_key);
}

//查找要截取字符串长度
$str_length="";
if(preg_match("/,\d*\),/",$content,$k))
{
    $str_length=str_replace("),","",$k[0]);
    $str_length=str_replace(",","",$str_length);
}
//截取文件加密后的密文
$Secret=substr($lines[2],$str_length);
//echo $Secret;

//直接还原密文输出
/*echo "<?php\n".base64_decode(strtr($Secret,$decode_key,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))."?>";
*/

file_put_contents("test.php", "<?php\n".base64_decode(strtr($Secret,$decode_key,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'))."?>" );

?>

PHP 生成数据字典 不指定

jed , 2018-3-14 10:20 , 代码编程 , 评论(0) , 阅读(10088) , Via 本站原创

<?php
/**
* 生成mysql数据字典
*/
header("Content-type: text/html; charset=utf-8");
//配置数据库
$dbserver   = "127.0.0.1";
$database   = "vuethink";
$user = 'root';
$password = 'root';
//其他配置
$dsn = "mysql:dbname=$database;host=$dbserver";


try {
    $pdo = new PDO($dsn, $user, $password);
    $pdo->exec('SET NAMES utf8');
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$table_result = $pdo->query('show tables')->fetchAll();

$no_show_table = array();    //不需要显示的表
$no_show_field = array();   //不需要显示的字段

//取得所有的表名
foreach ($table_result as $row) {
    if(!in_array($row[0],$no_show_table)){
        $tables[]['TABLE_NAME'] = $row[0];
    }
}


//替换所以表的表前缀
if(@$_GET['prefix']){
    $prefix = 'oa';
    foreach($tables as $key => $val){
        $tableName = $val['TABLE_NAME'];
        $string = explode('_',$tableName);
        if($string[0] != $prefix){  
            $string[0] = $prefix;  
            $newTableName = implode('_', $string);  
            mysqli_query('rename table '.$tableName.' TO '.$newTableName);  
        }
    }
    echo "替换成功!";exit();
}

//循环取得所有表的备注及表中列消息
foreach ($tables as $k=>$v) {
    $sql  = 'SELECT * FROM ';
    $sql .= 'INFORMATION_SCHEMA.TABLES ';
    $sql .= 'WHERE ';
    $sql .= "table_name = '{$v['TABLE_NAME']}'  AND table_schema = '{$database}'";
    $table_result = $pdo->query($sql)->fetchAll();
    foreach ($table_result as $t) {
        $tables[$k]['TABLE_COMMENT'] = $t['TABLE_COMMENT'];
    }
    

    $sql  = 'SELECT * FROM ';
    $sql .= 'INFORMATION_SCHEMA.COLUMNS ';
    $sql .= 'WHERE ';
    $sql .= "table_name = '{$v['TABLE_NAME']}' AND table_schema = '{$database}'";

    $fields = array();
    $field_result = $pdo->query($sql)->fetchAll();
    foreach ($field_result as $t) {
        $fields[] = $t;
    }
    $tables[$k]['COLUMN'] = $fields;
}



$html = '';
//循环所有表
foreach ($tables as $k=>$v) {
    $html .= '  <h3>' . ($k + 1) . '、' . $v['TABLE_COMMENT'] .'  ('. $v['TABLE_NAME']. ')</h3>'."\n";
    $html .= '  <table border="1" cellspacing="0" cellpadding="0" width="100%">'."\n";
    $html .= '      <tbody>'."\n";
    $html .= '          <tr>'."\n";
    $html .= '              <th>字段名</th>'."\n";
    $html .= '              <th>数据类型</th>'."\n";
    $html .= '              <th>默认值</th>'."\n";
    $html .= '              <th>允许非空</th>'."\n";
    $html .= '              <th>自动递增</th>'."\n";
    $html .= '              <th>备注</th>'."\n";
    $html .= '          </tr>'."\n";

    foreach ($v['COLUMN'] as $f) {
        if(@!is_array($no_show_field[$v['TABLE_NAME']])){
            $no_show_field[$v['TABLE_NAME']] = array();
        }
        if(!in_array($f['COLUMN_NAME'],$no_show_field[$v['TABLE_NAME']])){
            $html .= '          <tr>'."\n";
            $html .= '              <td class="c1">' . $f['COLUMN_NAME'] . '</td>'."\n";
            $html .= '              <td class="c2">' . $f['COLUMN_TYPE'] . '</td>'."\n";
            $html .= '              <td class="c3">' . $f['COLUMN_DEFAULT'] . '</td>'."\n";
            $html .= '              <td class="c4">' . $f['IS_NULLABLE'] . '</td>'."\n";
            $html .= '              <td class="c5">' . ($f['EXTRA']=='auto_increment'?'是':'&nbsp;') . '</td>'."\n";
            $html .= '              <td class="c6">' . $f['COLUMN_COMMENT'] . '</td>'."\n";
            $html .= '          </tr>'."\n";
        }
    }
    $html .= '      </tbody>'."\n";
    $html .= '  </table>'."\n";
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>数据库数据字典生成代码</title>
<meta name="generator" content="ThinkDb V1.0" />
<meta name="author" content="数据库数据字典生成代码" />
<style>
body, td, th { font-family: "微软雅黑"; font-size: 14px; }
.warp{margin:auto; width:900px;}
.warp h3{margin:0px; padding:0px; line-height:30px; margin-top:10px;}
table { border-collapse: collapse; border: 1px solid #CCC; background: #efefef; }
table th { text-align: left; font-weight: bold; height: 26px; line-height: 26px; font-size: 14px; text-align:center; border: 1px solid #CCC; padding:5px;}
table td { height: 20px; font-size: 14px; border: 1px solid #CCC; background-color: #fff; padding:5px;}
.c1 { width: 120px; }
.c2 { width: 120px; }
.c3 { width: 150px; }
.c4 { width: 80px; text-align:center;}
.c5 { width: 80px; text-align:center;}
.c6 { width: 270px; }
</style>
</head>
<body>
<div class="warp">
    <h1 style="text-align:center;">数据库数据字典</h1>
<?php echo $html; ?>
</div>
</body>
</html>

PHP文件操作类 不指定

jed , 2018-3-14 10:17 , 代码编程 , 评论(0) , 阅读(9477) , Via 本站原创
* FileUtil::createDir('a/1/2/3'); 测试建立文件夹 建一个a/1/2/3文件夹
* FileUtil::createFile('b/1/2/3'); 测试建立文件 在b/1/2/文件夹下面建一个3文件
* FileUtil::createFile('b/1/2/3.exe'); 测试建立文件 在b/1/2/文件夹下面建一个3.exe文件
* FileUtil::copyDir('b','d/e'); 测试复制文件夹 建立一个d/e文件夹,把b文件夹下的内容复制进去
* FileUtil::copyFile('b/1/2/3.exe','b/b/3.exe'); 测试复制文件 建立一个b/b文件夹,并把b/1/2文件夹中的3.exe文件复制进去
* FileUtil::moveDir('a/','b/c'); 测试移动文件夹 建立一个b/c文件夹,并把a文件夹下的内容移动进去,并删除a文件夹
* FileUtil::moveFile('b/1/2/3.exe','b/d/3.exe'); 测试移动文件 建立一个b/d文件夹,并把b/1/2中的3.exe移动进去
* FileUtil::unlinkFile('b/d/3.exe'); 测试删除文件 删除b/d/3.exe文件
* FileUtil::unlinkDir('d'); 测试删除文件夹 删除d文件夹

简单的PHP日志函数 不指定

jed , 2018-3-14 10:15 , 代码编程 , 评论(0) , 阅读(7597) , Via 本站原创
生成txt格式的日志文件

php程序获取客户端MAC地址 不指定

jed , 2018-3-14 10:12 , 代码编程 , 评论(0) , 阅读(5044) , Via 本站原创

<?php
class GetMacAddr{
var $return_array = array(); //
var $mac_addr;
function GetMacAddr($os_type){
switch ( strtolower($os_type) ){
case "linux":
$this->forLinux();
break;
case "solaris":
break;
case "unix":
break;
case "aix":
break;
default:
$this->forWindows();
break;
}
$temp_array = array();
foreach ( $this->return_array as $value ){
if (
preg_match("/[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f][:-]"."[0-9a-f][0-9a-f]/i",$value,
$temp_array ) ){
$this->mac_addr = $temp_array[0];
break;
}
}
unset($temp_array);
return $this->mac_addr;
}
function forWindows(){
@exec("ipconfig /all", $this->return_array);
if ( $this->return_array )
return $this->return_array;
else{
$ipconfig = $_SERVER["WINDIR"]."\system32\ipconfig.exe";
if ( is_file($ipconfig) )
@exec($ipconfig." /all", $this->return_array);
else
@exec($_SERVER["WINDIR"]."\system\ipconfig.exe /all", $this->return_array);
return $this->return_array;
}
}
function forLinux(){
@exec("ifconfig -a", $this->return_array);
return $this->return_array;
}
}
//·½·¨Ê¹ÓÃ
$mac = new GetMacAddr(PHP_OS);
echo $mac->mac_addr;
?>
分页: 2/4 第一页 上页 1 2 3 4 下页 最后页 [ 显示模式: 摘要 | 列表 ]