海运的博客

PHP简单加密解密函数

发布时间:December 3, 2013 // 分类:PHP // No Comments

<?php
   function url_base64_encode($string) {
      $data = base64_encode($string);
      $data = str_replace(array('+','/','='),array('-','_',''),$data);
      return $data;
   }

   function url_base64_decode($string) {
      $data = str_replace(array('-','_'),array('+','/'),$string);
      $mod4 = strlen($data) % 4;
      if ($mod4) {
         $data .= substr('====', $mod4);
      }
      return base64_decode($data);
   }

   function encrypt($key, $str) {   
      $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_DEV_URANDOM);
      $str_encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$str,MCRYPT_MODE_ECB,$iv);
      return trim(url_base64_encode($str_encrypt));   
   }   

   function decrypt($key, $str_encrypt) {   
      $str_encrypt = trim(url_base64_decode($str_encrypt));   
      $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_DEV_URANDOM);
      $str_decrypt = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,$str_encrypt,MCRYPT_MODE_ECB,$iv);
      return trim($str_decrypt);
   }
   echo encrypt('key','http://www.baidu.com////aaaa/bbbb/ccd//ddd')."\n";
   echo decrypt('key','zPsrxzCmqAAvlLwv4E7AlI346XTbaw1hAOoPZhtD3sKw__EIxmWpyHTEp4u2skGM')."\n";

?>

PHP获取域名所有MX A记录

发布时间:December 3, 2013 // 分类:PHP // No Comments

<?php
   if (getmxrr("qq.com", $mxhosts, $mxweights)) {

      foreach ($mxhosts as $host) {
         $hosts[] = dns_get_record($host, DNS_A);
      }
   }
   function getall_by_key(array $arr, $key){  
      if (!trim($key)) return false;  
      preg_match_all("/\"$key\";\w{1}:(?:\d+:|)(.*?);/", serialize($arr), $output);  
      return $output[1];  
   }  
   print_r(getall_by_key($hosts, 'ip'));  
?>

PHP多进程同时写文件

发布时间:December 1, 2013 // 分类:PHP // No Comments

使用系统提供的flock函数:

<?php
   function ffwrite($filename,$content) {
      $file = fopen("$filename","a");
      while(1) {
         if (flock($file,LOCK_EX))
         {
            fwrite($file,$content);
            flock($file,LOCK_UN);
            fclose($file);
            break;
            } else {
            usleep(1000);
         }
      }
   }
?>

或根据创建文件判断其它进程是否在写操作,性能略差,测试1000次20进程写操作慢3%。

<?php
 function _fwrite($filename, $content) {
     $filename_lock = $filename . '.lock';
     while(1)
     {
         if(file_exists($filename_lock))
            {
             usleep(1000);
             } else {
             touch($filename_lock); 
             $f = fopen($filename, 'a');
             fwrite($f, "$content");
             fclose($f);
             unlink($filename_lock);
             break;
             }       
         }
     if(file_exists($filename_lock))
        {
         unlink($filename_lock);
         }
     }
 ?>

PHP读取大文件指定行

发布时间:December 1, 2013 // 分类:PHP // No Comments

<?php
 function getFileLines($filename, $startLine = 1, $endLine = 50, $method = 'rb'){
     $content = array();
    
     if (version_compare(PHP_VERSION, '5.1.0', '>=')){ // 5.1版本之上使用Splfileobject
         $count = $endLine - $startLine;
         $fp = new SplFileObject($filename, $method);
         $fp -> seek($startLine - 1); // 转到$startLine行,seek方法从0开始计数
         for ($i = 0; $i <= $count; ++$i){
             $content[] = trim(($fp -> current()), "\n"); //current()方法取当前行清除换行保存到数组
             $fp -> next(); //循环下一行
             }
         }else{ // PHP<5.1
         $fp = fopen($filename, $method);
         if (!$fp)
             return 'error:can not read file';
         for ($i = 1; $i < $startLine; ++$i){ //定位到$startLine行
             fgets($fp);
            }
        
        for ($i; $i <= $endLine; ++$i){
             $content[] = fgets($fp); //从$startLine行开始循环读取到$endLine行
            }
        fclose($fp);
        }
    return array_filter($content); //返回array_filter(flase,null,0)过滤后的数组
    }
?>

示例:

<?php
$filename = 'file.txt';
$start = 1;
$end = 10;
$count = $end - $start;
while (true){
     $data = getFileLines($filename, $start, $end);
     // var_dump($data);
    $rev = ver($data);
     if($data[9] == ''){
         die("End");
         sleep(10);
        }
    $start = $start + 10;
    $end = $end + 10;
    }
?>

PHP计算脚本执行时间

发布时间:December 1, 2013 // 分类:PHP // No Comments

<?php
   $start = microtime ( true ); 
   sleep(2);
   $end = microtime ( true ); 
   echo "脚本执行时间".($end - $start)."\n";  
?>
分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...
归档