四时宝库

程序员的知识宝库

使用Laravel & Vue的高级服务器端渲染:多页应用程序

关于Laravel的新的Vue服务器端渲染功能的教程。该教程主要集中在Laravel环境中设置SSR,所以我只有时间来演示一个简单的“Hello World”应用程序,没有显着的功能。

现在我想要构建上一个教程,并演示如何使用Vue Router呈现包含多个页面的Vue应用程序,因为大多数Laravel项目都有多个页面。

php下载网络图片到本地(php下载图片并保存图片)

/**
 * PHP将网页上的图片攫取到本地存储
 * @param $imgUrl 图片url地址
 * @param string $saveDir 本地存储路径 默认存储在当前路径
 * @param null $fileName 图片存储到本地的文件名
 * @return mix
 */
function crabImage($imgUrl, $saveDir='./', $fileName=null){
	
	if(empty($imgUrl)){
		return false;
	}
	
	//获取图片信息大小
	$imgSize = getImageSize($imgUrl);
	if(!in_array($imgSize['mime'],array('image/jpg', 'image/gif', 'image/png', 'image/jpeg'),true)){
		return false;
	}
	
	//获取后缀名
	$_mime = explode('/', $imgSize['mime']);
	$_ext = '.'.end($_mime);
	
	if(empty($fileName)){ //生成唯一的文件名
		$fileName = uniqid(time(),true).$_ext;
	}
	
	//开始攫取
	ob_start();
	//读入一个文件,并写入到输出缓冲
	readfile($imgUrl);
	//从缓冲中读取内容
	$imgInfo = ob_get_contents();
	//清除缓冲内容
	ob_end_clean();
	
	if(!file_exists($saveDir)){
		mkdir($saveDir,0777,true);
	}
	
	$fp = fopen($saveDir.$fileName, 'a');
	$imgLen = strlen($imgInfo); //计算图片源码大小
	$_inx = 1024; //每次写入1k
	$_time = ceil($imgLen/$_inx);
	for($i=0; $i<$_time; $i++){
		fwrite($fp,substr($imgInfo, $i*$_inx, $_inx));
	}
	fclose($fp);
	return array('file_name'=>$fileName, 'save_path'=>$saveDir.$fileName);
}

//$url = 'https://www.baidu.com/img/baidu_jgylogo3.gif';
//$url = 'http://www.phpernote.com/images/logo.gif';
$url = 'http://avatar.csdn.net/5/3/6/1_u014236259.jpg';

var_dump( crabImage($url) );

WP主题开发09:wordpress主题trans首页左侧主体的修改

在上一节中,我们修改好了wordpress主题trans的首页的状况。本节,我们再来介绍如何修改trans主题首页模板的左侧主体代码。trans主题首页左侧主要展现的是最新文章列表以及分页(如下图)。

?目前,这个首页的内容还是死的,是一个静态的文件,wordpress后台发表新的文章,这里也不会发生变化。我们需要实现的是:在我们发表文章后,这里就要发生相应的变化——我们新发表的文章会展示在这个列表中。还有,我们要实现点击分页按钮时,也能跳到对应的页面。下面,我们就来一步一步地操作。

如何使用PHPExcel插件完成数据导出为Excel表

我们在使用PHP开发后台时,经常会用到数据统计导出的功能,这个功能要怎么去实现呢?今天,就让小编带领大家去完成这个功能吧。PHPExcel插件可以在网上下载,这里不做过多陈述。

我们先来看一下效果:

设置文件编码为utf8

header("Content-type: text/html; charset=utf-8");

php海报生成(php合成图片分享海报源码)

<?php
namespace app\service;

class PosterService{
  
    public static function create($config = [], $filename = ''){
        $imageDefault = array(
          'url'=>'图片路径'
            'left'    => 0,
            'top'     => 0,
            'width'   => 100,
            'height'  => 100,
            'opacity' => 100,
            'circle'  => 0
        );
        $qrcodeDefault = [
            'text'   => '二维码内存',
            'size'   => 100,
            'margin' => 2,
            'left'   => 0,
            'top'    => 0,
            'color'  => '0,0,0',
            'callback' => function(){}
        ];
        $textDefault =  array(
            'text'      => '文字内存',
            'left'      => 0,
            'top'       => 0,
            'align'       => '',//center
            'font-size' => 32,//字号
            'color'     => '0,0,0', //字体颜色
            'angle'     => 0,
            'font-path'  => '' //字体路径
        );

        $background = $config['background'];//海报最底层得背景
        //背景方法
        $backgroundInfo = getimagesize($background);
        $backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
        $background = $backgroundFun($background);

        $backgroundWidth = imagesx($background);    //背景宽度
        $backgroundHeight = imagesy($background);   //背景高度

        $imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);
        $color = imagecolorallocate($imageRes, 0, 0, 0);
        imagefill($imageRes, 0, 0, $color);

        //imageColorTransparent($imageRes, $color);    //颜色透明

        imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));

        if (!empty($config['qrcode'])){
            foreach ($config['qrcode'] as $item){
                $item = array_merge($qrcodeDefault, $item);
                list($r,$b,$g) = explode(',', $item['color']);
                $item['color'] = ['r' => $r, 'g' => $b, 'b' => $g];
                $baseImage = imagecreatefromstring($item['callback']($item));
                $resWidth  = $resHeight = min(imagesx($baseImage), imagesy($baseImage));;
                //建立画板 ,缩放图片至指定尺寸
                $canvas = imagecreatetruecolor($item['size'], $item['size']);
                // 码的背景颜色
                $color  = imagecolorallocate($canvas, 255, 255, 255);
                // 设置透明背景
                imagecolortransparent($canvas, $color);
                imagefill($canvas,0,0,$color);
                //关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)
                imagecopyresampled($canvas, $baseImage, 0, 0, 0, 0, $item['size'], $item['size'],$resWidth, $resHeight);

                imagecopymerge($imageRes, $canvas, $item['left'],$item['top'],0,0, $item['size'], $item['size'],100);
            }
        }
        //处理了图片
        if(!empty($config['image'])){
            foreach ($config['image'] as $key => $val) {
                $val = array_merge($imageDefault,$val);

                $info = getimagesize($val['url']);
                if($val['circle']){       //如果传的是字符串图像流
                    $canvas = self::imageRadius($val['url'], $val['width']/2);
                }else{
                    $function = 'imagecreatefrom'.image_type_to_extension($info[2], false);
                    $res = $function($val['url']);
                    $resWidth = $info[0];
                    $resHeight = $info[1];
                    //建立画板 ,缩放图片至指定尺寸
                    $canvas=imagecreatetruecolor($val['width'], $val['height']);
                    imagefill($canvas, 0, 0, $color);
                    //关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)
                    imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
                }
                $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
                $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];
                //放置图像
                imagecopymerge($imageRes,$canvas, $val['left'], $val['top'], 0, 0, $val['width'], $val['height'],$val['opacity']);//左,上,右,下,宽度,高度,透明度
                imagedestroy($canvas);
            }
        }

        //处理文字
        if(!empty($config['text'])){
            foreach ($config['text'] as $key => $val) {
                $val = array_merge($textDefault,$val);
                list($R,$G,$B) = explode(',', $val['color']);
                $color = imagecolorallocate($imageRes, $R, $G, $B);
                $arr = imagettfbbox($val['font-size'],0,$val['font-path'],$val['text']);
                $text_height = $arr[3] - $arr[5];
                if ($val['align'] == 'center'){
                    $text_width = $arr[2]-$arr[0];
                    $val['left'] = ($backgroundWidth - $text_width)/2;
                }else{
                    $val['left'] = $val['left'] < 0 ? $backgroundWidth- abs($val['left']):$val['left'];
                }
                $val['top'] = $val['top'] < 0 ? $backgroundHeight- abs($val['top']) : $val['top'];
                $val['top'] += $text_height;
                imagettftext($imageRes,$val['font-size'],$val['angle'],$val['left'],$val['top'],$color,$val['font-path'],$val['text']);
            }
        }

        //生成图片
        if(!empty($filename)){
            if ($filename == 'base64'){
                ob_start();
                imagepng($imageRes);//在浏览器上显示
                $string = strval(ob_get_contents());
                ob_end_clean();
                return 'data:image/png;base64,'.base64_encode($string);
            }
            $res = imagepng($imageRes, RUNTIME_PATH.'/'. $filename,90); //保存到本地
            imagedestroy($imageRes);
            if(!$res) return false;
            return $filename;
        }else{
            ob_start();
            imagepng($imageRes);//在浏览器上显示
            $string = strval(ob_get_contents());
            ob_end_clean();
            return $string;
        }
    }


    /**
     * 生成圆形
     * @param $image 图片地址
     * @param null $radius 半径
     * @return false|\GdImage|resource
     */
    public static function imageRadius($image, $radius = null){
        /**
         * 处理圆形图
         * @param $image 图片地址
         * @return string
         */
        $logo = imagecreatefromstring(file_get_contents($image));//源图象连接资源。
        $height = $width = min(imagesx($logo), imagesy($logo));
        if ($radius && $width / 2 < $radius){
            $new_w = $new_h = $radius * 2;
            $new   = imagecreatetruecolor($new_w, $new_h);
            imagecopyresized($new, $logo,0, 0,0, 0, $new_w, $new_h, $width, $height);
            $width  = $height = $new_w;
            $logo  = $new;
        }

        //创建一个和二维码图片一样大小的真彩色画布
        $canvas = imagecreatetruecolor($width, $height);
        $color = imagecolorallocatealpha($canvas, 0, 0, 0, 127);
        imagesavealpha($canvas, true);
        imagealphablending($canvas, false);
        imagefill($canvas, 0, 0, $color);
        imageColorTransparent($canvas, $color);
        $r = $width / 2;   //半径
        for ($x = 0; $x < $width; $x++) {
            for ($y = 0; $y < $height; $y++) {
                $rgb_color = imagecolorat($logo, $x, $y);
                if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r) < ($r * $r)))) {
                    imagesetpixel($canvas, $x, $y, $rgb_color);
                }
            }
        }
        imagedestroy($logo);
        /*ob_start();
        imagepng($canvas);//在浏览器上显示
        $string = strval(ob_get_contents());
        ob_end_clean();
        file_put_contents(RUNTIME_PATH.'/avatar.png',$string);*/
        return $canvas;
    }
}

使用PHP获取Bing搜索每日图片(php获取百度搜索内容)

Bing搜索的首页每天都会推送一张很漂亮的图片,如何使用PHP获取Bing搜索每日图片?

我们用到的接口是https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1

注意,这里有几个GET参数,它们的作用分别是:

    PHP页面缓存简单实现(php常用的缓存技术汇总php技术之缓存机制的好处)

    <?php
    //文件名
    $filename="filename.html";
    //文件路径,DIRECTORY_SEPARATOR适合Linux以及Windows
    $fileabs = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . $filename;
    //查找有没有缓存文件的存在
    if (file_exists($fileabs)) {
     //有缓存文件直接调用
     include $fileabs;
     //获取当前时间戳
     $now_time = time();
     //获取缓存文件时间戳
     $last_time = filemtime($fileabs);
     //如果缓存文件生成超过指定的时间直接删除文件
     if (($now_time - $last_time) / 60 > 30) {
     unlink($fileabs);
     }
     exit;
    }
    //开启缓存
    ob_start();
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta charset="UTF-8">
    	<title></title>
    </head>
    <body>
    	<!--html内容代码-->
    </body>
    </html>
    <?php
    //在文件代码末尾获取上面生成的缓存内容
    $content = ob_get_contents();
    //写入到缓存内容到指定的文件夹
    $fp = fopen($fileabs, 'w');
    fwrite($fp, $content);
    fclose($fp);
    ob_flush(); //从PHP内存中释放出来缓存(取出数据)
    flush(); //把释放的数据发送到浏览器显示
    ob_end_clean(); //清空缓冲区的内容并关闭这个缓冲区
    ?>
    

    php导出excel结合xlswriter优化内存不足的问题

    关于PHP导出excel大家最先想到的一定是PHPExcel库,不过这个库已经很多年没有更新了,而且特别耗内存。我在逛PHP官方扩展库时发现了一个更好的excel导出扩展库【

    技术分享:微信小程序实现服务器图片上传和下载

    微信小程序中实现服务器图片上传和下载的案例效果如下:

    具体实现图片上传和下载的功能,需要进行环境准备和具体开发两部分。

    环境准备包括如下内容:

    1.小程序的appid,在微信公众平台注册即可。

    2.服务器的搭建,大家可以选择自己的服务器环境。本案例使用新浪云的sae平台,标准环境免费,直接用新浪微博号登陆注册即可。注册成功后,点击新浪云控制台菜单中的云应用SAE,在应用管理下点击创建新应用,建立服务器环境。效果如下图所示:

    PHP小项目:轻松创建gif图在线制作网站

    各位朋友,大家下午好!

    今天给大家带来的教学是 轻松创建gif图在线制作网站!

    这里就需要用到一个 GIF动画的PHP类库!

    下面我把类库代码分享给大家

    由于源码比较长,需要的朋友可以私聊小编哦!

    废话不多说,上源码!

    <?php

    控制面板
    您好,欢迎到访网站!
      查看权限
    网站分类
    最新留言
      友情链接