php strtok 与 strstr 比较

 更新时间:2016年11月25日 15:59  点击:1757

php strtok 与 strstr 比较
// 完整匹配中间的box 

04 echo strstr('aaaaaaaaaaaboaaaaaaaaaaaaboxcccccccccbcccccccccccccc','box')."n"; 

05 // 完整匹配中间的box 不因前而的b而停止 

06 echo strstr('aaaaaaAbaaa aaaa aaaaaaaaaboxccccccccccccboxccccccccccc','box')."n"; 

07 // 有两个关键字时, 遇到第一个停止. 

08 echo strstr('Subscrtibe our to free newsletter about New Freew to','to')."n"; 

09   

10 // 用strtok往回取 

11   

12 // 没有box冲突时, 截取是正常的. 

13 echo strtok('aaaaaaaaaaaaaaaaaaaaaaaboxccccccccccccccccccccccc','box')."n"; 

14 // 当前面有关键字中的任意一个字节时, 变态现象开始.注意看sb 及io那儿. 

15 echo strtok('aaaaaaAaaa aaaa aaaaa sb aaaacccccc iox iccccccccccccccccc','box')."n"; 

16 // 难理解吧, 你应该看到了our中的o在关键<SPAN class=t_tag onclick=tagshow(event) href="tag.php?name=%D7%D6%B7%FB">字符</SPAN>中.. 

17 echo strtok('Subscribe our free newsletter about New Freew','to'); 

18   

19 //事实证明,  strstr 是支持多字符串的, 而strtok在关键字符冲突时,仅支持单个字节截取.

php execel 导出xml 程序

<?php

class Excel_XML
{

  
    private $header = "<?xml version="1.0" encoding="UTF-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">";

    private $footer = "</Workbook>";

    private $lines = array ();

 
    private $worksheet_title = "Table1";

    private function addRow ($array)
    {

        // initialize all cells for this row
        $cells = "";

        // foreach key -> write value into cells
        foreach ($array as $k => $v):

            $cells .= "<Cell><Data ss:Type="String">" . utf8_encode($v) . "</Data></Cell>n";

        endforeach;

        // transform $cells content into one row
        $this->lines[] = "<Row>n" . $cells . "</Row>n";

    }

    public function addArray ($array)
    {

        // run through the array and add them into rows
        foreach ($array as $k => $v):
            $this->addRow ($v);
        endforeach;

    }


    public function setWorksheetTitle ($title)
    {

        // strip out special chars first
        $title = preg_replace ("/[|:|/|?|*|[|]]/", "", $title);

        // now cut it to the allowed length
        $title = substr ($title, 0, 31);

        // set title
        $this->worksheet_title = $title;

    }

    function generateXML ($filename)
    {

        // deliver header (as recommended in php manual)
        header("Content-Type: application/vnd.ms-excel; charset=UTF-8");
        header("Content-Disposition: inline; filename="" . $filename . ".xls"");

        // print out document to the browser
        // need to use stripslashes for the damn ">"
        echo stripslashes ($this->header);
        echo "n<Worksheet ss:Name="" . $this->worksheet_title . "">n<Table>n";
        echo "<Column ss:Index="1" ss:AutoFitWidth="0" ss:Width="110"/>n";
        echo implode ("n", $this->lines);
        echo "</Table>n</Worksheet>n";
        echo $this->footer;

    }

}

?>

实例

<?php

// include the php-excel class
require (dirname (__FILE__) . "/class-excel-xml.inc.php");

// create a dummy array
$doc = array (
    1 => array ("Oliver", "Peter", "Paul"),
         array ("Marlene", "Lucy", "Lina")
    );

// generate excel file
$xls = new Excel_XML;
$xls->addArray ( $doc );
$xls->generateXML ("mytest");

?>

php 常用的排序算法代码[冒泡,递归排序

冒泡排序算法
 function bubblesort($arr)
{
$n=count($arr);

for($i=0;$i<$n;$i++)
{
for($j=$i;$j<=$n-1;$j++)
{
if($arr[$i]>$arr[$j])
{
$temp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$temp;


}
}
}
return $arr;

}
 //直接插入排序
  function insertsort($arr)
  {
   $n=count($arr);
   for($i=1;$i<$n;++$i)
   {
    if($arr[$i]<$arr[$i-1])
      {
     $tmp=$arr[$i];
     $j=0;
       for($j=$i-1;$j>=0&&$tmp<$arr[$j];--$j)
         {
       $arr[$j+1]=$arr[$j];
       }
      $arr[$j+1]=$tmp;  
    }
    }
    return $arr;
  
   }简单排序算法
 
  function simplesort($arr)
  {
 $tmp=0;
 $t=0;
 $n=count($arr);
 for($i=0;$i<$n;++$i)
 {
    $t=$i;
    for($j=$i+1;$j<$n;++$j)
      {
    if($arr[$t]>$arr[$j])
      {
       $t=$j;
      
       }
    }
   $tmp=$arr[$i];
   $arr[$i]=$arr[$t];
   $arr[$t]=$tmp;
 
  }
   
    return $arr;
    }快速排序算法
function qsort($array)
{
$n=count($array);
if($n<=1){return $array;}

$key=$array[0];
$l=array();
$r=array();
//分别进行递归排序,然后合成一个数组
for($i=1;$i<$n;$i++)
{
if($array[$i]<=$key)
{
$l[]=$array[$i];
}
else
{
$r[]=$array[$i];
}
}
$l=qsort($l);
$r=qsort($r);
return array_merge($l,array($key),$r);

}

php 生成随机函数

function genRandomString($len)
{
        $chars = array(
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
        "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
        "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
        "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
        "3", "4", "5", "6", "7", "8", "9"
        );
        $charsLen = count($chars) - 1;
        shuffle($chars);
        $output = "";
        for ($i=0; $i<$len; $i++)
        {
            $output .= $chars[mt_rand(0, $charsLen)];
        }
        return $output;
}

还有一种是php 自带的mt_rand 与rand 哦,不过建意最好用mt_rand这个事速度上优与rand

php discuz chhome 图片上传swfupload功能
这上传与discuz来比, 还相差太远. 功能也欠缺.
  除了部分内置的url引向,我们改不了之外, 其它的数据都是可以修改的.
<?php
/*
 [UCenter Home] (C) 2007-2008 Comsenz Inc.
 $Id: do_swfupload.php 12830 2009-07-22 06:42:32Z zhengqingpeng $
*/

if(!defined('IN_UCHOME')) {  //入门牌.
 exit('Access Denied');
}

include_once(S_ROOT.'./source/function_cp.php');

$op = empty($_GET['op'])?'':$_GET['op'];  // uchome比较喜欢用的方法变量.
$isupload = empty($_GET['cam']) && empty($_GET['doodle']) ? true : false;  //是否上传.还有种可能是头像上传.
$iscamera = isset($_GET['cam']) ? true : false;  //判断一下是头像上传.
$isdoodle = isset($_GET['doodle']) ? true : false;  //判断一下是大头贴背景是否随机.
$fileurl = ''; // 默认赋值.
if(!empty($_POST['uid'])) {  //如果有uid传过来, 表示在上传头像, 就取得uid值.
 $_SGLOBAL['supe_uid'] = intval($_POST['uid']);    //强制转化.
 if(empty($_SGLOBAL['supe_uid']) || $_POST['hash'] != md5($_SGLOBAL['supe_uid'].UC_KEY)) {  // 既然传递了uid值是过来, 假如用户没有登录,及hash码不对应,就中断.
  exit();
 }
} elseif (empty($_SGLOBAL['supe_uid'])) {  //否则再判断, 如果没有登录, 禁止使用上传功能.
 showmessage('to_login', 'do.php?ac='.$_SCONFIG['login_action']);
}

if($op == "finish") {  //上传结束时.
 /* 它会传入如下GET
 array (
           'ac' => 'swfupload',
           'op' => 'finish',
           'albumid' => '2',
   )*/
 $albumid = intval($_GET['albumid']);  //取得分类id.
 $space = getspace($_SGLOBAL['supe_uid']); //更新用户部分记录, 比较图片总数, 容量计算.
 if(ckprivacy('upload', 1)) {  //判断一下是否已经写了推送.
  include_once(S_ROOT.'./source/function_feed.php');
  feed_publish($albumid, 'albumid');  //否则就再写一次.
 }
 //强行中断.
 exit();
} elseif($op == 'config') {  //swf上传的配置.
 /* 根据抓取所得 GET传过来:
         array (
           'ac' => 'swfupload',
           'op' => 'config',
 )
 */
 $hash = md5($_SGLOBAL['supe_uid'].UC_KEY); //生成一个hash码.
 
 if($isupload && !checkperm('allowupload')) {  //是上传图片,并且权限足够.对于配置来说, $isupload永远为假.
  $hash = '';
 } else {
  $filearr = $dirstr = array();  //初始化数组.  文件数组/及目录数据.

  if($iscamera) {  //进入头像上传工作.
   /*
    根据抓取, GET数据如下:
    array (
             'ac' => 'swfupload',
             'op' => 'config',
             'cam' => '1',
    )
   */
   $directory = sreaddir(S_ROOT.'./image/foreground'); //大头贴背景的目录. sreaddir读取里面的目录数据.
   foreach($directory as $key => $value) {   //每一个背景都是独立的一个目录, 所以循环一下.
    $dirstr = S_ROOT.'./image/foreground/'.$value;  //合成新的路径.
    if(is_dir($dirstr)) { //判断一下是否是目录.
     $filearr = sreaddir($dirstr, array('jpg','jpeg','gif','png')); //读取目录里面的图片文件.
     if(!empty($filearr)) {   // 如果图片数组不为空.
      if(is_file($dirstr.'/categories.txt')) {  // 如果categories.txt文件存在.
       $catfile = @file($dirstr.'/categories.txt');   //打开此文件.
       $dirarr[$key][0] = trim($catfile[0]);  //就将里面的文件读取来. 当然, 很无谓的方法, 里面的内容与目录名是一样的.
      } else {   //如果txt文件不存在, 就取得目录名.
       $dirarr[$key][0] = trim($value);  //准确取得值, trim多用.
      }
      $dirarr[$key][1] = trim('image/foreground/'.$value.'/');  //将指针1设置为当前大头贴背景目录.
      $dirarr[$key][2] = $filearr;  // //将指针2设置为当前大头贴背景目录里面的图片.
     }
    }
   }
  } elseif($isdoodle) { //如果是头像随机背景, 就读取./image/doodle/big里面的图片文件.
   $filearr = sreaddir(S_ROOT.'./image/doodle/big', array('jpg','jpeg','gif','png'));
  }
 }
 //接着就到了图片上传配置工作.
 $max = @ini_get(upload_max_filesize); //取得php.ini最大上传值.
 $unit = strtolower(substr($max, -1, 1));  //$max结尾有kb字样吧, 要截取一下,并且转成小写.
 
 //下面是针对不同的计算单元作换算.
 if($unit == 'k') {
  $max = intval($max)*1024;   //看样子是全部转成byt字节单位. KB X 1024 = 多少字节.
 } elseif($unit == 'm') {
  $max = intval($max)*1024*1024; // MB X 1024 X 1024 = 多少字节.
 } elseif($unit == 'g') {
  $max = intval($max)*1024*1024*1024;  // GB X 1024 X 1024 X 1024 = 多少字节.
 }
 //取得用户所建立的分类数组.
 $albums = getalbums($_SGLOBAL['supe_uid']);
 
} elseif($op == "screen" || $op == "doodle") {  // screen 不理解什么时候出来 || 随机大头贴背景,由于没有摄像头, 这里面略过.
 
 if(empty($GLOBALS['HTTP_RAW_POST_DATA'])) { 
  $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input");
 }
 $status = "failure";
 $dosave = true;
 
 if($op == "doodle") { 
  $query = $_SGLOBAL['db']->query('SELECT * FROM '.tname('usermagic')." WHERE uid = '$_SGLOBAL[supe_uid]' AND mid = 'doodle'");
  $value = $_SGLOBAL['db']->fetch_array($query);
  if(empty($value) || $value['count'] < 1) {//&ucirc;��Ϳѻ��
   $uploadfiles = -8;
   $dosave = false;
  }
 }
 

 if($dosave && !empty($GLOBALS['HTTP_RAW_POST_DATA'])) {
  $_SERVER['HTTP_ALBUMID'] = addslashes(siconv(urldecode($_SERVER['HTTP_ALBUMID']), $_SC['charset'], "UTF-8"));
  $from = false;
  if($op == 'screen') {
   $from = 'camera';
  } elseif($_GET['from'] == 'album') {
   $from = 'uploadimage';
  }
  $_SCONFIG['allowwatermark'] = 0; 
  $uploadfiles = stream_save($GLOBALS['HTTP_RAW_POST_DATA'], $_SERVER['HTTP_ALBUMID'], 'jpg', '', '', 0, $from);
 }
 
 $uploadResponse = true;
 $picid = $proid = $albumid = 0;
 if($uploadfiles && is_array($uploadfiles)) {
  $status = "success";
  $albumid = $uploadfiles['albumid'];
  $picid =  $uploadfiles['picid'];   
  if($op == "doodle") {   
   $fileurl = pic_get($uploadfiles['filepath'], $uploadfiles['thumb'], $uploadfiles['remote'], 0);
   include_once(S_ROOT.'./source/function_magic.php');
   magic_use('doodle', array(), 1);
  }
 } else {
  switch ($uploadfiles) {
   case -1:
    $uploadfiles = cplang('inadequate_capacity_space');
    break;
   case -2:
    $uploadfiles = cplang('only_allows_upload_file_types');
    break;
   case -4:
    $uploadfiles = cplang('ftp_upload_file_size');
    break;
   case -8:
    $uploadfiles = cplang('has_not_more_doodle');
    break;
   default:
    $uploadfiles = cplang('mobile_picture_temporary_failure');
    break;
  }
 }

} elseif($_FILES && $_POST) {   // 图片上传时,
 /* 根据抓取, POST GET数据值为:
 POST = array (
           'Filename' => 'MJP45+R3001.jpg',
           'proid' => '1',
           'albumid' => '2',
           'uid' => '1',
           'title' => 'MJP45+R3001',
           'hash' => '11ed07fe235ca5b9e509043e85419785',
           'Upload' => 'Submit Query',
 )
 
 GET = array (
          'ac' => 'swfupload',
 )
 
 */
 if($_FILES["Filedata"]['error']) { //如果有上传错误
  $uploadfiles = cplang('file_is_too_big'); // 就提示文件过大.
 } else {
  //考虑到编码及大小写问题, 还有转义. 取得上传文件名.
  $_FILES["Filedata"]['name'] = addslashes(siconv(urldecode($_FILES["Filedata"]['name']), $_SC['charset'], "UTF-8"));
  //考虑到编码及大小写问题, 还有转义. 取得上传分类id.
  $_POST['albumid'] = addslashes(siconv(urldecode($_POST['albumid']), $_SC['charset'], "UTF-8"));
  //考虑到编码及大小写问题, 还有转义. 取得上传文件后的一个详解路径.
  $uploadfiles = pic_save($_FILES["Filedata"], $_POST['albumid'], addslashes(siconv(urldecode($_POST['title']), $_SC['charset'], "UTF-8")));
 }
 
 //根据我的分析, 以下内容在图片上传时没用, 不知头像上传会否用到.
 $proid = $_POST['proid'];
 $uploadResponse = true;
 $albumid = 0;
 //判断一下上传文件, 及上传文件数组.
 if($uploadfiles && is_array($uploadfiles)) {
  $status = "success";  //上传完成
  $albumid = $uploadfiles['albumid'];  // 上传的分类id
 } else {
  $status = "failure"; //这就是上传失败了.
 }
 
 //这是我自己加上去的, 估计uchome也会感激我.
 exit();
}
// 时间
$newalbumname = sgmdate('Ymd');

//引入模板
include template("do_swfupload");

//输出xml, swf配置需要.
$outxml = "<?xml version="1.0" encoding="UTF-8"?>n";
$outxml .= siconv(ob_get_contents(), 'UTF-8');
obclean();
@header("Expires: -1");
@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
@header("Content-type: application/xml; charset=utf-8");
echo $outxml;

// 配置文件具体导出什么内容呢? 请访问这个网址.
//http://u.discuz.net/home/do.php?ac=swfupload&op=config
?>

[!--infotagslink--]

相关文章

  • Illustrator鼠绘堆雪人的孩童矢量插画教程

    今天小编在这里就来给各位Illustrator的这一款软件的使用者们来说说鼠绘堆雪人的孩童矢量插画的教程,各位想知道具体绘制方法的使用者们,那么各位就快来跟着小编来看看...2016-09-14
  • photoshop想象力无边界超现实合成图鉴赏

    今天小编在这里就为各位photoshop的这一款软件的使用者们带来了想象力无边界超现实合成图,各位想知道这些超现实的合成图都是些什么呢?那么下面各位就来跟着小编一起看...2016-09-14
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • DTO 实现 service 和 controller 之间值传递的操作

    这篇文章主要介绍了DTO 实现 service 和 controller 之间值传递的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • photoshop 如何取消保存作为副本

    下面给大家介绍三种取消保存为副本的方法,希望文章对你会带来帮助哦。 方法一:保存Jpg格式时,保存路径不要跟打开图片的路径一样(换个保存位置即可)就可以,jpg名称后面...2016-09-14
  • 基于python goto的正确用法说明

    这篇文章主要介绍了基于python goto的正确用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-06
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12