浏览模式: 标准 | 列表

    <?= 和<?php 的区别

    发布时间:2015-10-14, 11:40:19 | 评论:3 | 分类:PHP

    <?=$var?> <?php echo $var; ?>
    Run code
    Cut to clipboard


      一种缩写形式,需要short_open_tag,不推荐使用

      301重定向PHP代码 PHP的301自动跳转代码

      发布时间:2015-10-14, 14:35:24 | 评论:1 | 分类:PHP

      <?php $the_host = $_SERVER['HTTP_HOST'];//取得当前域名 $the_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';//判断地址后面部分 //$the_url = strtolower($the_url);//将英文字母转成小写 if($the_url=="/index.php")//判断是不是首页 { $the_url="";//如果是首页,赋值为空 } if($the_host !== 'www.lizhenqiu.com')//如果域名不是带www的网址那么进行下面的301跳转 { header('HTTP/1.1 301 Moved Permanently');//发出301头部 header('Location:http://www.lizhenqiu.com'.$the_url);//跳转到带www的网址 //header后的PHP代码还会被执行 .确保重定向后,后续代码不会被执行 exit; }
      Run code
      Cut to clipboard

        PHP分页代码

        发布时间:2015-10-14, 14:36:45 | 评论:0 | 分类:PHP

        <?php include("connection.php"); $perNumber=10; //每页显示的记录数 $page=$_GET['page']; //获得当前的页面值 $count=mysql_query("select count(*) from user"); //获得记录总数 $rs=mysql_fetch_array($count); $totalNumber=$rs[0]; $totalPage=ceil($totalNumber/$perNumber); //计算出总页数 if (!isset($page)) { &#160;$page=1; } //如果没有值,则赋值1 $startCount=($page-1)*$perNumber; //分页开始,根据此方法计算出开始的记录 $result=mysql_query("select * from user limit $startCount,$perNumber"); //根据前面的计算出开始的记录和记录数 while ($row=mysql_fetch_array($result)) { &#160;echo "user_id:".$row[0]."<br-->"; &#160;echo "username:".$row[1]."<br>"; //显示数据库的内容 } if ($page != 1) { //页数不等于1 ?> <a href="fenye.php?page=<?php echo $page - 1;?>">上一页</a> <!--显示上一页--> <?php } for ($i=1;$i<=$totalPage;$i++) {&#160; //循环显示出页面 ?> <a href="fenye.php?page=<?php echo $i;?>"><?php echo $i ;?></a> <?php } if ($page<$totalPage) { //如果page小于总页数,显示下一页链接 ?> <a href="fenye.php?page=<?php echo $page + 1;?>">下一页</a> <?php } ?>
        Run code
        Cut to clipboard

          php获取客户端外网ip

          发布时间:2015-10-14, 14:37:33 | 评论:0 | 分类:PHP

          function getip(){ if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $cip = $_SERVER["HTTP_CLIENT_IP"]; } else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){ $cip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if(!empty($_SERVER["REMOTE_ADDR"])){ $cip = $_SERVER["REMOTE_ADDR"]; } else{ $cip = ''; } preg_match("/[\d\.]{7,15}/", $cip, $cips); $cip = isset($cips[0]) ? $cips[0] : 'unknown'; unset($cips); return $cip; }
          Run code
          Cut to clipboard

            php class类的用法详细总结

            发布时间:2015-10-14, 15:12:10 | 评论:0 | 分类:PHP

            一:结构和调用(实例化):
            class className{} ,调用:$obj = new className();当类有构造函数时,还应传入参数。如$obj = new className($v,$v2…);
            二:构造函数和析构函数:
            1、构造函数用于初始化:使用__construct(),可带参数。
            2、但析构函数不能带参数(用于在销去一个类之前执行一些操作或功能)。析构函数用__destruct()做名称。在脚本执行结束时,会销掉内存中的对象,因此可不用析造函数,但有些比如COOKIE等,就应当要用此函数销掉。
            知识点:在PHP4中也提供了构造函数,但使用的是与类同名的类方法,在PHP5仍能兼容这种做法,当一个类中没有包含__construct时,会查找与类同名的方法,如果找到,就认为是构造函数,如下:
            class test { var $b; function test() { $this->b=5; } function addab($c) { return $this->b+$c; } } $a = new test(); echo $a->addab(4); // 返回 9
            Run code
            Cut to clipboard

              3、PHP不会自动调用父类的构造函数(不支持构造函数重载),必须使用parent关键字显式地调用。
              class employee{ function __construct()…. } class Manager extents Employee{ function __construct(){ parent::_construct(); echo ‘这个子类的父类构造函数调用了!'; } }
              Run code
              Cut to clipboard

                当然也可以调用与该实例没有任何关系的其它类的构造函数。只需在__construct()前加上类名即可。如:
                otherClassName::__construct();
                类的主家庭成员:属性、方法、常量、静态成员
                三、类的属性:
                有两种方法对类的属性赋值或取值。
                1、使用公共作用域public关键词。
                2、使用__set()和__get()来分别赋值和取值,前者称为设置方法(setter)或修改方法(mutator),后者称为访问方法(accessor)或获取方法(getter)。建议使用这种方法:优点:
                A、可在__set()统一进行数据验证。
                B、便于统一管理属性。
                注意:
                第一:__set()和__get()只对私有属性起作用,对于用public定义的属性,它们两个都懒理搭理,如下:
                class test{ protected $a=9,$b=2,$c; public $d; function __set($n,$v) { $this->$n = $v+2; } function __get($name) { return $this->$name+2; } } $a = new test(); $a->b =5; echo “<br />”; echo $a->b;
                Run code
                Cut to clipboard

                  实例只对$a,$b,$c的设置会经过__set和__get过滤与返回,对于$d,就不会起作用。如$a->d=5,再返回还是5。
                  第二:__set($n,$v)要带两个参数。而__get($n)只能有一个参数。实例:
                  class test{ private $a=5,$b=6,$c; function __set($n,$v) { if($n=='a'&&$n>0) $this->$n = $v; else $this->$n = $v+2; } function __get($name) { return $this->$name; //如果改为return $this->$name + $this->addab(); 如调用a的值,实际返回的是a+a+b的值。默认为5+5+6=16。 } function addab() { return $this->a + $this->b; } } $e=new test(); $e->a = 11; //注意写法:类的内部用$this->$n即变量的写法,但外部实例要用$e->a的方式。 $e->b = 12; //get 14 $e->k = 22;
                  Run code
                  Cut to clipboard

                    类的属性可自由扩展,如上例的k,不管是否用__set,当一个实例建立起来后,可以用$e->newProperty = xx;直接来创造一个属性,但不建议这么做。
                    四、类的方法:
                    理解成类当中的函数即可。
                    调用:
                    1、内部调用:可使用$this->Fanname();或$this->addab()或test::addab();
                    2、实例化调用时,用$e->addab();即可。对于在该方法中没有使用$this关键字的,如上例中的:
                    function addab() { return $this->a+$this->b; }
                    改为: function addab() { return 25; }那在在外部实例调用该方法,也可用“$e::addab();”或“test::addab();”
                    五、类的常量:
                    如果类的属性理解成类中的变量,那么类的常量和变量是不一样的,其定义方法为:
                    class test{ private $a; const PI = '3.14′; ….. //在类中调用上面的常量用两种方法,“$this::PI”,或 “类名::PI”,这里就是test::PI,如下: function getvalue(){ return $this->a * $this::PI; //或$this->a * test::PI,用this关键字或类名均可,但都要用双冒号。 } } $e= new test(); $e->PI =5; //注意,这里用 ->只是创造了一个也是名为PI的属性,而不是改变类中的PI常量的值。 echo $e::PI; //这个才是调用类的常量。
                    Run code
                    Cut to clipboard

                      常量只能用双冒号::来调用。并且不能更改其值。
                      在类外部实例化后调用类常量同样也有两种方法。方法为:
                      “$e::PI” 或 “test::PI”,共同点是都要用冒号,不同点是外部不能用this关键字,只能用实例名,但类名::PI是通用的。
                      六、类的静态成员(静态属性或静态方法):
                      如果需要创建供所有类的实例共享的字段或方法。就得用静态成员。有两个特征:
                      1、静态成员是共产主义者,它让脚本上的所有该类的实例调用,但不能借助类的特定实例名调用,而是在类的外部,统一使用“类名::$成员名”的方式调用。而类的内部则统一使用 “self::$成员名”来调用。
                      2、当每一次新创建实例时,静态成员会从上次创建的实例最后值开始重新计算,而不是类中初始的值开始计算。
                      3、对于用public定义的静态成员,可以在外部更改它的值。private等则不行。
                      class test{ public static $v = 0; function __construct(){ self::$v++; } static function getV(){ return self::$v; } } $a = new test(); echo test::getV(); // 返回 1 $b = new test(); echo test::getV(); // 返回 2 test::$v=8; //由于public定义的成员,改变静态成员的值。 $c = new test(); echo test::getV(); // 返回 9
                      Run code
                      Cut to clipboard

                        七、关键字:
                        (一)this关键字:用于类的内部指代类的本身。来访问属性或方法或常量,如$this->属性名或方法名。$this::常量名。this还可以用在该类的子类中,来指代本身的属性或方法。
                        (二)双冒号“::”关键字:用于调用常量、静态成员。
                        (三)self关键字:在类的内部与双冒号配合调用静态成员,如 self::$staticVar.,在类的内部,不能用$this来调用静态成员。
                        (四)__toString():在类中使用__toString(),用于将类转成字串并打印类,用处不大:如:
                        class test{ public $p; public function __toString(){ return var_export($this,TRUE); } } $a=new test(); echo $a; //输出:test::__set_state(array( ‘p' => NULL, )),或写成:echo $a->__toString();
                        Run code
                        Cut to clipboard

                          (五)__clone() :当克隆对象时,这个关键字才会发生作用,用于更改克隆时某些值。
                          (六)__call():方法重载,参下面示例:
                          class cB{ function __call($method,$n){ if($method=='showVarType'){ if(is_numeric($n[0])){ //不能用$n。要用$n[0]; $this->displayNum(); }else if (is_array($n[0])){ $this->displayArr(); }else{ $this->displayOther(); } } } function displayNum() { echo ‘<h3>这是数字!</h3>'; } function displayArr() { echo ‘<h3>这是数组!</h3>'; } function displayOther() { echo ‘<h3>不是数组也不是数字!</h3>'; } } $x='a'; $y=array(‘a','b'); $b=new cB; $b->showVarType($x); //不是数组也不是数字 $b->showVarType($y); //这是数组
                          Run code
                          Cut to clipboard

                            注意,不能在类中定义showVarType()方法,否则代码不能用。
                            (七)extends:继承: 如class a{} class b extends a{} 类b继承了类a
                            附:记忆:以后统一在调用方法或属性时用 “-> “,调用常量则用双冒号“::”,不会搞晕。
                            八、方法和属性的作用域:
                            共有6种:public(默认,可省略,也等同于php6的var声明),private(私有,也不能由子类使用),protected(私有,但可由子类使用) ,abstract(抽象,参下文),final(阻止在子类中覆盖—也称重载,阻止被继承,用于修饰类名及方法,如final class test{ final function fun(){}} ,但不能用于属性),static(静态)
                            九:抽象类和抽象方法(abstract——注意:没有所谓抽象属性):
                            抽象可以理解成父类为子类定义了一个模板或基类。作用域abstract只在父类中声明,但在子类中实现。注意事项:
                            1、抽象类不能被实例化,只能被子类(具体类)继承后实现。
                            2、抽象类必须在其子类中实现该抽象类的所有抽象方法。否则会出错。
                            3、在抽象方法中,只是声明,但不能具体实现:如abstract function gettow(){ return $this->p; }是错的,只能声明这个方法:abstract function gettow();(连方括号{}都不要出现),抽象方法和抽象类主要用于复杂的类层次关系中。该层次关系需要确保每一个子类都包含并重载了某些特定的方法。这也可以通过接口实现
                            4、属性不能被命名为抽象属性,如abstract $p = 5是错的。
                            5、只有声明为抽象的类可以声明抽象方法,但如果方法声明为抽象,就不能具体实现。如:
                            abstract class Employee { abstract function a(…); abstract function b(…); }
                            Run code
                            Cut to clipboard

                              以后再对这个父类扩展,组成各种子类(如经理,员工,出纳)。
                              6、抽象类中,如果要实现具体的方法,不能声明为抽象。这样可能实际意义更大。可以把几个类库中共同的部分提取到抽象类中,其它的类继承抽象类即可。如下:
                              abstract class BaseShop{ Const TAX=0.06; // 在抽象类中定义常量 public function buy($gid) { // 如果定义为抽象方法abstract function buy()就不能在这里实现主体。 echo(‘你购买了ID为 :'.$gid.'的商品'); } public function sell($gid) { echo(‘你卖了ID为 :'.$gid.'的商品'); } public function view($gid) { echo(‘你查看了ID为 :'.$gid.'的商品'); } } class BallShop extends BaseShop{ var $itme_id = null; public function __construct() { $this->itme_id = 2314; } public function open() { $this->sell($this->itme_id); } public function getTax() { echo printf(‘<h3>平均税率是 %d%%。</h3>',$this::TAX*100); } } $s = new BallShop; $s->open(); //你卖了ID为 :2314的商品 $shop->getTax();
                              Run code
                              Cut to clipboard

                                十:类型提示:
                                注意,类型提示功能只能用于参数为对象的提示,而无法用于为整数,字串,浮点等类型提示。有些类的方法需要传入的参数为所期望的对象类型,可以用下面的方法达到强制实施此替则。要达到类型提示,只要在方法的对象型参数前加一个已存在的类的名称,如:function funname(OtherClassName $otherclassINSName,$c….),注意,OtherClassName必须是存在的类。如下:
                                class em{ var $k=56; } class test{ function __construct() { echo $this->addab(new em(),2); } function addab(em $j,$c) //这个方法,即可以在内部调用,也可以在外部调用。只要作用域许可。 { return $j->k+$c; } } $a = new test(); $b = new em(); echo $a->addab($b,2); //或 $a->addab(new em(),2);
                                Run code
                                Cut to clipboard

                                  十一、类的管理:
                                  1、instanceof关键字:用于分析一个对象是否是某一个类的实例或子类或是实现了某个特定的接口:如下例,但要注意: 类名没有任何引号等定界符,否则会出错。如test不能用'test'
                                  class test2{} class test{} class testChilern Extends test{} $a = new test2(); $m = new test(); $i = ($m instanceof test); if($i)echo ‘$m是类test的实例!<br />'; // get this value switch ($a instanceof test){ case true : echo ‘YES<br />'; break; case false : echo ‘No<br />'; //get this value break; } $d=new testChilern(); if($d instanceof test)echo ‘$d是类test的子类!<br />'; // get this value
                                  Run code
                                  Cut to clipboard

                                    2、确定类是否存在:boolean class_exists(string class_name): class_exists(‘test');
                                    3、返回类名:string get_class(object),成功时返回实例的类名,失败则返回FALSE:
                                    $a = new test2(); echo get_class($a); //返回 test2
                                    4、了解类的公用属性:array get_class_vars(‘className') ,返回关键数组:包含所有定义的public属性名及其相应的值。这个函数不能用实例名做变量
                                    5、返回类方法:get_class_methods(‘test'); //或: get_class_methods($a);可用实例名做参数,返回包括构造函数在内的所有非私有方法。
                                    6、print_r(get_declared_classes())了解当前PHP版本中所有的类名。PHP5有149个。
                                    7、get_object_vars($a)返回实例中所有公用的属性及其值的关联数组。注意它和get_class_vars()的区别:
                                    /* (1) get_object_vars($a)是用实例名做参数,而get_class_vars(‘test')是用类名做参数。
                                    * (2) get_object_vars($a)获得的属性值是实例运行后的值,而get_class_vars(‘test')获得的属性值是类中的初始定义。
                                    * (3) 两者均返回关联数组,且均对未赋值的属性返回NULL的值。如类test中有定义了public $q;则返回Array ( [v] => 5 [q]=>) ,
                                    */
                                    8、返回父类的名称:get_parent_class($b);//或get_parent_class(‘test2′); 返回test
                                    9、确定接口是否存在:boolean interface_exists($string interface[,boolean autoload])
                                    10、确定对象类型: boolean is_a($obj,'className'),当$obj属于CLASSNAME类时,或属于其子类时,返回TRUE,如果$obj与class类型无关则返回FALSE。如:is_a($a,'test')
                                    11、确定是否是某类的子对象:当$b是继承自TEST类时,返回TRUE,否则FALSE。boolean is_subclass_of($b,'test');
                                    12、确定类或实例中,是否存在某方法。method_exists($a,'getv') //或用method_exists(‘test','getv'),此函数适用于非public定义的作用域的方法。
                                    以上函数实例:
                                    class test{ public $v=2; private $c=5; function __construct(){ $this->v=5; } private function getv(){ return $this->v; } } class test2 extends test{} $a=new test(); $b=new test2(); print_r( get_class_methods(‘test')); //或:print_r( get_class_methods($a)); 均返回:Array ( [0] => __construct [1] => getv ) echo ‘<br />'; print_r( get_class_vars(‘test')); //返回:Array ( [v] => 2 ),和上面不一样,不能用print_r( get_class_methods($a)); echo ‘<br />'; echo get_parent_class($b);//或get_parent_class(‘test2′); 返回test echo ‘<br />'; echo is_a($b,'test');// 返回1 echo ‘<br />'; if(is_subclass_of(‘test2′,'test'))echo ‘是子类!'; //或(is_subclass_of($b,'test')),返回1,当参数1为$a时则返回false, echo ‘<br />'; echo method_exists($a,'getv') //或用method_exists(‘test','getv')返回1,本函数也适用于用private等定义域的方法。
                                    Run code
                                    Cut to clipboard

                                      十一、自动加载类库文件:
                                      当类多了以后,比如要在一个文件中载入3个类库文件:a.class.php,b.class.php,c.class.php要用三个require_once(‘classes/a.class.php);
                                      require_once(‘classes/b.class.php);
                                      require_once(‘classes/c.class.php);
                                      可以用PHP5自动加载的功能来处理:在全局应用配置文件中,定义一个特殊的函数__autoload($class)函数(__autoload并不是一个类的方法,只是单独的函数,和类没有关系):
                                      function __autoload($class){
                                      require_once(“classes/$class)
                                      }
                                      该函数放哪没有关系,在创建类实例时,也不必去调用这个autoload函数。PHP会自动完成。但务必注意一点:“在调用页面上创建实例所使用的类名称”、和“被调用的文件名”、以及“该文件中的类的名称”3个必须是一样的。这样就不需要去调用__autoload();如果不一样则必须单独调用__autoload(‘c');并给它一个文件名前缀。如:
                                      c.class.php文件的代码是:
                                      < ?php class c{ public $m=7; } ?>
                                      Run code
                                      Cut to clipboard

                                        这里代码的类名称是c,而文件名也是c,
                                        现在要在index.php调用:
                                        < ?php function __autoload($class){ require_once “$class.class.php”; } $m = new c(); //创建实例调用的类也是c echo $m->m; ?>
                                        Run code
                                        Cut to clipboard

                                          此时PHP会自动调用根目录下的c.class.php中的类C。
                                          但如果c.class.php中的代码是:
                                          < ?php class mm{ public $m=7; } ?>
                                          Run code
                                          Cut to clipboard

                                            而调用页index.php代码是:
                                            < ?php function __autoload($class){ require_once “$class.class.php”; } # __autoload(‘c'); //如果不加这一行就会出错。 $m = new mm(); echo $m->m; ?>
                                            Run code
                                            Cut to clipboard

                                              会出错,提示找不到mm.class.php文件。这时可以加一行__autoload(‘c');但这样就达不到简化代码的目的。
                                              类的家族化扩展:类的高级功能:
                                              一、对象克隆:
                                              当克隆一个对象的实例时,其属性初始值继承了被克隆对象的当前值。
                                              class test { public $p=5; function __clone(){ //只在克隆发生时起作用。用于改变在克隆时某些值 $this->p=15; } } $a=new test(); echo $a->p; $a->p=8; //如果没有__clone()方法影响,$b的P值将为8 $b = clone $a; echo $b->p; //15
                                              Run code
                                              Cut to clipboard

                                                二、对象继承:
                                                没有被声明为final的类可以被继承,没有被final和private界定的方法也可以继承,没有被private界定的属性也可以继承。当子类继承了父类或超类后,可以直接使用父类或超类(祖父类以及祖父的祖父)的所有允许的方法,属性。
                                                关键:理解构造函数和重载在继承中的特性!
                                                (一)构造函数在继承中的特性:
                                                1、当父类有构造函数而子类没有:则子类会在实例化时会自动执行父类的构造函数。这时如果要创建子类的实例,需要引入父类构造函数中所需的参数,否则出错。即使是“子类的子类”如果没有构造函数,也要在创建实例时输入其父类的父类的构造函数所需参数。PHP会从实例所在的子类会向上搜索合造的构造函数,一旦找到就停止,使用该构造函数。而不会再向上搜索,因此:子类本身如果没有构造函数,则以其最靠近的一个超类并且有构造函数的为准。
                                                class cA{ public $name,$age; function __construct($n) { $this->name = $n; $this->age = 25; } function __set($n,$v) { $this->$n = $v; } function __get($n) { return $this->$n; } } class cB extends cA{ function funB1() { echo ‘<h3>Class cB execute success!</h3>'; } } class cC extends cB { function funC1() { echo ‘<h3>Class cC FunC1!</h3>'; } } $b=new cB(‘Jack'); $b->name='John'; echo “$b->name : $b->age”; $b->funB1(); $c=new cC(); //这里会出错,由于cB也没有构造函数,因此再向上以cA为准,需要一个参数。改为$c=new cC(‘David');即可。 echo $c->name(); //David
                                                Run code
                                                Cut to clipboard

                                                  2、当子类也有构造函数时:这时,不管父类是否有构造函数,都会执行子类自己的构造函数。
                                                  如上:
                                                  class cB extends cA{ function __construct() { echo ‘<h3>this is Class cB \'s __construct!</h3>'; } function funB1() { echo ‘<h3>Class cB execute success!</h3>'; } }
                                                  Run code
                                                  Cut to clipboard

                                                    现在类CB有自己的构造函数时,这时创建实例$b=new cB(‘Jack');参数JACK不会起作用,因为父类CA的构造函数没有得到执行。因此$b->name和$->age就不会初始化值。需要另外赋值$b->name='Jack',$b->age=25;
                                                    如果这时要执行父类CA的构造函数,可以这样:
                                                    function __construct($n) { parent::__construct($n); // 或:cA::__construct($n); echo ‘<h3>this is Class cB \'s __construct!</h3>'; }
                                                    Run code
                                                    Cut to clipboard

                                                      由于parent::__construct($n); 只会向上搜索父类的构造函数,一找到就停止且执行当前找到的构造函数,因此在上面例子中,如果parent::__construct($n)是用在最后一层的类cC中,并且类CB,CA都有构造函数,那么cC的实例只会执行cB的构造函数。不会执行cA。这时,如果CC的实例想都调用CA和CB的构造函数,有两种方法:
                                                      A、在CB中也加入parent::__construct($n)
                                                      B、在CC中把构造函数改为:
                                                      function __construct($n) { cA::__construct($n); //即:类名::构造函数。 cB::__construct(); echo ‘<h3>this is Class cB \'s __construct!</h3>'; }
                                                      Run code
                                                      Cut to clipboard

                                                        (二)在子类中调用父类的属性或方法:
                                                        1、调用父类方法:在子类中调用父类的方法,有3种方法:
                                                        $this->ParentFunction(); 或
                                                        父类名::ParentFunction(); 或
                                                        parent::parentFun();
                                                        2、调用父类属性:只能用$this->ParentProperty;
                                                        (三)重载:
                                                        在子类中,可以定义与父类相同属性或方法,改变父类该属性或方法的值或操作,称做重载。如:
                                                        calss ParClass{ function pfun(){ ….}}
                                                        class ChildrenClass extends ParClass{function pfun(){ ….}}} //重载了父类的pfun的方法。
                                                        在子类中重载后,优先执行自己重载后的新定义的方法或属性。
                                                        也可以在子类中用parent::parentFun();调用父类的方法,但所得到的值是子类自己输入的参数运算值。而不是该方法在父类中运算的值。
                                                        三、接口:
                                                        接口:interface,可以理解成一组功能的共同规范,最大意义可能就是在多人协作时,为各自的开发规定一个共同的方法名称。
                                                        和抽象类中的抽象方法一样:
                                                        1、不能在接口中对方法具体实现进行定义。而是由具体类来实现(而抽象类中的非抽象方法可以不必再定义,只有抽象方法和接口是一样要求要在具体类中实现)。
                                                        2、和抽象类一样,可以在接口中定义常量,并由具体类直接继承。
                                                        3、具体类必须实现抽象类的所有抽象方法(非抽象方法除外),同样,具体类如通过implements实现了接口后,必须完成接口中的所有方法。
                                                        接口实现过程:1、定义接口,2、用..implement X,Y,…和具体类对接。
                                                        interface Info{ //定义接口 const N=22; public function getage(); public function getname(); } class age implements Info //如要多个接口 class age (extends emJob) implements Info,interB… { public $age=15; public $name='Join'; function getage() { echo “年级是$this->age”; } function getname() { echo “姓名是$this->name”; } function getN(){ echo ‘<h3>在接口中定义的常量N的值是:'.$this::N.' </h3>'; //直接继承接口中的常量值。 } } $age=new age; echo $age::N; //22,直接调用接口中的常量值。 $age->getN();
                                                        Run code
                                                        Cut to clipboard

                                                          关于抽象类和接口类的使用区分:何时用接口,何时用抽象?
                                                          1、相关性:当创建的模型由一些紧密相关的对象采用时,用抽象。对于不相关对象采用的功能,用接口。
                                                          2、多重继承:PHP类可以继承多个接口,但不能扩展多个抽象类。
                                                          3、公共行为实现:抽象类可在其中实现公共的方法,但接口不行。
                                                          四、命名空间(PHP6)
                                                          类库脚本A.inc.php和脚本B.inc.php中都一个类的名称为 class CNAME,并且这两个文件要在同一个文件如index.php中被调用。这时要用到命名空间。
                                                          步聚:
                                                          1、打开上面的A和B两个文件,分别在上面的最前面各加一行:
                                                          namespace SPACEA; 和 namespace SPACEB; 名字自定。
                                                          2、在index.php中实例化类时,在类的前面添加命名空间和双冒号做为前缀:
                                                          include ‘a.inc.php';
                                                          include ‘b.inc.php';
                                                          $a=new SPACEA::CNAME();
                                                          $b=new SPACEB::CNAME();
                                                          这样就不会冲突了。
                                                          但在PHP6正式发布前,这个功能还未定下来。
                                                          五、实现迭代器和迭代。
                                                          参《PHP圣经》P142;
                                                          六、使用Reflection(反射)API 。
                                                          简易实例:
                                                          class a{ …. } $c = new ReflectionClass(‘a'); //PHP 内置类。 echo ‘<pre>'.$c.'</pre>';
                                                          Run code
                                                          Cut to clipboard

                                                            输出类a的结构和内容。参《PHP圣经》P145;
                                                            /uploadfiles/chapters_69722.rar

                                                            php转码iconv

                                                            发布时间:2015-10-14, 15:18:13 | 评论:0 | 分类:PHP

                                                            最近需要用到iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些

                                                            。 让我郁闷了好一会儿,去网上一查资料才知道这是iconv函数的一个bug。iconv在转换字符"—"到gb2312时会出错
                                                            解决方法很简单,就是在需要转成的编码后加 "//IGNORE" 也就是iconv函数第二个参数后.如下:
                                                            iconv("UTF-8","GB2312//IGNORE",$data)
                                                            Run code
                                                            Cut to clipboard

                                                              <?php echo $str= '你好,这里是卖咖啡!'; echo '<br />'; echo iconv('GB2312', 'UTF-8', $str); //将字符串的编码从GB2312转到UTF-8 echo '<br />'; echo iconv_substr($str, 1, 1, 'UTF-8'); //按字符个数截取而非字节 print_r(iconv_get_encoding()); //得到当前页面编码信息 echo iconv_strlen($str, 'UTF-8'); //得到设定编码的字符串长度 //也有这样用的 $content = iconv("UTF-8","gbk//TRANSLIT",$content); ?>
                                                              Run code
                                                              Cut to clipboard

                                                                iconv不是php的默认函数,也是默认安装的模块。需要安装才能用的。
                                                                如果是windows2000+php,你可以修改php.ini文件,将extension=php_iconv.dll前的";"去掉,同时你要copy你的原php安装文件下的iconv.dll

                                                                到你的winnt/system32下(如果你的dll指向的是这个目录)
                                                                在linux环境下,用静态安装的方式,在configure时加多一项 --with-iconv就可以了,phpinfo看得到iconv的项。

                                                                (Linux7.3+Apache4.06+php4.3.2),

                                                                下载:ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.8.tar.gz
                                                                安装:
                                                                #cp libiconv-1.8.tar.gz /usr/local/src
                                                                #tar zxvf lib*
                                                                #./configure --prefix=/usr/local/libiconv
                                                                #make
                                                                #make install
                                                                编译php
                                                                #./configure --prefix=/usr/local/php4.3.2 --with-iconv=/usr/local/libiconv/
                                                                使用的简单例子:
                                                                <?php echo iconv("gb2312","ISO-8859-1","我们"); ?>
                                                                Run code
                                                                Cut to clipboard

                                                                  PHP中的mb_convert_encoding与iconv函数介绍

                                                                  mb_convert_encoding这个函数是用来转换编码的。原来一直对程序编码这一概念不理解,不过现在好像有点开窍了。
                                                                  不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入

                                                                  数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。

                                                                  mb_convert_encoding的用法见官方:
                                                                  http://cn.php.net/manual/zh/function.mb-convert-encoding.php

                                                                  做一个GBK To UTF-8
                                                                  < ?php header("content-Type: text/html; charset=Utf-8"); echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK"); ?>
                                                                  Run code
                                                                  Cut to clipboard

                                                                    再来个GB2312 To Big5
                                                                    < ?php
                                                                    header("content-Type: text/html; charset=big5"); echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); ?>
                                                                    Run code
                                                                    Cut to clipboard

                                                                      不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。

                                                                      PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。

                                                                      下面还有一些详细的例子:
                                                                      iconv — Convert string to requested character encoding
                                                                      (PHP 4 >= 4.0.5, PHP 5)
                                                                      mb_convert_encoding — Convert character encoding
                                                                      (PHP 4 >= 4.0.6, PHP 5)

                                                                      用法:
                                                                      string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
                                                                      需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
                                                                      mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;


                                                                      string iconv ( string in_charset, string out_charset, string str )
                                                                      注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接

                                                                      转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
                                                                      Returns the converted string or FALSE on failure.


                                                                      使用:

                                                                      发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无

                                                                      法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.

                                                                      一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.

                                                                      php保存数据到文本文件

                                                                      发布时间:2015-10-14, 15:18:59 | 评论:0 | 分类:PHP

                                                                      file_put_contents(路径.txt, 内容); //输出 file_get_contents(路径.txt); //导入
                                                                      Run code
                                                                      Cut to clipboard

                                                                        php开发项目--常用自定义函数

                                                                        发布时间:2015-10-14, 15:19:38 | 评论:0 | 分类:PHP

                                                                        //返回格林威治标准时间 function MyDate($format='Y-m-d H:i:s',$timest=0) { global $cfg_cli_time; $addtime = $cfg_cli_time * 3600; if(empty($format)) { $format = 'Y-m-d H:i:s'; } return gmdate ($format,$timest+$addtime); } function GetAlabNum($fnum) { $nums = array("0","1","2","3","4","5","6","7","8","9"); //$fnums = "0123456789"; $fnums = array("0","1","2","3","4","5","6","7","8","9"); $fnum = str_replace($nums,$fnums,$fnum); $fnum = ereg_replace("[^0-9\.-]",'',$fnum); if($fnum=='') { $fnum=0; } return $fnum; } function Html2Text($str,$r=0) { if(!function_exists('SpHtml2Text')) { require_once(DEDEINC."/inc/inc_fun_funString.php"); } if($r==0) { return SpHtml2Text($str); } else { $str = SpHtml2Text(stripslashes($str)); return addslashes($str); } } //文本转HTML function Text2Html($txt) { $txt = str_replace(" "," ",$txt); $txt = str_replace("<","&lt;",$txt); $txt = str_replace(">","&gt;",$txt); $txt = preg_replace("/[\r\n]{1,}/isU","<br/>\r\n",$txt); return $txt; } function AjaxHead() { @header("Pragma:no-cache\r\n"); @header("Cache-Control:no-cache\r\n"); @header("Expires:0\r\n"); } //中文截取2,单字节截取模式 //如果是request的内容,必须使用这个函数 function cn_substrR($str,$slen,$startdd=0) { $str = cn_substr(stripslashes($str),$slen,$startdd); return addslashes($str); } //中文截取2,单字节截取模式 function cn_substr($str,$slen,$startdd=0) { global $cfg_soft_lang; if($cfg_soft_lang=='utf-8') { return cn_substr_utf8($str,$slen,$startdd); } $restr = ''; $c = ''; $str_len = strlen($str); if($str_len < $startdd+1) { return ''; } if($str_len < $startdd + $slen || $slen==0) { $slen = $str_len - $startdd; } $enddd = $startdd + $slen - 1; for($i=0;$i<$str_len;$i++) { if($startdd==0) { $restr .= $c; } else if($i > $startdd) { $restr .= $c; } if(ord($str[$i])>0x80) { if($str_len>$i+1) { $c = $str[$i].$str[$i+1]; } $i++; } else { $c = $str[$i]; } if($i >= $enddd) { if(strlen($restr)+strlen($c)>$slen) { break; } else { $restr .= $c; break; } } } return $restr; } //utf-8中文截取,单字节截取模式 function cn_substr_utf8($str, $length, $start=0) { if(strlen($str) < $start+1) { return ''; } preg_match_all("/./su", $str, $ar); $str = ''; $tstr = ''; //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取 for($i=0; isset($ar[0][$i]); $i++) { if(strlen($tstr) < $start) { $tstr .= $ar[0][$i]; } else { if(strlen($str) < $length + strlen($ar[0][$i]) ) { $str .= $ar[0][$i]; } else { break; } } } return $str; } function GetMkTime($dtime) { global $cfg_cli_time; if(!ereg("[^0-9]",$dtime)) { return $dtime; } $dtime = trim($dtime); $dt = Array(1970,1,1,0,0,0); $dtime = ereg_replace("[\r\n\t]|日|秒"," ",$dtime); $dtime = str_replace("年","-",$dtime); $dtime = str_replace("月","-",$dtime); $dtime = str_replace("时",":",$dtime); $dtime = str_replace("分",":",$dtime); $dtime = trim(ereg_replace("[ ]{1,}"," ",$dtime)); $ds = explode(" ",$dtime); $ymd = explode("-",$ds[0]); if(!isset($ymd[1])) { $ymd = explode(".",$ds[0]); } if(isset($ymd[0])) { $dt[0] = $ymd[0]; } if(isset($ymd[1])) { $dt[1] = $ymd[1]; } if(isset($ymd[2])) { $dt[2] = $ymd[2]; } if(strlen($dt[0])==2) { $dt[0] = '20'.$dt[0]; } if(isset($ds[1])) { $hms = explode(":",$ds[1]); if(isset($hms[0])) { $dt[3] = $hms[0]; } if(isset($hms[1])) { $dt[4] = $hms[1]; } if(isset($hms[2])) { $dt[5] = $hms[2]; } } foreach($dt as $k=>$v) { $v = ereg_replace("^0{1,}",'',trim($v)); if($v=='') { $dt[$k] = 0; } } $mt = @gmmktime($dt[3],$dt[4],$dt[5],$dt[1],$dt[2],$dt[0]) - 3600 * $cfg_cli_time; if(!empty($mt)) { return $mt; } else { return time(); } } function SubDay($ntime,$ctime) { $dayst = 3600 * 24; $cday = ceil(($ntime-$ctime)/$dayst); return $cday; } function AddDay($ntime,$aday) { $dayst = 3600 * 24; $oktime = $ntime + ($aday * $dayst); return $oktime; } function GetDateTimeMk($mktime) { return MyDate('Y-m-d H:i:s',$mktime); } function GetDateMk($mktime) { return MyDate("Y-m-d",$mktime); } function GetIP() { if(!empty($_SERVER["HTTP_CLIENT_IP"])) { $cip = $_SERVER["HTTP_CLIENT_IP"]; } else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) { $cip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if(!empty($_SERVER["REMOTE_ADDR"])) { $cip = $_SERVER["REMOTE_ADDR"]; } else { $cip = ''; } preg_match("/[\d\.]{7,15}/", $cip, $cips); $cip = isset($cips[0]) ? $cips[0] : 'unknown'; unset($cips); return $cip; } //获取拼音以gbk编码为准 function GetPinyin($str,$ishead=0,$isclose=1) { global $cfg_soft_lang; if(!function_exists('SpGetPinyin')) { require_once(DEDEINC."/inc/inc_fun_funAdmin.php"); } if($cfg_soft_lang=='utf-8') { return SpGetPinyin(utf82gb($str),$ishead,$isclose); } else { return SpGetPinyin($str,$ishead,$isclose); } } function GetNewInfo() { if(!function_exists('SpGetNewInfo')) { require_once(DEDEINC."/inc/inc_fun_funAdmin.php"); } return SpGetNewInfo(); } function UpdateStat() { include_once(DEDEINC."/inc/inc_stat.php"); return SpUpdateStat(); } $arrs1 = array(0x63,0x66,0x67,0x5f,0x70,0x6f,0x77,0x65,0x72,0x62,0x79); $arrs2 = array(0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f, 0x77,0x77,0x77,0x2e,0x64,0x65,0x64,0x65,0x63,0x6d,0x73,0x2e,0x63,0x6f,0x6d,0x20,0x74,0x61,0x72, 0x67,0x65,0x74,0x3d,0x27,0x5f,0x62,0x6c,0x61,0x6e,0x6b,0x27,0x3e,0x50,0x6f,0x77,0x65,0x72,0x20, 0x62,0x79,0x20,0x44,0x65,0x64,0x65,0x43,0x6d,0x73,0x3c,0x2f,0x61,0x3e); function ShowMsg($msg,$gourl,$onlymsg=0,$limittime=0) { if(empty($GLOBALS['cfg_phpurl'])) $GLOBALS['cfg_phpurl'] = '..'; $htmlhead = "<html>\r\n<head>\r\n<title>SIOGONCMS提示信息</title>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" />\r\n"; $htmlhead .= "<base target='_self'/>\r\n<style>div{line-height:160%;}</style></head>\r\n<body leftmargin='0' topmargin='0'>".(isset($GLOBALS['ucsynlogin']) ? $GLOBALS['ucsynlogin'] : '')."\r\n<center>\r\n<script>\r\n"; $htmlfoot = "</script>\r\n</center>\r\n</body>\r\n</html>\r\n"; $litime = ($limittime==0 ? 1000 : $limittime); $func = ''; if($gourl=='-1') { if($limittime==0) $litime = 5000; $gourl = "javascript:history.go(-1);"; } if($gourl=='' || $onlymsg==1) { $msg = "<script>alert(\"".str_replace("\"","“",$msg)."\");</script>"; } else { //当网址为:close::objname 时, 关闭父框架的id=objname元素 if(eregi('close::',$gourl)) { $tgobj = trim(eregi_replace('close::', '', $gourl)); $gourl = 'javascript:;'; $func .= "window.parent.document.getElementById('{$tgobj}').style.display='none';\r\n"; } $func .= " var pgo=0; function JumpUrl(){ if(pgo==0){ location='$gourl'; pgo=1; } }\r\n"; $rmsg = $func; $rmsg .= "document.write(\"<br /><div style='width:450px;padding:100px 0px 0px 0px;background: url({$GLOBALS['cfg_phpurl']}/img/wbg.png) no-repeat'>"; $rmsg .= "<div style='padding:6px;font-size:12px;'><b>SIOGONCMS 提示信息!</b></div>\");\r\n"; $rmsg .= "document.write(\"<div style='height:130px;font-size:10pt;border-top:0px;border-left:1px solid #B3C800;border-right:1px solid #B3C800;border-bottom:1px solid #B3C800;'><br />\");\r\n"; $rmsg .= "document.write(\"".str_replace("\"","“",$msg)."\");\r\n"; $rmsg .= "document.write(\""; if($onlymsg==0) { if( $gourl != 'javascript:;' && $gourl != '') { $rmsg .= "<br /><a href='{$gourl}'>如果你的浏览器没反应,请点击这里...</a>"; $rmsg .= "<br/></div>\");\r\n"; $rmsg .= "setTimeout('JumpUrl()',$litime);"; } else { $rmsg .= "<br/></div>\");\r\n"; } } else { $rmsg .= "<br/><br/></div>\");\r\n"; } $msg = $htmlhead.$rmsg.$htmlfoot; } echo $msg; } function ExecTime() { $time = explode(" ", microtime()); $usec = (double)$time[0]; $sec = (double)$time[1]; return $sec + $usec; } function GetEditor($fname,$fvalue,$nheight="350",$etype="Basic",$gtype="print",$isfullpage="false") { if(!function_exists('SpGetEditor')) { require_once(DEDEINC."/inc/inc_fun_funAdmin.php"); } return SpGetEditor($fname,$fvalue,$nheight,$etype,$gtype,$isfullpage); } function GetTemplets($filename) { if(file_exists($filename)) { $fp = fopen($filename,"r"); $rstr = fread($fp,filesize($filename)); fclose($fp); return $rstr; } else { return ''; } } function GetSysTemplets($filename) { return GetTemplets($GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'].'/system/'.$filename); } function AttDef($oldvar,$nv) { return empty($oldvar) ? $nv : $oldvar; } function dd2char($ddnum) { $ddnum = strval($ddnum); $slen = strlen($ddnum); $okdd = ''; $nn = ''; for($i=0;$i<$slen;$i++) { if(isset($ddnum[$i+1])) { $n = $ddnum[$i].$ddnum[$i+1]; if( ($n>96 && $n<123) || ($n>64 && $n<91) ) { $okdd .= chr($n); $i++; } else { $okdd .= $ddnum[$i]; } } else { $okdd .= $ddnum[$i]; } } return $okdd; } function PutCookie($key,$value,$kptime=0,$pa="/") { global $cfg_cookie_encode; setcookie($key,$value,time()+$kptime,$pa); setcookie($key.'__ckMd5',substr(md5($cfg_cookie_encode.$value),0,16),time()+$kptime,$pa); } function DropCookie($key) { setcookie($key,'',time()-360000,"/"); setcookie($key.'__ckMd5','',time()-360000,"/"); } function GetCookie($key) { global $cfg_cookie_encode; if( !isset($_COOKIE[$key]) || !isset($_COOKIE[$key.'__ckMd5']) ) { return ''; } else { if($_COOKIE[$key.'__ckMd5']!=substr(md5($cfg_cookie_encode.$_COOKIE[$key]),0,16)) { return ''; } else { return $_COOKIE[$key]; } } } function GetCkVdValue() { @session_start(); return isset($_SESSION['dd_ckstr']) ? $_SESSION['dd_ckstr'] : ''; } //php某些版本有Bug,不能在同一作用域中同时读session并改注销它,因此调用后需执行本函数 function ResetVdValue() { @session_start(); $_SESSION['dd_ckstr'] = ''; $_SESSION['dd_ckstr_last'] = ''; } function FtpMkdir($truepath,$mmode,$isMkdir=true) { global $cfg_basedir,$cfg_ftp_root,$g_ftpLink; OpenFtp(); $ftproot = ereg_replace($cfg_ftp_root.'$','',$cfg_basedir); $mdir = ereg_replace('^'.$ftproot,'',$truepath); if($isMkdir) { ftp_mkdir($g_ftpLink,$mdir); } return ftp_site($g_ftpLink,"chmod $mmode $mdir"); } function FtpChmod($truepath,$mmode) { return FtpMkdir($truepath,$mmode,false); } function OpenFtp() { global $cfg_basedir,$cfg_ftp_host,$cfg_ftp_port, $cfg_ftp_user,$cfg_ftp_pwd,$cfg_ftp_root,$g_ftpLink; if(!$g_ftpLink) { if($cfg_ftp_host=='') { echo "由于你的站点的PHP配置存在限制,程序尝试用FTP进行目录操作,你必须在后台指定FTP相关的变量!"; exit(); } $g_ftpLink = ftp_connect($cfg_ftp_host,$cfg_ftp_port); if(!$g_ftpLink) { echo "连接FTP失败!"; exit(); } if(!ftp_login($g_ftpLink,$cfg_ftp_user,$cfg_ftp_pwd)) { echo "登陆FTP失败!"; exit(); } } } function CloseFtp() { global $g_ftpLink; if($g_ftpLink) { @ftp_quit($g_ftpLink); } } function MkdirAll($truepath,$mmode) { global $cfg_ftp_mkdir,$isSafeMode,$cfg_dir_purview; if($isSafeMode||$cfg_ftp_mkdir=='Y') { return FtpMkdir($truepath,$mmode); } else { if(!file_exists($truepath)) { mkdir($truepath,$cfg_dir_purview); chmod($truepath,$cfg_dir_purview); return true; } else { return true; } } } function ParCv($n) { return chr($n); } function ChmodAll($truepath,$mmode) { global $cfg_ftp_mkdir,$isSafeMode; if($isSafeMode||$cfg_ftp_mkdir=='Y') { return FtpChmod($truepath,$mmode); } else { return chmod($truepath,'0'.$mmode); } } function CreateDir($spath) { if(!function_exists('SpCreateDir')) { require_once(DEDEINC.'/inc/inc_fun_funAdmin.php'); } return SpCreateDir($spath); } // $rptype = 0 表示仅替换 html标记 // $rptype = 1 表示替换 html标记同时去除连续空白字符 // $rptype = 2 表示替换 html标记同时去除所有空白字符 // $rptype = -1 表示仅替换 html危险的标记 function HtmlReplace($str,$rptype=0) { $str = stripslashes($str); if($rptype==0) { $str = htmlspecialchars($str); } else if($rptype==1) { $str = htmlspecialchars($str); $str = str_replace(" ",' ',$str); $str = ereg_replace("[\r\n\t ]{1,}",' ',$str); } else if($rptype==2) { $str = htmlspecialchars($str); $str = str_replace(" ",'',$str); $str = ereg_replace("[\r\n\t ]",'',$str); } else { $str = ereg_replace("[\r\n\t ]{1,}",' ',$str); $str = eregi_replace('script','script',$str); $str = eregi_replace("<[/]{0,1}(link|meta|ifr|fra)[^>]*>",'',$str); } return addslashes($str); } //获得某文档的所有tag function GetTags($aid) { global $dsql; $tags = ''; $query = "Select tag From `#@__taglist` where aid='$aid' "; $dsql->Execute('tag',$query); while($row = $dsql->GetArray('tag')) { $tags .= ($tags=='' ? $row['tag'] : ','.$row['tag']); } return $tags; } function ParamError() { ShowMsg('对不起,你输入的参数有误!','javascript:;'); exit(); } //过滤用于搜索的字符串 function FilterSearch($keyword) { global $cfg_soft_lang; if($cfg_soft_lang=='utf-8') { $keyword = ereg_replace("[\"\r\n\t\$\\><']",'',$keyword); if($keyword != stripslashes($keyword)) { return ''; } else { return $keyword; } } else { $restr = ''; for($i=0;isset($keyword[$i]);$i++) { if(ord($keyword[$i]) > 0x80) { if(isset($keyword[$i+1]) && ord($keyword[$i+1]) > 0x40) { $restr .= $keyword[$i].$keyword[$i+1]; $i++; } else { $restr .= ' '; } } else { if(eregi("[^0-9a-z@#\.]",$keyword[$i])) { $restr .= ' '; } else { $restr .= $keyword[$i]; } } } } return $restr; } //处理禁用HTML但允许换行的内容 function TrimMsg($msg) { $msg = trim(stripslashes($msg)); $msg = nl2br(htmlspecialchars($msg)); $msg = str_replace(" ","&nbsp;&nbsp;",$msg); return addslashes($msg); } //获取单篇文档信息 function GetOneArchive($aid) { global $dsql; include_once(DEDEINC."/channelunit.func.php"); $aid = trim(ereg_replace('[^0-9]','',$aid)); $reArr = array(); $chRow = $dsql->GetOne("Select arc.*,ch.maintable,ch.addtable,ch.issystem From `#@__arctiny` arc left join `#@__channeltype` ch on ch.id=arc.channel where arc.id='$aid' "); if(!is_array($chRow)) { return $reArr; } else { if(empty($chRow['maintable'])) $chRow['maintable'] = '#@__archives'; } if($chRow['issystem']!=-1) { $nquery = " Select arc.*,tp.typedir,tp.topid,tp.namerule,tp.moresite,tp.siteurl,tp.sitepath From `{$chRow['maintable']}` arc left join `#@__arctype` tp on tp.id=arc.typeid where arc.id='$aid' "; } else { $nquery = " Select arc.*,1 as ismake,0 as money,'' as filename,tp.typedir,tp.topid,tp.namerule,tp.moresite,tp.siteurl,tp.sitepath From `{$chRow['addtable']}` arc left join `#@__arctype` tp on tp.id=arc.typeid where arc.aid='$aid' "; } $arcRow = $dsql->GetOne($nquery); if(!is_array($arcRow)) { return $reArr; } if(!isset($arcRow['description'])) { $arcRow['description'] = ''; } if(empty($arcRow['description']) && isset($arcRow['body'])) { $arcRow['description'] = cn_substr(html2text($arcRow['body']),250); } if(!isset($arcRow['pubdate'])) { $arcRow['pubdate'] = $arcRow['senddate']; } if(!isset($arcRow['notpost'])) { $arcRow['notpost'] = 0; } $reArr = $arcRow; $reArr['aid'] = $aid; $reArr['topid'] = $arcRow['topid']; $reArr['arctitle'] = $arcRow['title']; $reArr['arcurl'] = GetFileUrl($aid,$arcRow['typeid'],$arcRow['senddate'],$reArr['title'],$arcRow['ismake'],$arcRow['arcrank'],$arcRow['namerule'], $arcRow['typedir'],$arcRow['money'],$arcRow['filename'],$arcRow['moresite'],$arcRow['siteurl'],$arcRow['sitepath']); return $reArr; } //获取模型的表信息 function GetChannelTable($id,$formtype='channel') { global $dsql; if($formtype == 'archive') { $query = "select ch.maintable, ch.addtable from #@__arctiny tin left join #@__channeltype ch on ch.id=tin.channel where tin.id='$id'"; } elseif($formtype == 'typeid') { $query = "select ch.maintable, ch.addtable from #@__arctype act left join #@__channeltype ch on ch.id=act.channeltype where act.id='$id'"; } else { $query = "select maintable, addtable from #@__channeltype where id='$id'"; } $row = $dsql->getone($query); return $row; } function jstrim($str,$len) { $str = preg_replace("/{quote}(.*){\/quote}/is",'',$str); $str = str_replace('&lt;br/&gt;',' ',$str); $str = cn_substr($str,$len); $str = ereg_replace("['\"\r\n]","",$str); return $str; } function jstrimjajx($str,$len) { $str = preg_replace("/{quote}(.*){\/quote}/is",'',$str); $str = str_replace('&lt;br/&gt;',' ',$str); $str = cn_substr($str,$len); $str = ereg_replace("['\"\r\n]","",$str); $str = str_replace('&lt;', '<', $str); $str = str_replace('&gt;', '>', $str); return $str; } /*------------------------------- //管理员上传文件的通用函数 //filetype: image、media、addon //return: -1 没选定上传文件,0 文件类型不允许, -2 保存失败,其它:返回上传后的文件名 //$file_type='' 对于swfupload上传的文件, 因为没有filetype,所以需指定,并且有些特殊之处不同 -------------------------------*/ function AdminUpload($uploadname, $ftype='image', $rnddd=0, $watermark=true, $filetype='' ) { global $dsql, $cuserLogin, $cfg_addon_savetype, $cfg_dir_purview; global $cfg_basedir, $cfg_image_dir, $cfg_soft_dir, $cfg_other_medias; global $cfg_imgtype, $cfg_softtype, $cfg_mediatype; if($watermark) include_once(DEDEINC.'/image.func.php'); $file_tmp = isset($GLOBALS[$uploadname]) ? $GLOBALS[$uploadname] : ''; if($file_tmp=='' || !is_uploaded_file($file_tmp) ) { return -1; } $file_tmp = $GLOBALS[$uploadname]; $file_size = filesize($file_tmp); $file_type = $filetype=='' ? strtolower(trim($GLOBALS[$uploadname.'_type'])) : $filetype; $file_name = isset($GLOBALS[$uploadname.'_name']) ? $GLOBALS[$uploadname.'_name'] : ''; $file_snames = explode('.', $file_name); $file_sname = strtolower(trim($file_snames[count($file_snames)-1])); if($ftype=='image' || $ftype=='imagelit') { $filetype = '1'; $sparr = Array('image/pjpeg', 'image/jpeg', 'image/gif', 'image/png', 'image/xpng', 'image/wbmp'); if(!in_array($file_type, $sparr)) return 0; if($file_sname=='') { if($file_type=='image/gif') $file_sname = 'jpg'; else if($file_type=='image/png' || $file_type=='image/xpng') $file_sname = 'png'; else if($file_type=='image/wbmp') $file_sname = 'bmp'; else $file_sname = 'jpg'; } $filedir = $cfg_image_dir.'/'.MyDate($cfg_addon_savetype, time()); } else if($ftype=='media') { $filetype = '3'; if( !eregi($cfg_mediatype, $file_sname) ) return 0; $filedir = $cfg_other_medias.'/'.MyDate($cfg_addon_savetype, time()); } else { $filetype = '4'; $cfg_softtype .= '|'.$cfg_mediatype.'|'.$cfg_imgtype; $cfg_softtype = ereg_replace('||', '|', $cfg_softtype); if( !eregi($cfg_softtype, $file_sname) ) return 0; $filedir = $cfg_soft_dir.'/'.MyDate($cfg_addon_savetype, time()); } if(!is_dir(DEDEROOT.$filedir)) { MkdirAll($cfg_basedir.$filedir, $cfg_dir_purview); CloseFtp(); } $filename = $cuserLogin->getUserID().'-'.dd2char(MyDate('ymdHis', time())).$rnddd; if($ftype=='imagelit') $filename .= '-L'; if( file_exists($cfg_basedir.$filedir.'/'.$filename.'.'.$file_sname) ) { for($i=50; $i <= 5000; $i++) { if( !file_exists($cfg_basedir.$filedir.'/'.$filename.'-'.$i.'.'.$file_sname) ) { $filename = $filename.'-'.$i; break; } } } $fileurl = $filedir.'/'.$filename.'.'.$file_sname; $rs = move_uploaded_file($file_tmp, $cfg_basedir.$fileurl); if(!$rs) return -2; if($ftype=='image' && $watermark) { WaterImg($cfg_basedir.$fileurl, 'up'); } //保存信息到数据库 $title = $filename.'.'.$file_sname; $inquery = "INSERT INTO `#@__uploads`(title,url,mediatype,width,height,playtime,filesize,uptime,mid) VALUES ('$title','$fileurl','$filetype','0','0','0','".filesize($cfg_basedir.$fileurl)."','".time()."','".$cuserLogin->getUserID()."'); "; $dsql->ExecuteNoneQuery($inquery); $fid = $dsql->GetLastID(); AddMyAddon($fid, $fileurl); return $fileurl; } //邮箱格式检查 function CheckEmail($email) { return eregi("^[0-9a-z][a-z0-9\._-]{1,}@[a-z0-9-]{1,}[a-z0-9]\.[a-z\.]{1,}[a-z]$", $email); } //前台会员通用上传函数 //$upname 是文件上传框的表单名,而不是表单的变量 //$handname 允许用户手工指定网址情况下的网址 function MemberUploads($upname,$handname,$userid=0,$utype='image',$exname='',$maxwidth=0,$maxheight=0,$water=false,$isadmin=false) { global $cfg_imgtype,$cfg_mb_addontype,$cfg_mediatype,$cfg_user_dir,$cfg_basedir,$cfg_dir_purview; //当为游客投稿的情况下,这个 id 为 0 if( empty($userid) ) $userid = 0; if(!is_dir($cfg_basedir.$cfg_user_dir."/$userid")) { MkdirAll($cfg_basedir.$cfg_user_dir."/$userid", $cfg_dir_purview); CloseFtp(); } //有上传文件 $allAllowType = str_replace('||', '|', $cfg_imgtype.'|'.$cfg_mediatype.'|'.$cfg_mb_addontype); if(!empty($GLOBALS[$upname]) && is_uploaded_file($GLOBALS[$upname])) { $nowtme = time(); $GLOBALS[$upname.'_name'] = trim(ereg_replace("[ \r\n\t\*\%\\/\?><\|\":]{1,}",'',$GLOBALS[$upname.'_name'])); //源文件类型检查 if($utype=='image') { if(!eregi("\.(".$cfg_imgtype.")$", $GLOBALS[$upname.'_name'])) { ShowMsg("你所上传的图片类型不在许可列表,请上传{$cfg_imgtype}类型!",'-1'); exit(); } $sparr = Array("image/pjpeg","image/jpeg","image/gif","image/png","image/xpng","image/wbmp"); $imgfile_type = strtolower(trim($GLOBALS[$upname.'_type'])); if(!in_array($imgfile_type,$sparr)) { ShowMsg('上传的图片格式错误,请使用JPEG、GIF、PNG、WBMP格式的其中一种!', '-1'); exit(); } } else if($utype=='flash' && !eregi("\.swf$", $GLOBALS[$upname.'_name'])) { ShowMsg('上传的文件必须为flash文件!', '-1'); exit(); } else if($utype=='media' && !eregi("\.(".$cfg_mediatype.")$",$GLOBALS[$upname.'_name'])) { ShowMsg('你所上传的文件类型必须为:'.$cfg_mediatype, '-1'); exit(); } else if(!eregi("\.(".$allAllowType.")$", $GLOBALS[$upname.'_name'])) { ShowMsg("你所上传的文件类型不被允许!",'-1'); exit(); } //再次严格检测文件扩展名是否符合系统定义的类型 $fs = explode('.', $GLOBALS[$upname.'_name']); $sname = $fs[count($fs)-1]; $alltypes = explode('|', $allAllowType); if(!in_array(strtolower($sname), $alltypes)) { ShowMsg('你所上传的文件类型不被允许!', '-1'); exit(); } //强制禁止的文件类型 if(eregi("\.(asp|php|pl|cgi|shtm|js)", $sname)) { ShowMsg('你上传的文件为系统禁止的类型!', '-1'); exit(); } if($exname=='') { $filename = $cfg_user_dir."/$userid/".dd2char($nowtme.'-'.mt_rand(1000,9999)).'.'.$sname; } else { $filename = $cfg_user_dir."/{$userid}/{$exname}.".$sname; } move_uploaded_file($GLOBALS[$upname], $cfg_basedir.$filename) or die("上传文件到 {$filename} 失败!"); @unlink($GLOBALS[$upname]); if(@filesize($cfg_basedir.$filename) > $GLOBALS['cfg_mb_upload_size'] * 1024) { @unlink($cfg_basedir.$filename); ShowMsg('你上传的文件超出系统大小限制!', '-1'); exit(); } //加水印或缩小图片 if($utype=='image') { include_once(DEDEINC.'/image.func.php'); if($maxwidth>0 || $maxheight>0) { ImageResize($cfg_basedir.$filename, $maxwidth, $maxheight); } else if($water) { WaterImg($cfg_basedir.$filename); } } return $filename; } //没有上传文件 else { //强制禁止的文件类型 if($handname=='') { return $handname; } else if(eregi("\.(asp|php|pl|cgi|shtm|js)", $handname)) { exit('Not allow filename for not safe!'); } else if( !eregi("\.(".$allAllowType.")$", $handname) ) { exit('Not allow filename for filetype!'); } else if( !eregi('^http:', $handname) && !eregi('^'.$cfg_user_dir.'/'.$userid, $handname) && !$isadmin ) { exit('Not allow filename for not userdir!'); } return $handname; } }
                                                                        Run code
                                                                        Cut to clipboard

                                                                          PHP正则取得所有图片的路径

                                                                          发布时间:2015-10-14, 15:45:54 | 评论:0 | 分类:PHP

                                                                          问题: 如下面内容,两个问题: 1、用正则取得所有图片地址的php语句怎么写? 2、取出的多个地址如何一条一条地保存到数据库中? <p><img alt="" width="153" src="/upload/2009-11-15/9_3.jpg" height="60" /><img src="/upload/2009-11-15/58263668.png" alt="" /><img width="153" height="60" alt="" src="/upload/2009-11-15/155439_2.jpg" />1、什么是在线编辑器 2、fckeditor配置 3、fckeditor的应用 4、fckeditor结合数据库应用</p>
                                                                          Run code
                                                                          Cut to clipboard


                                                                            回答:
                                                                            <?php $str ='<p><img alt="" width="153" src="/upload/2009-11-15/9_3.jpg" height="60" /><img src="/upload/2009-11-15/58263668.png" alt="" /><img width="153" height="60" alt="" src="/upload/2009-11-15/155439_2.jpg" />1、什么是在线编辑器 2、fckeditor配置 3、fckeditor的应用 4、fckeditor结合数据库应用</p>'; preg_match_all("/\<img.*?src\=\"(.*?)\"[^>]*>/i", $str, $match); print_r($match);
                                                                            Run code
                                                                            Cut to clipboard



                                                                              <?php //dump($content); $str=$content; $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/"; preg_match_all($pattern,$str,$match); //print_r($match ['1']); $pic_arr_n=count($match['1']); $pic_arr_n_i=0; $pattern="/<[img|IMG].*?title=[\'|\"](.*?)[\'|\"].*?[\/]?>/"; //preg_match_all('/<img.+(title=/"?/d*/"?).+>/i',$str,$matchsrc); preg_match_all($pattern,$str,$matchsrc); //print_r($matchsrc['1']); //$pic_arr_n=count($match['1']); //$pic_arr_n_i=0; ?>
                                                                              Run code
                                                                              Cut to clipboard

                                                                                常用字符串合法判断方法一

                                                                                发布时间:2015-10-14, 15:47:29 | 评论:0 | 分类:PHP

                                                                                /** * 是否合法的email * @param string $str * @return string||false */ function is_email($str=''){ return preg_match('/^[\w\d\_\.]+\@[\w\d\_\.\-]+\.[\w\d]{2,4}$/',str_replace('%40','@',$str)); } //是否是中文 function is_chinese($str=''){ return preg_match("/^[\x80-\xff]+$/",$str); } //是否是手机号码 function is_mobile($str=''){ return preg_match("/^1[34589]\d{9}$/",$str); } //是否是QQ号码 function is_qq($str=''){ return preg_match("/^\d{5,15}$/",$str); } //是否是正确的用户名 英文数字加下划线,4-16位 function is_uname($str=''){ return chk_string($str); return preg_match("/^[\w\d\_]{4,20}$/",$str); } //是否是正确的密码,不能有空格单引号和双引号,6-20位 function is_pwd($str=''){ return true; } //是否合法的日期 function is_date($string){ $arr=explode('-',$string); return checkdate($arr[1],$arr[2],$arr[0])?true:false; } //是否合法的身份证 function is_idcard($idcard=''){ if (strlen($idcard) != 18)return false; $idcard_base = substr($idcard, 0, 17); if (strlen($idcard_base) != 17) return false; $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); $verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); $checksum = 0; for ($i = 0; $i < strlen($idcard_base); $i++) { $checksum += substr($idcard_base, $i, 1) * $factor[$i]; } $mod = $checksum % 11; $verify_number = $verify_number_list[$mod]; if ($verify_number == strtoupper(substr($idcard, 17, 1)))return true; return false; } /** *检查字符串是否合法,合法则返回真,不合法则返回假,不能含有特殊符号 *@param string $str *@return bool */ function chk_string($str=''){ return $str?preg_match('/^[a-zA-Z0-9\x80-\xff\_\@\.]+?$/',$str):false; }
                                                                                Run code
                                                                                Cut to clipboard

                                                                                  一个简单的PHP邮件发送类

                                                                                  发布时间:2015-10-14, 16:40:51 | 评论:0 | 分类:PHP

                                                                                  PHP邮件发送类,一共包含两个文件.

                                                                                  sent_mail.php
                                                                                  <?php require_once ('email.class.php'); //########################################## $smtpserver = "smtp.163.com";//SMTP服务器 $smtpserverport =25;//SMTP服务器端口 $smtpusermail = "xxx@163.com";//SMTP服务器的用户邮箱 $smtpemailto = "xxx@qq.com";//发送给谁 $smtpuser = "xxx@looklo.com";//SMTP服务器的用户帐号 $smtppass = "*****";//SMTP服务器的用户密码 $mailsubject = "PHP100测试邮件系统";//邮件主题 $mailbody = "<h1> 这是一个测试程序 PHP100.com </h1>";//邮件内容 $mailtype = "HTML";//邮件格式(HTML/TXT),TXT为文本邮件 ########################################## $smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证. $smtp->debug = true;//是否显示发送的调试信息 $smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype); ?> [/php] email.class.php [php] <? class smtp { /* Public Variables */ public $smtp_port; public $time_out; public $host_name; public $log_file; public $relay_host; public $debug; public $auth; public $user; public $pass; /* Private Variables */ private $sock; /* Constractor */ function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass) { $this->debug = FALSE; $this->smtp_port = $smtp_port; $this->relay_host = $relay_host; $this->time_out = 30; //is used in fsockopen() # $this->auth = $auth;//auth $this->user = $user; $this->pass = $pass; # $this->host_name = "localhost"; //is used in HELO command $this->log_file =""; $this->sock = FALSE; } /* Main Function */ function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "") { $mail_from = $this->get_address($this->strip_comment($from)); $body = preg_replace("/(^|(\r\n))(\\.)/", "\\1.\\3", $body); $header .= "MIME-Version:1.0\r\n"; if($mailtype=="HTML"){ $header .= "Content-Type:text/html\r\n"; } $header .= "To: ".$to."\r\n"; if ($cc != "") { $header .= "Cc: ".$cc."\r\n"; } $header .= "From: $from<".$from.">\r\n"; $header .= "Subject: ".$subject."\r\n"; $header .= $additional_headers; $header .= "Date: ".date("r")."\r\n"; $header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n"; list($msec, $sec) = explode(" ", microtime()); $header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">\r\n"; $TO = explode(",", $this->strip_comment($to)); if ($cc != "") { $TO = array_merge($TO, explode(",", $this->strip_comment($cc))); } if ($bcc != "") { $TO = array_merge($TO, explode(",", $this->strip_comment($bcc))); } $sent = TRUE; foreach ($TO as $rcpt_to) { $rcpt_to = $this->get_address($rcpt_to); if (!$this->smtp_sockopen($rcpt_to)) { $this->log_write("Error: Cannot send email to ".$rcpt_to."\n"); $sent = FALSE; continue; } if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) { $this->log_write("E-mail has been sent to <".$rcpt_to.">\n"); } else { $this->log_write("Error: Cannot send email to <".$rcpt_to.">\n"); $sent = FALSE; } fclose($this->sock); $this->log_write("Disconnected from remote host\n"); } echo "<br>"; echo $header; return $sent; } /* Private Functions */ function smtp_send($helo, $from, $to, $header, $body = "") { if (!$this->smtp_putcmd("HELO", $helo)) { return $this->smtp_error("sending HELO command"); } #auth if($this->auth){ if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) { return $this->smtp_error("sending HELO command"); } if (!$this->smtp_putcmd("", base64_encode($this->pass))) { return $this->smtp_error("sending HELO command"); } } # if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">")) { return $this->smtp_error("sending MAIL FROM command"); } if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">")) { return $this->smtp_error("sending RCPT TO command"); } if (!$this->smtp_putcmd("DATA")) { return $this->smtp_error("sending DATA command"); } if (!$this->smtp_message($header, $body)) { return $this->smtp_error("sending message"); } if (!$this->smtp_eom()) { return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]"); } if (!$this->smtp_putcmd("QUIT")) { return $this->smtp_error("sending QUIT command"); } return TRUE; } function smtp_sockopen($address) { if ($this->relay_host == "") { return $this->smtp_sockopen_mx($address); } else { return $this->smtp_sockopen_relay(); } } function smtp_sockopen_relay() { $this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."\n"); $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out); if (!($this->sock && $this->smtp_ok())) { $this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."\n"); $this->log_write("Error: ".$errstr." (".$errno.")\n"); return FALSE; } $this->log_write("Connected to relay host ".$this->relay_host."\n"); return TRUE;; } function smtp_sockopen_mx($address) { $domain = preg_replace("/^.+@([^@]+)$/", "\\1", $address); if (!@getmxrr($domain, $MXHOSTS)) { $this->log_write("Error: Cannot resolve MX \"".$domain."\"\n"); return FALSE; } foreach ($MXHOSTS as $host) { $this->log_write("Trying to ".$host.":".$this->smtp_port."\n"); $this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out); if (!($this->sock && $this->smtp_ok())) { $this->log_write("Warning: Cannot connect to mx host ".$host."\n"); $this->log_write("Error: ".$errstr." (".$errno.")\n"); continue; } $this->log_write("Connected to mx host ".$host."\n"); return TRUE; } $this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n"); return FALSE; } function smtp_message($header, $body) { fputs($this->sock, $header."\r\n".$body); $this->smtp_debug("> ".str_replace("\r\n", "\n"."> ", $header."\n> ".$body."\n> ")); return TRUE; } function smtp_eom() { fputs($this->sock, "\r\n.\r\n"); $this->smtp_debug(". [EOM]\n"); return $this->smtp_ok(); } function smtp_ok() { $response = str_replace("\r\n", "", fgets($this->sock, 512)); $this->smtp_debug($response."\n"); if (!preg_match("/^[23]/", $response)) { fputs($this->sock, "QUIT\r\n"); fgets($this->sock, 512); $this->log_write("Error: Remote host returned \"".$response."\"\n"); return FALSE; } return TRUE; } function smtp_putcmd($cmd, $arg = "") { if ($arg != "") { if($cmd=="") $cmd = $arg; else $cmd = $cmd." ".$arg; } fputs($this->sock, $cmd."\r\n"); $this->smtp_debug("> ".$cmd."\n"); return $this->smtp_ok(); } function smtp_error($string) { $this->log_write("Error: Error occurred while ".$string.".\n"); return FALSE; } function log_write($message) { $this->smtp_debug($message); if ($this->log_file == "") { return TRUE; } $message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message; if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) { $this->smtp_debug("Warning: Cannot open log file \"".$this->log_file."\"\n"); return FALSE; } flock($fp, LOCK_EX); fputs($fp, $message); fclose($fp); return TRUE; } function strip_comment($address) { $comment = "/\\([^()]*\\)/"; while (preg_match($comment, $address)) { $address = preg_replace($comment, "", $address); } return $address; } function get_address($address) { $address = preg_replace("/([ \t\r\n])+/", "", $address); $address = preg_replace("/^.*<(.+)>.*$/", "\\1", $address); return $address; } function smtp_debug($message) { if ($this->debug) { echo $message."<br>"; } } function get_attach_type($image_tag) { // $filedata = array(); $img_file_con=fopen($image_tag,"r"); unset($image_data); while ($tem_buffer=AddSlashes(fread($img_file_con,filesize($image_tag)))) $image_data.=$tem_buffer; fclose($img_file_con); $filedata['context'] = $image_data; $filedata['filename']= basename($image_tag); $extension=substr($image_tag,strrpos($image_tag,"."),strlen($image_tag)-strrpos($image_tag,".")); switch($extension){ case ".gif": $filedata['type'] = "image/gif"; break; case ".gz": $filedata['type'] = "application/x-gzip"; break; case ".htm": $filedata['type'] = "text/html"; break; case ".html": $filedata['type'] = "text/html"; break; case ".jpg": $filedata['type'] = "image/jpeg"; break; case ".tar": $filedata['type'] = "application/x-tar"; break; case ".txt": $filedata['type'] = "text/plain"; break; case ".zip": $filedata['type'] = "application/zip"; break; default: $filedata['type'] = "application/octet-stream"; break; } return $filedata; } } // end class ?>
                                                                                  Run code
                                                                                  Cut to clipboard

                                                                                    PHP发送邮件

                                                                                    发布时间:2015-10-14, 16:41:46 | 评论:0 | 分类:PHP

                                                                                    <?php require("class.phpmailer.php"); //下载的文件必须放在该文件所在目录 $mail = new PHPMailer(); //建立邮件发送类 $address ="youbinliu@126.com"; $mail->IsSMTP(); // 使用SMTP方式发送 $mail->Host = "smtp.qq.com"; // 您的企业邮局域名 $mail->SMTPAuth = true; // 启用SMTP验证功能 $mail->Username = "843831601@qq.com"; // 邮局用户名(请填写完整的email地址) $mail->Password = "***********"; // 邮局密码 $mail->Port=25; $mail->From = "843831601@qq.com"; //邮件发送者email地址 $mail->FromName = "liuyoubin"; $mail->AddAddress("$address", "a");//收件人地址,可以替换成任何想要接收邮件的email信箱,格式是AddAddress("收件人email","收件人姓名") //$mail->AddReplyTo("", ""); //$mail->AddAttachment("/var/tmp/file.tar.gz"); // 添加附件 //$mail->IsHTML(true); // set email format to HTML //是否使用HTML格式 $mail->Subject = "PHPMailer测试邮件"; //邮件标题 $mail->Body = "Hello,这是测试邮件"; //邮件内容 $mail->AltBody = "This is the body in plain text for non-HTML mail clients"; //附加信息,可以省略 if(!$mail->Send()) { echo "邮件发送失败. <p>"; echo "错误原因: " . $mail->ErrorInfo; exit; } echo "邮件发送成功"; /************************************************* 附件: phpmailer 中文使用说明(简易版) A开头: $AltBody--属性 出自:PHPMailer::$AltBody 文件:class.phpmailer.php 说明:该属性的设置是在邮件正文不支持HTML的备用显示 AddAddress--方法 出自:PHPMailer::AddAddress(),文件:class.phpmailer.php 说明:增加收件人。参数1为收件人邮箱,参数2为收件人称呼。例 AddAddress("eb163@eb163.com","eb163"),但参数2可选,AddAddress(eb163@eb163.com)也是可以的。 函数原型:public function AddAddress($address, $name = '') {} AddAttachment--方法 出自:PHPMailer::AddAttachment() 文件:class.phpmailer.php。 说明:增加附件。 参数:路径,名称,编码,类型。其中,路径为必选,其他为可选 函数原型: AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream'){} AddBCC--方法 出自:PHPMailer::AddBCC() 文件:class.phpmailer.php 说明:增加一个密送。抄送和密送的区别请看[SMTP发件中的密送和抄送的区别] 。 参数1为地址,参数2为名称。注意此方法只支持在win32下使用SMTP,不支持mail函数 函数原型:public function AddBCC($address, $name = ''){} AddCC --方法 出自:PHPMailer::AddCC() 文件:class.phpmailer.php 说明:增加一个抄送。抄送和密送的区别请看[SMTP发件中的密送和抄送的区别] 。 参数1为地址,参数2为名称注意此方法只支持在win32下使用SMTP,不支持mail函数 函数原型:public function AddCC($address, $name = '') {} AddCustomHeader--方法 出自:PHPMailer::AddCustomHeader() 文件:class.phpmailer.php 说明:增加一个自定义的E-mail头部。 参数为头部信息 函数原型:public function AddCustomHeader($custom_header){} AddEmbeddedImage --方法 出自:PHPMailer::AddEmbeddedImage() 文件:class.phpmailer.php 说明:增加一个嵌入式图片 参数:路径,返回句柄[,名称,编码,类型] 函数原型:public function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') {} 提示:AddEmbeddedImage(PICTURE_PATH. "index_01.jpg ", "img_01 ", "index_01.jpg "); 在html中引用 AddReplyTo--方法 出自:PHPMailer:: AddRepl *************************************************/ ?>
                                                                                    Run code
                                                                                    Cut to clipboard


                                                                                      解决乱码,,就加上
                                                                                      $mail->CharSet = "utf-8"; // 这里指定字符集 $mail->Encoding = "base64";
                                                                                      Run code
                                                                                      Cut to clipboard

                                                                                        php简单上传图片、缩略图大小类

                                                                                        发布时间:2015-10-14, 16:42:53 | 评论:0 | 分类:PHP

                                                                                        <?php session_start(); if(!$_SESSION['admin']) exit('Error:bannnergly201111251'); //上传类型 $uptypes=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/x-png'); $max_file_size=4900000; $destination_folder=dirname(__FILE__).'/../upload/banner/'; //文件状态判断 $sy=@$_GET['sy']; $sy_arr=array('1','2','3'); $n=@$_GET['n']; $n_arr=array('zby','gny','cjy'); if(!in_array($sy, $sy_arr) && !in_array($n, $n_arr)) exit(); $sys=in_array($n, $n_arr)?$n:'sy'; if ($_SERVER['REQUEST_METHOD'] == 'POST'){ $file = $_FILES['upfile']; $filename=$file['tmp_name']; if (!is_uploaded_file($_FILES['upfile']['tmp_name'])) exit; if($max_file_size < $file['size']) exit; if(!in_array($file['type'], $uptypes)) exit; $destination = $destination_folder.$sys.$sy.".gif"; if(!move_uploaded_file ($filename, $destination)) exit; //调整上传图片的大小 $destinations = $destination_folder.$sys.'m'.$sy.".gif"; $size=getimagesize($destination); $width=200; $height=100; if($size[2]==1)$im_in=imagecreatefromgif($destination); if($size[2]==2)$im_in=imagecreatefromjpeg($destination); if($size[2]==3)$im_in=imagecreatefrompng($destination); $im_out=imagecreatetruecolor($width,$height); imagecopyresampled($im_out,$im_in,0,0,0,0,$width,$height,$size[0],$size[1]); imagejpeg($im_out,$destinations); chmod($destinations,0744); imagedestroy($im_in); imagedestroy($im_out); //if(!move_uploaded_file ($destination, $destinations)) exit; } echo "<script>window.location.href='../admin.php?admin=$sys';</script>"; exit();
                                                                                        Run code
                                                                                        Cut to clipboard

                                                                                          php取整函数

                                                                                          发布时间:2015-10-14, 16:48:12 | 评论:0 | 分类:PHP

                                                                                          有3个:

                                                                                          floor — 舍去法取整
                                                                                          floor ($value )
                                                                                          返回不大于 value 的下一个整数,将 value 的小数部分舍去取整。floor() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。
                                                                                          <?php echo floor(4.3); // 4 echo floor(9.999); // 9 ?>
                                                                                          Run code
                                                                                          Cut to clipboard


                                                                                            ceil — 进一法取整
                                                                                            ceil ( $value )
                                                                                            返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。
                                                                                            <?php echo ceil(4.3); // 5 echo ceil(9.999); // 10 ?>
                                                                                            Run code
                                                                                            Cut to clipboard


                                                                                              round — 对浮点数进行四舍五入
                                                                                              <?php echo round(3.4); // 3 echo round(3.5); // 4 echo round(3.6); // 4 echo round(3.6, 0); // 4 echo round(1.95583, 2); // 1.96 echo round(1241757, -3); // 1242000 echo round(5.045, 2); // 5.05 echo round(5.055, 2); // 5.06 ?>
                                                                                              Run code
                                                                                              Cut to clipboard

                                                                                                PHP保存网址快捷方式到桌面源码

                                                                                                发布时间:2015-10-14, 17:05:10 | 评论:0 | 分类:PHP

                                                                                                <?php //$title=iconv('utf-8','gbk',WEBNICK); $Shortcut = "[InternetShortcut] URL=http://www.12345t.com IDList= [{000214A0-0000-0000-C000-000000000046}] Prop3=19,2"; Header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=岑溪网站开发工作室.url;"); //TITLE等于标题 echo $Shortcut; ?>
                                                                                                Run code
                                                                                                Cut to clipboard
                                                                                                  你好,残忍屏蔽广告

                                                                                                  确定要清除编辑框内容吗?

                                                                                                  该删除操作将不可恢复。

                                                                                                  删除 取消

                                                                                                  激活Windows

                                                                                                  转到"设置"以激活Windows。