博客

  • PHP实现将base64编码字符串转换成图片

    $image="data:image/jpeg;base64,/….G7ht8DOCViCz3FzLhDLUw58f/Z"; // base64案例
    $imageName = "base64".date("YmdHis",time())."_".rand(1111,9999).'.png'; //设置生成的图片名字
    if (strstr($image,",")){ //判断是否有逗号 如果有就截取后半部分
    $image = explode(',',$image);
    $image = $image[1];
    }
    $path = "./".date("Ymd",time()); //设置图片保存路径
    if (!is_dir($path)){ //判断目录是否存在 不存在就创建 并赋予777权限
    mkdir($path,0777,true);
    }
    $imageSrc= $path."/". $imageName; //拼接路径和图片名称
    $r = file_put_contents($imageSrc, base64_decode($image));//生成图片 返回的是字节数
    if (!$r) { //判断图片是否生成成功
    $tmparr1=array('data'=>null,"code"=>1,"msg"=>"图片生成失败");
    echo json_encode($tmparr1);
    }else{
    $tmparr2=array('data'=>1,"code"=>0,"msg"=>"图片生成成功");
    echo json_encode($tmparr2);
    }

  • php获取本年、本月、本周时间戳和日期

     

    设置时区

    date_default_timezone_set("Asia/Shanghai"); 
    date_default_timezone_set('PRC');//这两种方法效果相同

    时间戳转日期,可以用date(‘Y-m-s h:i:s’, 具体时间戳来实现)
    日期转换时间戳,用strtotime("date()").

    时间戳格式

    //获取今日开始时间戳和结束时间戳  
    $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y'));  
    $endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;  
    
    //获取昨日起始时间戳和结束时间戳  
    $beginYesterday=mktime(0,0,0,date('m'),date('d')-1,date('Y'));  
    $endYesterday=mktime(0,0,0,date('m'),date('d'),date('Y'))-1;  
    
    //获取本周起始时间戳和结束时间戳   
    $beginThisweek = mktime(0,0,0,date('m'),date('d')-date('w')+1,date('y'));  
    $endThisweek=time();  
    
    //获取上周起始时间戳和结束时间戳  
    $beginLastweek=mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));  
    $endLastweek=mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));  
    
    //获取本月起始时间戳和结束时间戳  
    $beginThismonth=mktime(0,0,0,date('m'),1,date('Y'));  
    $endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));  
    
     //上个月的起始时间:  
    $begin_time = strtotime(date('Y-m-01 00:00:00',strtotime('-1 month')));  
    $end_time = strtotime(date("Y-m-d 23:59:59", strtotime(-date('d').'day')));  
    
    $begin_year = strtotime(date("Y",time())."-1"."-1"); //本年开始  
    $end_year = strtotime(date("Y",time())."-12"."-31"); //本年结束  
    
    //现在的时间到第二天凌晨相差的时间戳  
    $time = (strtotime(date('Y-m-d'))+3600*24) - time() ; 

    日期格式

        echo '<br>上周起始时间:<br>';
        echo date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),date("d")-date("w")+1-7,date("Y"))),"\n";
        echo date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7-7,date("Y"))),"\n";
        echo '<br>本周起始时间:<br>';
        echo date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y"))),"\n";
        echo date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7,date("Y"))),"\n";
    
        echo '<br>上月起始时间:<br>';
        echo date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m")-1,1,date("Y"))),"\n";
        echo date("Y-m-d H:i:s",mktime(23,59,59,date("m") ,0,date("Y"))),"\n";
        echo '<br>本月起始时间:<br>';
        echo date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),1,date("Y"))),"\n";
        echo date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("t"),date("Y"))),"\n";
        //本年起始
        echo date(‘Y-01-01’); 
        //结束日期 
        echo date(‘Y-12-31’);
  • php怎么输出当前版本号

    php输出当前版本号的方法:
    1、创建一个PHP示例文件;然后输入内容“phpinfo();”;最后执行该文件即可通过前台访问查看当前的PHP版本信息。
    2、echo '当前PHP版本: ' . phpversion() . "\n";

           当前PHP版本: 7.4.3

  • Array and string offset access syntax with curly braces is deprecated原因

    Array and string offset access syntax with curly braces is deprecated

    PHP7.4不再支持使用大括号访问数组以及字符串的偏移_PHP代码
    php7.4不支持数组{}写法,统一为数组[]

    解决办法:
    seq = ( ord (seq = (ord(seq=(ord(value{0}) % $rule[‘num’]) + 1;中的value{0}改为value[0]
    ————————————————
    版权声明:本文为CSDN博主「出门要带伞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_45467142/article/details/105982739

  • PhpExcel中文帮助手册|PhpExcel使用方法

    PhpExcel中文帮助手册|PhpExcel使用方法
    程序代码如下:
    下面是总结的几个使用方法
    
    include 'PHPExcel.php';
    
    include 'PHPExcel/Writer/Excel2007.php';
    
    //或者include 'PHPExcel/Writer/Excel5.php';
    
    用于输出.xls的创建一个excel
    
    $objPHPExcel = new PHPExcel();
    
    保存excel—2007格式$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
    
    //或者$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
    
    非2007格式
    
    $objWriter->save("xxx.xlsx");
    
    直接输出到浏览器
    
    $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
    
    header("Pragma: public");header("Expires: 0″);
    
    header("Cache-Control:must-revalidate, post-check=0, pre-check=0″);
    
    header("Content-Type:application/force-download");
    
    header("Content-Type:application/vnd.ms-execl");
    
    header("Content-Type:application/octet-stream");
    
    header("Content-Type:application/download");;
    
    header('Content-Disposition:attachment;filename="resume.xls"');
    
    header("Content-Transfer-Encoding:binary");
    
    $objWriter->save('php://output');
    
    ——————————————————————————————————————–
    
    设置excel的属性:
    
    创建人
    
    $objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
    
    最后修改人
    
    $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
    
    标题
    
    $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
    
    题目
    
    $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
    
    描述
    
    $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX,generated using PHP classes.");
    
    关键字
    
    $objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
    
    种类
    
    $objPHPExcel->getProperties()->setCategory("Test result file");
    
    ——————————————————————————————————————–
    
    设置当前的sheet
    
    $objPHPExcel->setActiveSheetIndex(0);
    
    设置sheet的name
    
    $objPHPExcel->getActiveSheet()->setTitle('Simple');
    
    设置单元格的值
    
    $objPHPExcel->getActiveSheet()->setCellValue('A1', 'String');
    
    $objPHPExcel->getActiveSheet()->setCellValue('A2', 12);
    
    $objPHPExcel->getActiveSheet()->setCellValue('A3', true);
    
    $objPHPExcel->getActiveSheet()->setCellValue('C5', '=SUM(C2:C4)');
    
    $objPHPExcel->getActiveSheet()->setCellValue('B8', '=MIN(B2:C5)');
    
    合并单元格
    
    $objPHPExcel->getActiveSheet()->mergeCells('A18:E22');
    
    分离单元格
    
    $objPHPExcel->getActiveSheet()->unmergeCells('A28:B28');
    
    保护
    
    cell$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
    
    // Needs to be set to true in order to enable any worksheet protection!
    
    $objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');
    
    设置格式
    
    // Set cell number formatsecho date('H:i:s') . " Set cell number formats\n";
    
    $objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()
    
    ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
    
    $objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('E4'), 'E5:E13' );
    
    设置宽width// Set column widths$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
    
    $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);
    
    设置font$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setName('Candara');
    
    $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(20);
    
    $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
    
    $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
    
    $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
    
    $objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
    
    $objPHPExcel->getActiveSheet()->getStyle('D13')->getFont()->setBold(true);
    
    $objPHPExcel->getActiveSheet()->getStyle('E13')->getFont()->setBold(true);
    
    设置
    
    align$objPHPExcel->getActiveSheet()->getStyle('D11')->getAlignment()->
    
    setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
    
    $objPHPExcel->getActiveSheet()->getStyle('D12')->getAlignment()->
    
    setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
    
    $objPHPExcel->getActiveSheet()->getStyle('D13')->getAlignment()->
    
    setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
    
    $objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->
    
    setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
    
    //垂直居中
    
    $objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->
    
    setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
    
    设置column的border$objPHPExcel->getActiveSheet()->getStyle('A4')->getBorders()->getTop()->
    
    setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);$objPHPExcel->getActiveSheet()->getStyle('B4')->
    
    getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    
    $objPHPExcel->getActiveSheet()->getStyle('C4')->getBorders()->getTop()->
    
    setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    
    $objPHPExcel->getActiveSheet()->getStyle('D4')->getBorders()->getTop()->
    
    setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    
    $objPHPExcel->getActiveSheet()->getStyle('E4')->getBorders()->getTop()->
    
    setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    
    设置border的color$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->
    
    getColor()->setARGB('FF993300');
    
    $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
    
    $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
    
    $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
    
    $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
    
    $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300');
    
    设置填充颜色
    
    $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
    
    $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF808080');
    
    $objPHPExcel->getActiveSheet()->getStyle('B1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
    
    $objPHPExcel->getActiveSheet()->getStyle('B1')->getFill()->getStartColor()->setARGB('FF808080');
    
    加图片$objDrawing = new PHPExcel_Worksheet_Drawing();$objDrawing->setName('Logo');
    
    $objDrawing->setDescription('Logo');$objDrawing->setPath('./images/officelogo.jpg');
    
    $objDrawing->setHeight(36);$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
    
    $objDrawing = new PHPExcel_Worksheet_Drawing();$objDrawing->setName('Paid');
    
    $objDrawing->setDescription('Paid');$objDrawing->setPath('./images/paid.png');
    
    $objDrawing->setCoordinates('B15');$objDrawing->setOffsetX(110);
    
    $objDrawing->setRotation(25);$objDrawing->getShadow()->setVisible(true);
    
    $objDrawing->getShadow()->setDirection(45);$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
    
    //处理中文输出问题需要将字符串转化为UTF-8编码,才能正常输出,否则中文字符将输出为空白,
    
    如下处理: $str  = iconv('gb2312', 'utf-8', $str);
    
    或者你可以写一个函数专门处理中文字符串:function convertUTF8($str)
    
    {   if(empty($str)) return '';   return  iconv('gb2312', 'utf-8', $str);
    
    }//从数据库输出数据处理方式从数据库读取数据如:
    
    $db = new Mysql($dbconfig);
    
    $sql = "SELECT * FROM  表名";
    
    $row = $db->GetAll($sql); 
    
    // $row 为二维数组
    
    $count = count($row);
    
    for ($i = 2; $i <= $count+1; $i++) {
    
    $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, convertUTF8($row[$i-2][1]));
    
    $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, convertUTF8($row[$i-2][2]));
    
    $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, convertUTF8($row[$i-2][3]));
    
    $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, convertUTF8($row[$i-2][4]));
    
    $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, convertUTF8(date("Y-m-d", $row[$i-2][5])));
    
    $objPHPExcel->getActiveSheet()->setCellValue('F' . $i, convertUTF8($row[$i-2][6]));
    
    $objPHPExcel->getActiveSheet()->setCellValue('G' . $i, convertUTF8($row[$i-2][7]));
    
    $objPHPExcel->getActiveSheet()->setCellValue('H' . $i, convertUTF8($row[$i-2][8]));
    
    }
    
    在默认sheet后,创建一个worksheetecho date('H:i:s') . " Create new Worksheet object\n";
    
    $objPHPExcel->createSheet();
    
    $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
    
    $objWriter-save('php://output');
    

    本文原创发布php中文网 ,转载请注明出处,感谢您的尊重!
  • php如何去掉中括号

    php去掉中括号的方法:首先创建一个PHP示例文件;然后通过正则表达式“preg_replace('/\[.*?\]/', '', $str);”去除中括号以及中括号里面的内容;最后通过echo输出运行结果即可。
    程序代码如下:
    $str = '9sfa[ksl64546+j]s45';
    $str = preg_replace('/\[.*?\]/', '', $str);
    echo $str;exit;
    

    本文原创发布php中文网 ,转载请注明出处,感谢您的尊重!
  • PHP远程读取excel文件,怎么读取?

    先把远程的弄到本地里。
    最简单代码是:

    file_put_contents('abc.xls',file_get_contents('http://www.xx.com/abc.xls'));
    
    
  • phpspreadsheet 导出导入excel简单封装

    1.composer 安装

    composer require phpoffice/phpspreadsheet 1.8.2
    

      因为要兼容php5.6,所以是用的1.8.2版本

    2.在公共函数文件中引入头文件

    use PhpOffice\PhpSpreadsheet\Spreadsheet;
    use PhpOffice\PhpSpreadsheet\IOFactory;
    use PhpOffice\PhpSpreadsheet\Style\Alignment;
    

    3.定义导出封装函数

    if (!function_exists('downLoadExcel')){
        /**
         * 导出excel
         * @param $name excel名称
         * @param $titles 标题 [['name'=>'姓名'],['gender'=>'性别']]
         * @param array $data
         * @throws \PhpOffice\PhpSpreadsheet\Exception
         * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
         */
        function downLoadExcel($name, $titles, $data=[])
        {
            $count = count($titles);  //计算表头数量
            $spreadsheet = new Spreadsheet();
            $styleArray = [
                'alignment' => [
                    'horizontal' => Alignment::HORIZONTAL_CENTER_CONTINUOUS,
                    'vertical' => Alignment::VERTICAL_CENTER,
                ],
            ];
            $sheet = $spreadsheet->getActiveSheet();
            for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始,循环设置表头
                $sheet->getStyle(strtoupper(chr($i)))->applyFromArray($styleArray);
                $sheet->getCell(strtoupper(chr($i)).'1')->getStyle()->getFont()->setBold(true);
                $index = $i - 65;
                $sheet->setCellValue(strtoupper(chr($i)) . '1',  $titles[$index][key($titles[$index])] );
            }
            
            /*--------------开始从数据库提取信息插入Excel表中------------------*/
            foreach ($data as $key => $item) {             //循环设置单元格:
                //$key+2,因为第一行是表头,所以写到表格时   从第二行开始写
                for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始:
                    $sheet->setCellValue(strtoupper(chr($i)) . ($key + 2),$item[key($titles[$i - 65])]);
                    $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setAutoSize(true);
                }
            }
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="' . $name . '.xlsx"');
            header('Cache-Control: max-age=0');
            $writer = IOFactory::createWriter($spreadsheet,'Xlsx');
            $writer->save('php://output');
            //删除清空
            $spreadsheet->disconnectWorksheets();
            unset($spreadsheet);
            exit;
        }
    }
    

    4.定义导入封装函数

    if (!function_exists('importExcel')){
        
        /**
         * 导入excel
         * @param $filePath 文件路径
         * @param $cols 要导入的列 从1开始 $cols = [['1' => 'id'],['2' =>'name']];
         * @param int $sheetIndex sheet索引,默认从0开始
         * @return array
         * @throws \PhpOffice\PhpSpreadsheet\Exception
         * @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
         */
        function importExcel($filePath, $cols, $sheetIndex = 0){
    
            $reader = IOFactory::createReader('Xlsx');
            $reader->setReadDataOnly(TRUE);
            $spreadsheet = $reader->load($filePath); //载入excel表格
    
            $sheetCount =  $spreadsheet->getSheetCount();
            if ($sheetIndex > $sheetCount - 1){
                exit('sheet不存在');
            }
            $worksheet = $spreadsheet->getSheet($sheetIndex);
            $highestRow = $worksheet->getHighestRow(); // 总行数
            $lines = $highestRow - 2;
            if ($lines <= 0) {
                exit('Excel表格中没有数据');
            }
            $data = [];
            for ($row = 2; $row <= $highestRow; $row++) {
                for ($i = 0; $i < count($cols); $i ++){
                    $index = key($cols[$i]);
                    $key = array_values($cols[$i])[0];
                    $data[$row][$key] = $worksheet->getCellByColumnAndRow($index, $row)->getValue(); //学号
                }
            }
            return array_values($data);
        }
    
    }
    

    5.导出测试使用

    $titles = [['name'=>'姓名'],['gender'=>'性别']];
    $data = [
        ['name'=>'小黑','gender'=>'男']
    ];
    downLoadExcel('测试',$titles,$data);
    

     6.导入测试使用

        excel如下

       $path = ROOT_PATH.DS.'public'.DS.'excel'.DS.'student.xlsx';
            if (is_file($path)){
                $cols = [['2' => 'name'],['3' =>'gender'],['4' => 'class']];
                $data = importExcel($path,$cols);
                halt($data);
            }
    

    col是第几列对应数组的key,这样就只会获取excel的姓名,性别,班级的数据

     

  • nginx 404 not fund 配置 thinkphp6 伪静态

    描述:使用phpstudy 的 apache 切换到nginx 控制器报错 404 not fund
    配置如下:
    location / {
        if (!-e $request_filename){
            rewrite ^/index.php(.*)$ /index.php?s=$1 last;
            rewrite  ^(.*)$  /index.php?s=$1  last;   break;
        }
    }
    

    附录:

    URL设计

    6.0的URL访问受路由影响,如果在没有定义或匹配路由的情况下(并且没有开启强制路由模式的话),则是基于:

    http://serverName/index.php(或者其它入口文件)/控制器/操作/参数/值…
    

    复制

    如果使用自动多应用模式的话,URL一般是

    http://serverName/index.php/应用/控制器/操作/参数/...
    

    复制

    普通模式的URL访问不再支持,但参数可以支持普通方式传值

    如果不支持PATHINFO的服务器可以使用兼容模式访问如下:

    http://serverName/index.php?s=/控制器/操作/[参数名/参数值...]
    

    复制

    URL重写

    可以通过URL重写隐藏应用的入口文件index.php(也可以是其它的入口文件,但URL重写通常只能设置一个入口文件),下面是相关服务器的配置参考:

    [ Apache ]

    1. httpd.conf配置文件中加载了mod_rewrite.so模块
    2. AllowOverride NoneNone改为 All
    3. 把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下
    <IfModule mod_rewrite.c>
      Options +FollowSymlinks -Multiviews
      RewriteEngine On
    
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    </IfModule>
    

    复制

    [ IIS ]

    如果你的服务器环境支持ISAPI_Rewrite的话,可以配置httpd.ini文件,添加下面的内容:

    RewriteRule (.*)$ /index\.php\?s=$1 [I]
    

    复制

    在IIS的高版本下面可以配置web.Config,在中间添加rewrite节点:

    <rewrite>
     <rules>
     <rule name="OrgPage" stopProcessing="true">
     <match url="^(.*)$" />
     <conditions logicalGrouping="MatchAll">
     <add input="{HTTP_HOST}" pattern="^(.*)$" />
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
     </conditions>
     <action type="Rewrite" url="index.php/{R:1}" />
     </rule>
     </rules>
     </rewrite>
    

    复制

    [ Nginx ]

    在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:

    location / {
       if (!-e $request_filename) {
       		rewrite  ^(.*)$  /index.php?s=/$1  last;
        }
    }
    

    复制

    其实内部是转发到了ThinkPHP提供的兼容URL,利用这种方式,可以解决其他不支持PATHINFO的WEB服务器环境。

     
  • php怎么实现图片压缩

    php实现图片压缩的方法:首先通过“openImage”方法打开图片;然后使用“thumpImage”操作图片;接着将原图复制到图片载体上,并按照一定比例压缩;最后输出图片即可。

    PHP实现图片压缩同时保持清晰度

    代码如下:
    /**
     * 图片压缩类:通过缩放来压缩。
     * 如果要保持源图比例,把参数$percent保持为1即可。
     * 即使原比例压缩,也可大幅度缩小。数码相机4M图片。也可以缩为700KB左右。如果缩小比例,则体积会更小。
     *
     * 结果:可保存、可直接显示。
     */
    
    class imgcompress{
    
        private $src;
    
        private $image;
    
        private $imageinfo;
    
        private $percent = 0.5;
    
        /**
         * 图片压缩
         * @param $src 源图
         * @param float $percent  压缩比例
         */
    
        public function __construct($src, $percent=1)
    
        {
    
            $this->src = $src;
    
            $this->percent = $percent;
    
        }
    
        /** 高清压缩图片
         * @param string $saveName  提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示
         */
    
        public function compressImg($saveName='')
    
        {
    
            $this->_openImage();
    
            if(!empty($saveName)) $this->_saveImage($saveName);  //保存
    
            else $this->_showImage();
    
        }
    
        /**
         * 内部:打开图片
         */
    
        private function _openImage()
    
        {
    
            list($width, $height, $type, $attr) = getimagesize($this->src);
    
            $this->imageinfo = array(
    
                'width'=>$width,
    
                'height'=>$height,
    
                'type'=>image_type_to_extension($type,false),
    
                'attr'=>$attr
    
            );
    
            $fun = "imagecreatefrom".$this->imageinfo['type'];
    
            $this->image = $fun($this->src);
    
            $this->_thumpImage();
    
        }
    
        /**
         * 内部:操作图片
         */
    
        private function _thumpImage()
    
        {
    
            $new_width = $this->imageinfo['width'] * $this->percent;
    
            $new_height = $this->imageinfo['height'] * $this->percent;
    
            $image_thump = imagecreatetruecolor($new_width,$new_height);
    
            //将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
    
            imagecopyresampled($image_thump,$this->image,0,0,0,0,$new_width,$new_height,$this->imageinfo['width'],$this->imageinfo['height']);
    
            imagedestroy($this->image);
    
            $this->image = $image_thump;
    
        }
    
        /**
         * 输出图片:保存图片则用saveImage()
         */
    
        private function _showImage()
    
        {
    
            header('Content-Type: image/'.$this->imageinfo['type']);
    
            $funcs = "image".$this->imageinfo['type'];
    
            $funcs($this->image);
    
        }
    
        /**
         * 保存图片到硬盘:
         * @param  string $dstImgName  1、可指定字符串不带后缀的名称,使用源图扩展名 。2、直接指定目标图片名带扩展名。
         */
    
        private function _saveImage($dstImgName)
    
        {
    
            if(empty($dstImgName)) return false;
    
            $allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif'];   //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
    
            $dstExt =  strrchr($dstImgName ,".");
    
            $sourseExt = strrchr($this->src ,".");
    
            if(!empty($dstExt)) $dstExt =strtolower($dstExt);
    
            if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt);
    
            //有指定目标名扩展名
    
            if(!empty($dstExt) && in_array($dstExt,$allowImgs)){
    
                $dstName = $dstImgName;
    
            }elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)){
    
                $dstName = $dstImgName.$sourseExt;
    
            }else{
    
                $dstName = $dstImgName.$this->imageinfo['type'];
    
            }
    
            $funcs = "image".$this->imageinfo['type'];
    
            $funcs($this->image,$dstName);
    
        }
    
        /**
         * 销毁图片
         */
    
        public function __destruct(){
    
            imagedestroy($this->image);
    
        }
    
    }
    
    $source =  '123.png';//原图片名称
    
    $dst_img = 'text.png';//压缩后图片的名称
    
    $percent = 1;  #原图压缩,不缩放,但体积大大降低
    
    $image = (new imgcompress($source,$percent))->compressImg($dst_img);
    

    本文原创发布php中文网 ,转载请注明出处,感谢您的尊重!