2015年11月

页面最大过期时间

  1. php.ini
//在php.ini 中设置,如30秒
max_execution_time = 30
  1. [代码]ini_set()函数
//虚拟主机,且服务器允许使用ini_set()函数,可在PHP代码中设置:
ini_set('max_execution_time',864000);

计算字符串的不同

//检测字符串相同的部分
function check_str($str1,$str2){
    static $str_length_flag=1000000000;
    static $flag=0;

    $tmp_str1=$str1;$tmp_str2=$str2;
    $strlen=utf8_strlen($str1);
    $str_temp='';
    for ($i=0; $i <$strlen ; $i++) {
        for ($j=utf8_strlen($str_temp)+1; $j <=$strlen-$i ; $j++) 
        {
            //$j=$str_temp?utf8_strlen($str_temp):$j;
            $str_1=mb_substr($str1, $i, $j, 'utf-8');
            $str_start=strpos($str2, $str_1);
            if (!($str_start===false)) {
                if(strlen($str_1)>strlen($str_temp)){
                    $str_temp=$str_1;
                    $ex_info=array(
                        'str1_left'=>$i,
                        'str1_right'=>$j,
                        'str2_left'=>$str_start,
                        'str2_right'=>$str_start+strlen($str_temp),
                    );
                }
                if(utf8_strlen($str_1)>=utf8_strlen($str1)||utf8_strlen($str_1)>$str_length_flag){
                    break 2;
                }
            }else{
                break;
            }
        }
    }
    if (!$flag) {
        $str_length_flag=utf8_strlen($str_temp);
        $flag=1;
    }
    $res_arr=array();
    if (isset($ex_info)) {
        $str1_left_str=mb_substr($str1, 0, $ex_info['str1_left'], 'utf-8');
        $str2_left_str=substr($str2,0,$ex_info['str2_left']);
        if ($str1_left_str&&$str2_left_str) {
            $strleft=check_str($str1_left_str,$str2_left_str);
            if ($strleft) {
                $res_arr=array_merge($res_arr,$strleft);
            }
        }
        if ($str_temp) 
        {
            $res_arr=array_merge($res_arr,array($str_temp));
        }


        $str1_right_str=mb_substr($str1, $ex_info['str1_left']+$ex_info['str1_right'], utf8_strlen($str1), 'utf-8');
        $str2_right_str=substr($str2,$ex_info['str2_right'],strlen($str2));
        if ($str1_right_str&&$str2_right_str) 
        {
            $strright=check_str($str1_right_str,$str2_right_str);
            if ($strright) {

                $res_arr=array_merge($res_arr,$strright);

            }
        }
    }
    return $res_arr;

}
//改变样式
function str_color($str1,$str2,$arr){
    foreach ($arr as $key => $value) {
        $start1=strpos($str1,$value);
        $str1=substr_replace($str1, '---$'.$key.'$', $start1,strlen($value));
        $start2=strpos($str2,$value);
        $str2=substr_replace($str2, '---', $start2,strlen($value));
    }
    $arr1_temp=explode('---', $str1);
    $arr2_temp=explode('---', $str2);
    $temp_arr=array();
    foreach ($arr1_temp as $key => $value) {
        $check=preg_replace('/^\$(\d+)\$$/', '', $value);
        if (strlen($check)&&strlen($arr2_temp[$key])) {
            $temp_arr[]='<del>'.$arr2_temp[$key].'</del>'.'<ins color="greed">'.$value.'</ins>';//修改
        }elseif(strlen($check)){
            $temp_arr[]='<ins color="greed">'.$value.'</ins>';//新加的
        }elseif(strlen($arr2_temp[$key])){
            $temp_arr[]='<del>'.$value.$arr2_temp[$key].'</del>';//删除的
        }else {
            $temp_arr[]=$value;
        }
    }
    $temp_arr=preg_replace_callback('/(.*)(\$(\d+)\$)(.*)/', function ($matchs) use($arr){
        return $arr[$matchs[3]].$matchs[1].$matchs[4];
    }, $temp_arr);
    return implode('', $temp_arr);
}
$str1='我叫小明';
        $str2='我的名字是小明';
        echo "
        <style>
ins{
text-decoration: none;
padding: 3px 0;
background:
 #EAF0DD;
color: #5B7918;
}
del{text-decoration: line-through;
padding: 3px 0;
background: #f5dfdf;
color: #ac1414;}
        </style>
        ";
        echo(str_color($str2,$str1,check_str($str1,$str2)));

php面试常见算法

一、常见字符串和文件操作

1、PHP翻转中文字符串

function reverse($str){
    $r = array();
    for($i=0; $i<mb_strlen($str); $i++){
        $r[] = mb_substr($str, $i, 1, 'UTF-8');
    }
    return implode(array_reverse($r));
}
echo reverse('www.phpha.com天涯PHP博客');
//结果:'客博PHP涯天moc.ahphp.wwww'

2、PHP计算URL的文件后缀名

function getext($url){
    $data = parse_url($url);
    $path = $data['path'];
    $info = pathinfo($path);
    return $info['extension'];
}
echo getext('http://blog.phpha.com/archives/1670.html?id=1670');

//结果:'html'
3、PHP计算两个文件的相对路径

function getrpath($path, $conpath){
    $pathArr = explode('/', $path);
    $conpathArr = explode('/', $conpath);
    $dismatchlen = 0;
    for($i=0; $i<count($pathArr); $i++){
        if($conpathArr[$i] != $pathArr[$i]){
            $dismatchlen = count($pathArr) - $i;
            $arrleft = array_slice($pathArr, $i);
            break;
        }
    }
    return str_repeat('../', $dismatchlen).implode('/', $arrleft);
}
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/5.php';
echo getrpath($a, $b);
//结果:'../../../c/d/e.php'

4、PHP遍历目录下的所有文件和文件夹

function finddir($dir){
    $files = array();
    if(is_dir($dir)){
        if($handle = opendir($dir)){
            while(($file = readdir($handle)) !== false){
                if($file != '.' && $file != '..'){
                    if(is_dir(rtrim($dir, '/').'/'.$file)){
                        $files[$file] = finddir(rtrim($dir, '/').'/'.$file);
                    }else{
                        $files[] = rtrim($dir, '/').'/'.$file;
                    }
                }
            }
            closedir($handle);
        }
    }
    return $files;
}
print_r(finddir('F:/Golang/src'));
//结果:
Array
(
    [0] => F:/Golang/src/hello.go
    [1] => F:/Golang/src/src.exe
    [test] => Array
        (
            [0] => F:/Golang/src/test/sss.txt
        )

)

二、常见算法的实现

1、冒泡排序

function bubble_sort($arr) {
    $n=count($arr);
    for($i=0;$i<$n-1;$i++){
        for($j=$i+1;$j<$n;$j++) {
            if($arr[$j]<$arr[$i]) {
                $temp=$arr[$i];
                $arr[$i]=$arr[$j];
                $arr[$j]=$temp;
            }
        }
    }
    return $arr;
}

2、归并排序

function Merge(&$arr, $left, $mid, $right) {
  $i = $left;
  $j = $mid + 1;
  $k = 0;
  $temp = array();
  while ($i <= $mid && $j <= $right)
  {
    if ($arr[$i] <= $arr[$j])
      $temp[$k++] = $arr[$i++];
    else
      $temp[$k++] = $arr[$j++];
  }
  while ($i <= $mid)
    $temp[$k++] = $arr[$i++];
  while ($j <= $right)
    $temp[$k++] = $arr[$j++];
  for ($i = $left, $j = 0; $i <= $right; $i++, $j++)
    $arr[$i] = $temp[$j];
}

function MergeSort(&$arr, $left, $right)
{
  if ($left < $right)
  {
    $mid = floor(($left + $right) / 2);
    MergeSort($arr, $left, $mid);
    MergeSort($arr, $mid + 1, $right);
    Merge($arr, $left, $mid, $right);
  }
}

3、二分查找-递归

function bin_search($arr,$low,$high,$value) {
    if($low>$high)
        return false;
    else {
        $mid=floor(($low+$high)/2);
        if($value==$arr[$mid])
            return $mid;
        elseif($value<$arr[$mid])
            return bin_search($arr,$low,$mid-1,$value);
        else
            return bin_search($arr,$mid+1,$high,$value);
    }
}

4、二分查找-非递归

function bin_search($arr,$low,$high,$value) {
    while($low<=$high) {
        $mid=floor(($low+$high)/2);
        if($value==$arr[$mid])
            return $mid;
        elseif($value<$arr[$mid])
            $high=$mid-1;
        else
            $low=$mid+1;
    }
    return false;
}

5、快速排序

function quick_sort($arr) {
    $n=count($arr);
    if($n<=1)
        return $arr;
    $key=$arr[0];
    $left_arr=array();
    $right_arr=array();
    for($i=1;$i<$n;$i++) {
        if($arr[$i]<=$key)
            $left_arr[]=$arr[$i];
        else
            $right_arr[]=$arr[$i];
    }
    $left_arr=quick_sort($left_arr);
    $right_arr=quick_sort($right_arr);
    return array_merge($left_arr,array($key),$right_arr);
}

6、选择排序

function select_sort($arr) {
    $n=count($arr);
    for($i=0;$i<$n;$i++) {
        $k=$i;
        for($j=$i+1;$j<$n;$j++) {
           if($arr[$j]<$arr[$k])
               $k=$j;
        }
        if($k!=$i) {
            $temp=$arr[$i];
            $arr[$i]=$arr[$k];
            $arr[$k]=$temp;
        }
    }
    return $arr;
}

7、插入排序

function insertSort($arr) {
    $n=count($arr);
    for($i=1;$i<$n;$i++) {
        $tmp=$arr[$i];
        $j=$i-1;
        while($arr[$j]>$tmp) {
            $arr[$j+1]=$arr[$j];
            $arr[$j]=$tmp;
            $j--;
            if($j<0)
                break;
        }
    }
    return $arr;
}

转载自:http://blog.92fenxiang.com/articles/1429003471

git使用记录

最近在写一些代码的时候,发现在公司和住的地方,同步很不方便,老是用U盘很麻烦,于是就想使用下git,于是开始看看git怎么用,遇到的一些问题,记录下
1.安装git,百度一下就可以了
2.配置下用户信息

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

3.初始化仓库,在某个目录下,初始化之后就可以用git管理目录下的文件了

$ git init
Initialized empty Git repository in f:/GitTest/.git/

4.新加文件并提交到版本库

$ echo "hahahah" > test.txt

$ git add test.txt

$ git commit -a -m "1"

5.删除文件

$ git rm test.txt
rm 'test.txt'

$ git commit -a -m "2 rm"
[master 47e19d1] 2 rm
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

6.远程服务器,丢弃本地所有修改,完全和远程一样(本地和远程的不一样导致的错误,例如下面,这个本地的版本库我在添加远程之前,是有做过一些操作的,然后把远程pull到本地的时候,就报错了,如果本地的东西可以放弃掉不要的话,可以使用下面的策略)

$ git remote add origin git@github.com:scchary/Test1.git

$ git pull origin
warning: no common commits
remote: Counting objects: 81, done.
remote: Compressing objects: 100% (44/44), done.
remote: Total 81 (delta 7), reused 79 (delta 5), pack-reused 0
Unpacking objects: 100% (81/81), done.
From github.com:scchary/Test1
 * [new branch]      master     -> origin/master
You asked to pull from the remote 'origin', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.

$ git fetch origin

$ git reset --hard origin/master

7.本地版本回溯之后再push到远程的时候报错,

$ echo "test" >> t3.txt

$ git add t3.txt

$ git commit -a -m "test add file"
[master 4428651] test add file
warning: LF will be replaced by CRLF in t3.txt.
The file will have its original line endings in your working directory.
 1 file changed, 1 insertion(+)
 create mode 100644 t3.txt

$ git push origin master   #新创建了一个文件,并提交push到远程,这是远程就是在新的版本库了
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 263 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:scchary/Test1.git
   b3677f6..4428651  master -> master

$ git reflog
4428651 HEAD@{0}: commit: test add file
b3677f6 HEAD@{1}: commit: test
2620363 HEAD@{2}: reset: moving to origin/master
47e19d1 HEAD@{3}: commit: 2 rm
821154b HEAD@{4}: commit (initial): 1

$ git reset --hard b3677f6 #版本回溯
HEAD is now at b3677f6 test

$ ls
t1.txt  t2.txt  test.txt  testA.txt  #添加的t3文件确实不见了


$ git push origin  master   #push到远程的时候报错,因为现在本地比远程的版本旧,所以要先pull
To git@github.com:scchary/Test1.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:scchary/Test1.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

#如果是想把远程上面的也回溯到现在这个版本,可以直接用下面的命令
$ git push -f origin master
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:scchary/Test1.git
 + 4428651...b3677f6 master -> master (forced update)

8.忽略掉已经添加版本库的文件,git可以在.gitignore文件里面设置忽略的文件,比如

$ cat .gitignore
test.txt

上面就把test.txt文件夹忽略掉了,之后这个文件的更改git是不会管的,但是这个如果在设置.gitignore之前,test.txt就已经加入到了git,那么这个设置是无效的,可以利用这个命令来设置,

jin@JIN /f/GitTest (master)
$ git rm --cached test.txt