标签: php

  • PHP 解决curl_exec直接显示内容的问题

    PHP 解决curl_exec直接显示内容的问题。

    调用curl_exec会直接显示接收到的内空,而不是保存在变量中,这个问题可以通过设置:

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    来解决

    function getRemoteData() {
        //echo 'from remote';
        $url = 'http://www.6166.cc/game/lotteryServlet?type=showBet&isNewLottery=true&lotteryId=9' ;
        $ch = curl_init($url );
        curl_setopt($ch,CURLOPT_HTTPHEADER,array('Host:www.6166.cc','Upgrade-Insecure-Requests:1'));
        curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
        curl_setopt($ch,CURLOPT_COOKIESESSION,true);
        curl_setopt ($ch, CURLOPT_TIMEOUT,500 );
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); // 获取302跳转之后的内容
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // 如果不加此句,则curl_exec会直接显示内容,而不是把内容保存到返回值中
        $ret = curl_exec($ch);
    
        curl_close($ch);   
        return $ret;
    }
  • PHP把\n换行符转成<br>

    PHP把\n换行符转成<br>:

    nl2br('abc\ndef'); // 输出abc<br/>def

    函数名的意思是 new line to br

  • 在Codeigniter中使用Blade模板引擎

    在Codeigniter中使用Blade模板引擎:

    使用compoer引入blade库

    composer require "philo/laravel-blade": "3.*"

    在helpers目录下创建 view_helper.php

    <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
    require_once 'vendor/autoload.php';
    
    use Philo\Blade\Blade;
    
    if (!function_exists('view')) {
        function view($name = NULL, $data = [], $mergeData = [])
        {
            $CI = &get_instance();
            if (!isset($CI->blade)) {
                $views = __DIR__ . '/../views';
                $cache = __DIR__ . '/../cache';
                $CI->blade = new Blade($views, $cache);
                $elapsed_time = $CI->benchmark->elapsed_time('total_execution_time_start', 'total_execution_time_end');
                $CI->blade->view()->share('elapsed_time', $elapsed_time);
            }
            echo $CI->blade->view()->make($name, $data, $mergeData)->render();
        }
    }
    

    在config/autoload.php中,引入 

    $autoload['helper'] = array('view', 'url');

    controller中:

    <?php defined('BASEPATH') or exit('No direct script access allowed');
    class Welcome extends CI_Controller
    {
        public function index()
        {
            return view('index', ['name' => 'haha']);
        }
        public function test()
        {
            echo 'this is a test';
        }
    }

    还是喜欢codeigniter的简洁和可扩展性,用来做中小项目还是很爽的。

  • PHP验证码类

    PHP验证码类

    <?php
    /**
     * 验证码
     */
    class Code{
    
      // 1. 定义各个成员 有宽、高、画布、字数、类型、画类型
    
      private $width; //宽度
      private $height; //高度
      private $num; //验证码字数
      private $imgType; //生成图片类型
      private $Type; //字串类型 1,2,3 三个选项 1 纯数字 2 纯小写字母 3 大小写数字混合
      private $hb; //画布
      public $codestr; // 验证码字串
    
      public function __construct($height=20,$num=4,$imgType="jpeg",$Type=1){
        $this->width = $num*20;
        $this->height = $height;
        $this->num = $num;
        $this->imgType = $imgType;
        $this->Type = $Type;
        $this->codestr = $this->codestr();
        $this->zuhe();
      }
    
      // 2. 定义随机获取字符串函数
      private function codestr(){
        switch($this->Type){
    
          case 1:   // 类型为1 获取1-9随机数
            $str = implode("",array_rand(range(0,9),$this->num));
            break;
          case 2:   // 类型为2 获取a-z随机小写字母
            $str = implode("",array_rand(array_flip(range(a,z)),$this->num));
            break;
          case 3:   // 类型为3 获取数字,小写字母,大写字母 混合
            for($i=0;$i<$this->num;$i++){
              $m = rand(0,2);
              switch($m){
                case 0:
                  $o = rand(48,57);
                  break;
                case 1:
                  $o = rand(65,90);
                  break;
                case 2:
                  $o = rand(97,122);
                  break;
              }
              $str .= sprintf("%c",$o);
            }
            break;
        }
    
    
        return $str;
      }
    
    
      // 3. 初始化画布图像资源
      private function Hb(){
        $this->hb = imagecreatetruecolor($this->width,$this->height);
      }
    
      // 4. 生成背景颜色
      private function Bg(){
        return imagecolorallocate($this->hb,rand(130,250),rand(130,250),rand(130,250));
      }
    
      // 5. 生成字体颜色
      private function Font(){
        return imagecolorallocate($this->hb,rand(0,100),rand(0,100),rand(0,100));
      }
    
      // 6. 填充背景颜色
      private function BgColor(){
        imagefilledrectangle($this->hb,0,0,$this->width,$this->height,$this->Bg());
      }
    
      // 7. 干扰点
      private function ganrao(){
        $sum=floor(($this->width)*($this->height)/3);
        for($i=0;$i<$sum;$i++){
          imagesetpixel($this->hb,rand(0,$this->width),rand(0,$this->height),$this->Bg());
        }
      }
    
      // 8. 随机直线 弧线
      private function huxian(){
        for($i=0;$i<$this->num;$i++){
          imageArc($this->hb,rand(0,$this->width),rand(0,$this->height),rand(0,$this->width),rand(0,$this->height),rand(0,360),rand(0,360),$this->Bg());
        }
      }
    
      // 9. 写字
      private function xiezi(){
        for($i=0;$i<$this->num;$i++){
          $x=ceil($this->width/$this->num)*$i;
          $y=rand(1,$this->height-15);
          imagechar($this->hb,5,$x+4,$y,$this->codestr[$i],$this->Font());
        }
      }
    
      // 10. 输出
      private function OutImg(){
        $shuchu="image".$this->imgType;
        $header="Content-type:image/".$this->imgType;
        if(function_exists($shuchu)){
          header($header);
          $shuchu($this->hb);
        }else{
          exit("GD库没有此类图像");
        }
      }
    
      // 11. 拼装
      private function zuhe(){
        $this->Hb();
        $this->BgColor();
        $this->ganrao();
        $this->huxian();
        $this->xiezi();
        $this->OutImg();
      }
    
      public function getCodeStr(){
        return $this->codestr;
      }
    }
    ?>
    
  • PHP比较两个时间不否是同一天

    PHP比较两个时间不否是同一天

    if (strcmp(date('Y-m-d',strtotime($dt)), date("Y-m-d",strtotime('2015-12-18'))) == 0 )

  • 解决 Warning: mysqli_connect(): [2002] No such file or directory

    解决 Warning: mysqli_connect(): [2002] No such file or directory

    找到 mysqld.sock 然后软链接到  /tmp/mysql.sock

    ln -s /var/run/mysqld/mysqld.sock  /tmp/mysql.sock

  • php开发心得

    php一个页面一个页面的写,页面逻辑全部高度自治,除了通用配置,做到业务上无依赖。

  • 让PHP函数json_encode不转义中文

    让PHP函数json_encode不转义中文

    echo json_encode($ret, JSON_UNESCAPED_UNICODE);

  • PHP7 编译配置参数

    PHP7 编译配置参数

    ubuntu14.04上需要安装的库

    apt-get -y  install libxml2-dev libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev  libcurl4-openssl-dev  make gcc

    说明:configure 是用来生成makefle的

    配合apache的编译参数

    ./configure --prefix=/www/php --with-apxs2=/www/httpd/bin/apxs --enable-cli --enable-shared --with-libxml-dir --with-gd --with-openssl --enable-mbstring --with-mcrypt --with-mysqli --enable-opcache --enable-mysqlnd --enable-zip --with-zlib-dir --with-pdo-mysql --with-jpeg-dir --with-freetype-dir --with-curl --with-pdo-sqlite --with-sqlite3  --disable-fileinfo

    配合nginx使用的编译参数

    先要安装Pgsql的开发包 apt-get install postgresql-server-dev-9.5

    -dev的包一般是用来提供依赖关系的。

    ./configure --prefix=/usr/local/php5 --with-gd --with-curl  --enable-fpm --enable-cgi --with-openssl --enable-mbstring --with-mcrypt --with-pdo-mysql --enable-zip --with-mysqli --enable-opcache --enable-mysqlnd --with-libxml-dir --with-jpeg-dir --with-freetype-dir --with-pdo-sqlite --with-sqlite3  --disable-fileinfo --enable-cli --enable-shared 

    要使用PG的话就加上下面两个参数

    --with-pdo-pgsql --with-pgsql=/usr/lib/postgresql

    注意:–with-pgsql=/usr/lib/postgresql的路径只在ubuntu14.04 64位上测试通过

    make && make install

    最后把php加入环境变量

    sudo echo "PATH=$PATH:/www/php/bin">> /etc/profile
    echo "PATH=$PATH:/usr/local/php5/bin">> /etc/profile

    最后把php.ini 拷贝到/www/php/lib下面

    cp php.ini-development /usr/local/php5/lib/php.ini
  • 记录一下php empty的坑

    php empty的坑:

    empty函数对于参数0也认为是TRUE

    比如:

    $a=0;

    那么 empty($a) 为真。

    真的坑。。