#77
展开↯#78
作者:广西
微信公众平台开发 客服系统回复文本显示json_encode|unicode中文乱码
导致原因:在 curl post 方式调用客服接口时,
传参过程中使用了 json_encode 函数对变量进行 JSON 编码,我们习惯性的不填写第二个参数,
或者使用框架里封装好的 json 函数,导致中文乱码的问题;
解决方法:在 json_encode 函数加上第二个参数
导致原因:在 curl post 方式调用客服接口时,
传参过程中使用了 json_encode 函数对变量进行 JSON 编码,我们习惯性的不填写第二个参数,
或者使用框架里封装好的 json 函数,导致中文乱码的问题;
解决方法:在 json_encode 函数加上第二个参数
function sendService($object, $access_token)
{
/* 获得openId值 */
$openid = (string)$object->FromUserName;
$post_data = array(
'touser' => $openid,
'msgtype' => 'text',
'text' => array(
'content' => '这是客服自动回复的消息'
)
);
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
curlPost($url, json_encode($post_data, JSON_UNESCAPED_UNICODE));
}
function curlPost($url, $post_data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$response = curl_exec($ch);
curl_close($ch);
//-------请求为空
if(empty($response)){
exit("50001");
}
return $response;
}
Run code
Cut to clipboard
文章:PHP解决某些特殊汉字符或汉字转码后成乱码或者空白的问题 发表时间:2023-05-31, 22:40:34
#79
作者:广西
php给图片添加文字水印的4种方法
1: 面向过程的编写方法
2:面向对象的实现方法
3.支持以图片和文字两种方式给图片添加水印。图片支持GIF,PNG,JPG三种格式,水印图片支持PNG和GIF
参数说明:
4.给图片加文字水印的方法
1: 面向过程的编写方法
//指定图片路径
$src = '001.png';
//获取图片信息
$info = getimagesize($src);
//获取图片扩展名
$type = image_type_to_extension($info[2],false);
//动态的把图片导入内存中
$fun = "imagecreatefrom{$type}";
$image = $fun('001.png');
//指定字体颜色
$col = imagecolorallocatealpha($image,255,255,255,50);
//指定字体内容
$content = 'helloworld';
//给图片添加文字
imagestring($image,5,20,30,$content,$col);
//指定输入类型
header('Content-type:'.$info['mime']);
//动态的输出图片到浏览器中
$func = "image{$type}";
$func($image);
//销毁图片
imagedestroy($image);
Run code
Cut to clipboard
2:面向对象的实现方法
class Image_class {
private $image;
private $info;
/**
* @param $src:图片路径
* 加载图片到内存中
*/
function __construct($src){
$info = getimagesize($src);
$type = image_type_to_extension($info[2],false);
$this -> info =$info;
$this->info['type'] = $type;
$fun = "imagecreatefrom" .$type;
$this -> image = $fun($src);
}
/**
* @param $fontsize: 字体大小
* @param $x: 字体在图片中的x位置
* @param $y: 字体在图片中的y位置
* @param $color: 字体的颜色是一个包含rgba的数组
* @param $text: 想要添加的内容
* 操作内存中的图片,给图片添加文字水印
*/
public function fontMark($fontsize,$x,$y,$color,$text){
$col = imagecolorallocatealpha($this->image,$color[0],$color[1],$color[2],$color[3]);
imagestring($this->image,$fontsize,$x,$y,$text,$col);
}
/*
* 输出图片到浏览器中
*/
public function show(){
header('content-type:' . $this -> info['mime']);
$fun='image' . $this->info['type'];
$fun($this->image);
}
/**
* 销毁图片
*/
function __destruct(){
imagedestroy($this->image);
}
}
//对类的调用
$obj = new Image_class('001.png');
$obj->fontMark(20,20,30,array(255,255,255,60),'hello');
$obj->show();
Run code
Cut to clipboard
3.支持以图片和文字两种方式给图片添加水印。图片支持GIF,PNG,JPG三种格式,水印图片支持PNG和GIF
function setWater($imgSrc,$markImg,$markText,$TextColor,$markPos,$fontType,$markType)
{
$srcInfo = @getimagesize($imgSrc);
$srcImg_w = $srcInfo[0];
$srcImg_h = $srcInfo[1];
switch ($srcInfo[2])
{
case 1:
$srcim =imagecreatefromgif($imgSrc);
break;
case 2:
$srcim =imagecreatefromjpeg($imgSrc);
break;
case 3:
$srcim =imagecreatefrompng($imgSrc);
break;
default:
die("不支持的图片文件类型");
exit;
}
if(!strcmp($markType,"img"))
{
if(!file_exists($markImg) || empty($markImg))
{
return;
}
$markImgInfo = @getimagesize($markImg);
$markImg_w = $markImgInfo[0];
$markImg_h = $markImgInfo[1];
if($srcImg_w < $markImg_w || $srcImg_h < $markImg_h)
{
return;
}
switch ($markImgInfo[2])
{
case 1:
$markim =imagecreatefromgif($markImg);
break;
case 2:
$markim =imagecreatefromjpeg($markImg);
break;
case 3:
$markim =imagecreatefrompng($markImg);
break;
default:
die("不支持的水印图片文件类型");
exit;
}
$logow = $markImg_w;
$logoh = $markImg_h;
}
if(!strcmp($markType,"text"))
{
$fontSize = 16;
if(!empty($markText))
{
if(!file_exists($fontType))
{
return;
}
}
else {
return;
}
$box = @imagettfbbox($fontSize, 0, $fontType,$markText);
$logow = max($box[2], $box[4]) - min($box[0], $box[6]);
$logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
}
if($markPos == 0)
{
$markPos = rand(1, 9);
}
switch($markPos)
{
case 1:
$x = +5;
$y = +5;
break;
case 2:
$x = ($srcImg_w - $logow) / 2;
$y = +5;
break;
case 3:
$x = $srcImg_w - $logow - 5;
$y = +15;
break;
case 4:
$x = +5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 5:
$x = ($srcImg_w - $logow) / 2;
$y = ($srcImg_h - $logoh) / 2;
break;
case 6:
$x = $srcImg_w - $logow - 5;
$y = ($srcImg_h - $logoh) / 2;
break;
case 7:
$x = +5;
$y = $srcImg_h - $logoh - 5;
break;
case 8:
$x = ($srcImg_w - $logow) / 2;
$y = $srcImg_h - $logoh - 5;
break;
case 9:
$x = $srcImg_w - $logow - 5;
$y = $srcImg_h - $logoh -5;
break;
default:
die("此位置不支持");
exit;
}
$dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
imagecopy ( $dst_img, $srcim, 0, 0, 0, 0, $srcImg_w, $srcImg_h);
if(!strcmp($markType,"img"))
{
imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
imagedestroy($markim);
}
if(!strcmp($markType,"text"))
{
$rgb = explode(',', $TextColor);
$color = imagecolorallocate($dst_img, $rgb[0], $rgb[1], $rgb[2]);
imagettftext($dst_img, $fontSize, 0, $x, $y, $color, $fontType,$markText);
}
switch ($srcInfo[2])
{
case 1:
imagegif($dst_img, $imgSrc);
break;
case 2:
imagejpeg($dst_img, $imgSrc);
break;
case 3:
imagepng($dst_img, $imgSrc);
break;
default:
die("不支持的水印图片文件类型");
exit;
}
imagedestroy($dst_img);
imagedestroy($srcim);
}
Run code
Cut to clipboard
参数说明:
$imgSrc:目标图片,可带相对目录地址,
$markImg:水印图片,可带相对目录地址,支持PNG和GIF两种格式,如水印图片在执行文件mark目录下,可写成:mark/mark.gif
$markText:给图片添加的水印文字
$TextColor:水印文字的字体颜色
$markPos:图片水印添加的位置,取值范围:0~9
0:随机位置,在1~8之间随机选取一个位置
1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中
5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右
$fontType:具体的字体库,可带相对目录地址
$markType:图片添加水印的方式,img代表以图片方式,text代表以文字方式添加水印
Run code
Cut to clipboard
4.给图片加文字水印的方法
<?php
/*给图片加文字水印的方法*/
$dst_path = 'http://f4.topitme.com/4/15/11/1166351597fe111154l.jpg';
$dst = imagecreatefromstring(file_get_contents($dst_path));
/*imagecreatefromstring()--从字符串中的图像流新建一个图像,返回一个图像标示符,其表达了从给定字符串得来的图像
图像格式将自动监测,只要php支持jpeg,png,gif,wbmp,gd2.*/
$font = './t1.ttf';
$black = imagecolorallocate($dst, 0, 0, 0);
imagefttext($dst, 20, 0, 10, 30, $black, $font, 'Hello world!');
/*imagefttext($img,$size,$angle,$x,$y,$color,$fontfile,$text)
$img由图像创建函数返回的图像资源
size要使用的水印的字体大小
angle(角度)文字的倾斜角度,如果是0度代表文字从左往右,如果是90度代表从上往下
x,y水印文字的第一个文字的起始位置
color是水印文字的颜色
fontfile,你希望使用truetype字体的路径*/
list($dst_w,$dst_h,$dst_type) = getimagesize($dst_path);
/*list(mixed $varname[,mixed $......])--把数组中的值赋给一些变量
像array()一样,这不是真正的函数,而是语言结构,List()用一步操作给一组变量进行赋值*/
/*getimagesize()能获取到什么信息?
getimagesize函数会返回图像的所有信息,包括大小,类型等等*/
switch($dst_type){
case 1://GIF
header("content-type:image/gif");
imagegif($dst);
break;
case 2://JPG
header("content-type:image/jpeg");
imagejpeg($dst);
break;
case 3://PNG
header("content-type:image/png");
imagepng($dst);
break;
default:
break;
/*imagepng--以PNG格式将图像输出到浏览器或文件
imagepng()将GD图像流(image)以png格式输出到标注输出(通常为浏览器),或者如果用filename给出了文件名则将其输出到文件*/
}
imagedestroy($dst);
?>
Run code
Cut to clipboard
文章:nginx不浏览直接下载文件 发表时间:2023-05-31, 22:36:41
#80
作者:广西
<?
header("Content-type: image/jpeg");
//原始图像
$dst = "images/flower_1.jpg";
//得到原始图片信息
$dst_im = imagecreatefromjpeg($dst);
$dst_info = getimagesize($dst);
//水印图像
$src = "images/logo.gif";
$src_im = imagecreatefromgif($src);
$src_info = getimagesize($src);
//水印透明度
$alpha = 30;
//合并水印图片
imagecopymerge($dst_im,$src_im,$dst_info[0]-$src_info[0],$dst_info[1]-$src_info[1],0,0,$src_info[0],
$src_info[1],$alpha);
//输出合并后水印图片
imagejpeg($dst_im);
imagedestroy($dst_im);
imagedestroy($src_im);
?>
Run code
Cut to clipboard
/*
* 图片裁剪工具
* 将指定文件裁剪成正方形
* 以中心为起始向四周裁剪
* @param $src_path string 源文件地址
* @param $des_path string 保存文件地址
* @param $des_w double 目标图片宽度
* */
function img_cut_square($src_path,$des_path,$des_w=100){
$img_info = getimagesize($src_path);//获取原图像尺寸信息
$img_width = $img_info[0];//原图宽度
$img_height = $img_info[1];//原图高度
$img_type = $img_info[2];//图片类型 1 为 GIF 格式、 2 为 JPEG/JPG 格式、3 为 PNG 格式
if($img_type != 2 && $img_type != 3) return ;
/*计算缩放尺寸*/
if($img_height > $img_width){
$scale_width = $des_w;//缩放宽度
$scale_height = round($des_w / $img_width * $img_height);//缩放高度
$src_y = round(($scale_height - $des_w)/2);
$src_x = 0;
}else{
$scale_height = $des_w;
$scale_width = round($des_w / $img_height * $img_width);
$src_y = 0;
$src_x = round(($scale_width - $des_w)/2);
}
$dst_ims = imagecreatetruecolor($scale_width, $scale_height);//创建真彩画布
$white = imagecolorallocate($dst_ims, 255, 255, 255);
imagefill($dst_ims, 0, 0, $white);
if($img_type == 2){
$src_im = @imagecreatefromjpeg($src_path);//读取原图像
}else if($img_type == 3){
$src_im = @imagecreatefrompng($src_path);//读取原图像
}
imagecopyresized($dst_ims, $src_im, 0, 0 ,0, 0 , $scale_width , $scale_height , $img_width,$img_height);//缩放图片到指定尺寸
$dst_im = imagecreatetruecolor($des_w, $des_w);
// $white = imagecolorallocate($dst_im, 255, 255, 255);
// imagefill($dst_im, 0, 0, $white);
imagecopy($dst_im, $dst_ims, 0, 0, $src_x, $src_y, $des_w, $des_w);//开始裁剪图片为正方形
// imagecopyresampled($dst_im, $src_im, $src_x, $src_y, 0, 0, $real_width, $real_width,$img_width,$img_height);
if($img_type == 2) {
imagejpeg($dst_im, $des_path);//保存到文件
}else if($img_type == 3){
imagepng($dst_im,$des_path);
}
// imagejpeg($dst_im);//输出到浏览器
imagedestroy($dst_im);
imagedestroy($dst_ims);
imagedestroy($src_im);
}
Run code
Cut to clipboard
//1.配置图片路径
$src = "1.jpg";
//2.获取图片信息
$info = getimagesize($src);
//3.通过编号获取图像类型
$type = image_type_to_extension($info[2],false);
//4.在内存中创建和图像类型一样的图像
$fun = "imagecreatefrom".$type;
//5.图片复制到内存
$image = $fun($src);
/*操作图片*/
//1.设置字体的路径
$font = "simkai.ttf";
//2.填写水印内容
$content = "水印文字:some special words are supported.";
//3.设置字体颜色和透明度
$color = imagecolorallocatealpha($image, 255, 255, 255, 0);
//4.写入文字 (图片资源,字体大小,旋转角度,坐标x,坐标y,颜色,字体文件,内容)
imagettftext($image, 30, 0, 100, 60, $color, $font, $content);
/*输出图片*/
//浏览器输出
header("Content-type:".$info['mime']);
$fun = "image".$type;
$fun($image);
//保存图片
$fun($image,'bg_res.'.$type);
/*销毁图片*/
imagedestroy($image);
Run code
Cut to clipboard
文章:nginx不浏览直接下载文件 发表时间:2023-05-31, 22:28:07
#81
作者:广西河池市
php图片的裁剪
php中裁剪图片主要使用gd库的imagecopyresampled方法
$src_path = '1.jpg';
//创建源图的实例
$src = imagecreatefromstring(file_get_contents($src_path));
//裁剪开区域左上角的点的坐标
$x = 100;
$y = 12;
//裁剪区域的宽和高
$width = 200;
$height = 200;
//最终保存成图片的宽和高,和源要等比例,否则会变形
$final_width = 100;
$final_height = round($final_width * $height / $width);
//将裁剪区域复制到新图片上,并根据源和目标的宽高进行缩放或者拉升
$new_image = imagecreatetruecolor($final_width, $final_height);
imagecopyresampled($new_image, $src, 0, 0, $x, $y, $final_width, $final_height, $width, $height);
//输出图片
header('Content-Type: image/jpeg');
imagejpeg($new_image);
imagedestroy($src);
imagedestroy($new_image);
Run code
Cut to clipboard
文章:nginx不浏览直接下载文件 发表时间:2023-05-31, 17:50:44
#82
作者:广西河池市
【PHP原生】获取字符串所有汉字首字母和首个汉字首字母
获取字符串汉字首字母,兼容GBK和UTF-8
获取字符串汉字首字母,兼容GBK和UTF-8
<?php
//获取单个汉字拼音首字母。注意:此处不要纠结。汉字拼音是没有以U和V开头的
function getfirstchar($s0){
$fchar = ord($s0{0});
if($fchar >= ord("A") and $fchar <= ord("z") )return strtoupper($s0{0});
$s1 = iconv("UTF-8","gb2312", $s0);
$s2 = iconv("gb2312","UTF-8", $s1);
if($s2 == $s0){$s = $s1;}else{$s = $s0;}
$asc = ord($s{0}) * 256 + ord($s{1}) - 65536;
if($asc >= -20319 and $asc <= -20284) return "A";
if($asc >= -20283 and $asc <= -19776) return "B";
if($asc >= -19775 and $asc <= -19219) return "C";
if($asc >= -19218 and $asc <= -18711) return "D";
if($asc >= -18710 and $asc <= -18527) return "E";
if($asc >= -18526 and $asc <= -18240) return "F";
if($asc >= -18239 and $asc <= -17923) return "G";
if($asc >= -17922 and $asc <= -17418) return "H";
if($asc >= -17922 and $asc <= -17418) return "I";
if($asc >= -17417 and $asc <= -16475) return "J";
if($asc >= -16474 and $asc <= -16213) return "K";
if($asc >= -16212 and $asc <= -15641) return "L";
if($asc >= -15640 and $asc <= -15166) return "M";
if($asc >= -15165 and $asc <= -14923) return "N";
if($asc >= -14922 and $asc <= -14915) return "O";
if($asc >= -14914 and $asc <= -14631) return "P";
if($asc >= -14630 and $asc <= -14150) return "Q";
if($asc >= -14149 and $asc <= -14091) return "R";
if($asc >= -14090 and $asc <= -13319) return "S";
if($asc >= -13318 and $asc <= -12839) return "T";
if($asc >= -12838 and $asc <= -12557) return "W";
if($asc >= -12556 and $asc <= -11848) return "X";
if($asc >= -11847 and $asc <= -11056) return "Y";
if($asc >= -11055 and $asc <= -10247) return "Z";
return NULL;
//return $s0;
}
function pinyin_long($zh){ //获取整条字符串所有汉字拼音首字母
$ret = "";
$s1 = iconv("UTF-8","gb2312", $zh);
$s2 = iconv("gb2312","UTF-8", $s1);
if($s2 == $zh){$zh = $s1;}
for($i = 0; $i < strlen($zh); $i++){
$s1 = substr($zh,$i,1);
$p = ord($s1);
if($p > 160){
$s2 = substr($zh,$i++,2);
$ret .= getfirstchar($s2);
}else{
$ret .= $s1;
}
}
return $ret;
}
echo pinyin_long('*《,@#$123HAHadf一年后而已');echo "<br>";//console(*@#$123HAHadfYNHEY)
function pinyin_long2($zh){ //获取整条字符串(非纯汉字链)首个汉字拼音首字母
$ret = "";
$s1 = iconv("UTF-8","gb2312", $zh);
$s2 = iconv("gb2312","UTF-8", $s1);
if($s2 == $zh){$zh = $s1;}
for($i = 0; $i < strlen($zh); $i++){
$s1 = substr($zh,$i,1);
$p = ord($s1);
if($p > 160){
$s2 = substr($zh,$i++,2);
$ret = getfirstchar($s2);
}else{
$ret = $s1;
}
}
return $ret;
}
echo pinyin_long2('*《,@#$123HAHadf一年后而已');//console(Y)
?>
Run code
Cut to clipboard
文章:php获得汉字拼音首字母 发表时间:2023-05-31, 17:44:07
#83
作者:广西河池市
PHP前一天,后一天,日期问题
date_default_timezone_set('PRC'); //默认时区
echo "今天:",date("Y-m-d",time()),"<br>";
echo "今天:",date("Y-m-d",strtotime("18 june 2008")),"<br>";
echo "昨天:",date("Y-m-d",strtotime("-1 day")), "<br>";
echo "明天:",date("Y-m-d",strtotime("+1 day")), "<br>";
echo "一周后:",date("Y-m-d",strtotime("+1 week")), "<br>";
echo "一周零两天四小时两秒后:",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "<br>";
echo "下个星期四:",date("Y-m-d",strtotime("next Thursday")), "<br>";
echo "上个周一:".date("Y-m-d",strtotime("last Monday"))."<br>";
echo "一个月前:".date("Y-m-d",strtotime("last month"))."<br>";
echo "一个月后:".date("Y-m-d",strtotime("+1 month"))."<br>";
echo "十年后:".date("Y-m-d",strtotime("+10 year"))."<br>";
Run code
Cut to clipboard
文章:js获取本周、本月、本季度、本年开始,结束时间 发表时间:2023-05-31, 17:43:27
#84
作者:广西河池市
php 在客户端生成txt文件并且下载
在访问php时生成txt文件
在访问php时生成txt文件
$filename = 'file.text'; //也可以是其他后缀格式的
$ua = $_SERVER["HTTP_USER_AGENT"];
foreach ($fedexinfo as $key => $value) {
echo $key.",\"".$value."\"\r\n";
}
header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . $filename . '"');
Run code
Cut to clipboard
文章:nginx不浏览直接下载文件 发表时间:2023-05-31, 17:42:26
#85
作者:广西河池市
php生成文字水印和图片水印
生成文字水印
生成图片水印
#,广西河池市,2023-05-31,17:25:50, 绘制文字:imagettftext()
生成文字水印
//文字水印
/*打开图片*/
//1.配置图片路径
$src = "4.jpg";
//2.获取图片的信息(得到图片的基本信息)
$info = getimagesize($src );
//3.通过获取图片类型
$type = image_type_to_extension($info[2],false);
//4.在内存中创建一个图片类型一样的图像
$fun = "imagecreatefrom{$type}";
//5.图片复制到内存中
$image = $fun($src);
/*操作图片*/
//1.设置字体的路径
$font = "STLITI.TTF";//c盘windows/fonts
//2.填写水印内容
$content = '你好';
//3.设置字体的颜色rgb和透明度
$col = imagecolorallocatealpha($image,255,255,255,50);
//4.写入文字
imagettftext($image,20,0,20,30,$col,$font,$content);
/*输出图片*/
//浏览器输出
header("Content-type:{$info['mime']}");
$func = "image{$type}";
$func($image);
//保存图片
$func($image,'newimage.'.$type);
/*销毁图片*/
imagedestroy($image);
Run code
Cut to clipboard
生成图片水印
$dst_path = '4.jpg';
$src_path = '1.png';
//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dst_path));
$src = imagecreatefromstring(file_get_contents($src_path));
//获取水印图片的宽高
list($src_w, $src_h) = getimagesize($src_path);
//将水印图片复制到目标图片上,最后个参数80是设置透明度,这里实现半透明效果
imagecopymerge($dst, $src, 10, 10, 0, 0, $src_w, $src_h, 80);
//如果水印图片本身带透明色,则使用imagecopy方法
//imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);
//输出图片
list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
switch ($dst_type) {
case 1://GIF
header('Content-Type: image/gif');
imagegif($dst);
break;
case 2://JPG
header('Content-Type: image/jpeg');
imagejpeg($dst);
break;
case 3://PNG
header('Content-Type: image/png');
imagepng($dst);
break;
default:
break;
}
imagedestroy($dst);
imagedestroy($src);
Run code
Cut to clipboard
<?php
//1. 绘制图像资源(创建一个画布)
$image = imagecreatetruecolor(500, 300);
//2. 先分配一个绿色
$green = imagecolorallocate($image, 22, 153, 0);
//3. 使用绿色填充画布
imagefill($image, 0, 0, $green);
//4. 在画布中绘制图像
$bai = imagecolorallocate($image, 255, 255, 255);
//使用指定的字体文件绘制文字
//参数2:字体大小
//参数3:字体倾斜的角度
//参数4、5:文字的x、y坐标
//参数6:文字的颜色
//参数7:字体文件
//参数8:绘制的文字
imagettftext($image, 30, 30, 200, 250, $bai, 'STHUPO.TTF', 'helloworld');
//5. 在浏览器直接输出图像资源
header("Content-Type:image/jpeg");
imagejpeg($image);
//6. 销毁图像资源
imagedestroy($image);
Run code
Cut to clipboard
文章:nginx不浏览直接下载文件 发表时间:2023-05-31, 17:25:15
#86
作者:广西河池市
PHP实现下载远程图片保存到本地的方法
1.使用 curl
比如我们有下面这两张图片:
第一步,我们可以直接来使用最简单的代码实现:
那在下载远程图片的时候就可以这样:
2.封装一个类
缕清思路之后,我们可以将这个基本的功能封装到一个类中:
在者,我们还可以这样稍微优化一下:
封装成类之后,我们可以这样调用代码来下载图片:
1.使用 curl
比如我们有下面这两张图片:
$images = [
'https://dn-laravist.qbox.me/2015-09-22_00-17-06j.png',
'https://dn-laravist.qbox.me/2015-09-23_00-58-03j.png'
];
Run code
Cut to clipboard
第一步,我们可以直接来使用最简单的代码实现:
function download($url, $path = 'images/')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$file = curl_exec($ch);
curl_close($ch);
$filename = pathinfo($url, PATHINFO_BASENAME);
$resource = fopen($path . $filename, 'a');
fwrite($resource, $file);
fclose($resource);
}
Run code
Cut to clipboard
那在下载远程图片的时候就可以这样:
foreach ( $images as $url ) {
download($url);
}
Run code
Cut to clipboard
2.封装一个类
缕清思路之后,我们可以将这个基本的功能封装到一个类中:
class Spider {
public function downloadImage($url, $path = 'images/')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$file = curl_exec($ch);
curl_close($ch);
$filename = pathinfo($url, PATHINFO_BASENAME);
$resource = fopen($path . $filename, 'a');
fwrite($resource, $file);
fclose($resource);
}
}
Run code
Cut to clipboard
在者,我们还可以这样稍微优化一下:
public function downloadImage($url, $path='images/')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
$file = curl_exec($ch);
curl_close($ch);
$this->saveAsImage($url, $file, $path);
}
private function saveAsImage($url, $file, $path)
{
$filename = pathinfo($url, PATHINFO_BASENAME);
$resource = fopen($path . $filename, 'a');
fwrite($resource, $file);
fclose($resource);
}
Run code
Cut to clipboard
封装成类之后,我们可以这样调用代码来下载图片:
$spider = new Spider();
foreach ( $images as $url ) {
$spider->downloadImage($url);
}
Run code
Cut to clipboard
文章:nginx不浏览直接下载文件 发表时间:2023-05-31, 17:22:05
#87
作者:广西河池市
php将远程图片下载保存到本地
/*
*功能:php完美实现下载远程图片保存到本地
*参数:文件url,保存文件目录,保存文件名称,使用的下载方式
*当保存文件名称为空时则使用远程文件原来的名称
*/
function getImage($url,$save_dir='',$filename='',$type=0){
if(trim($url)==''){
return array('file_name'=>'','save_path'=>'','error'=>1);
}
if(trim($save_dir)==''){
$save_dir='./';
}
if(trim($filename)==''){//保存文件名
$ext=strrchr($url,'.');
if($ext!='.gif'&&$ext!='.jpg'){
return array('file_name'=>'','save_path'=>'','error'=>3);
}
$filename=time().$ext;
}
if(0!==strrpos($save_dir,'/')){
$save_dir.='/';
}
//创建保存目录
if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
return array('file_name'=>'','save_path'=>'','error'=>5);
}
//获取远程文件所采用的方法
if($type){
$ch=curl_init();
$timeout=5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$img=curl_exec($ch);
curl_close($ch);
}else{
ob_start();
readfile($url);
$img=ob_get_contents();
ob_end_clean();
}
//$size=strlen($img);
//文件大小
$fp2=@fopen($save_dir.$filename,'a');
fwrite($fp2,$img);
fclose($fp2);
unset($img,$url);
return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);
}
Run code
Cut to clipboard
文章:nginx不浏览直接下载文件 发表时间:2023-05-31, 17:20:19
#88
作者:广西河池市
<?php
/*
* 生成随机字符串
* @param int $length 生成随机字符串的长度
* @param string $char 组成随机字符串的字符串
* @return string $string 生成的随机字符串
*/
function str_rand($length = 32, $char = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
if(!is_int($length) || $length < 0) {
return false;
}
$string = '';
for($i = $length; $i > 0; $i--) {
$string .= $char[mt_rand(0, strlen($char) - 1)];
}
return $string;
}
echo str_rand(),"<br />";
/*
* 生成32位唯一字符串
*/
$uniqid = md5(uniqid(microtime(true),true));
echo $uniqid;
Run code
Cut to clipboard
文章:PHP生成随机密码 发表时间:2023-05-31, 17:17:00
#89
作者:广西河池市
js中数组的合并和对象的合并
1 数组合并
1.1 concat 方法
1.2 循环遍历
1.3 apply
合并数组arr1和数组arr2,使用Array.prototype.push.apply(arr1,arr2) or arr1.push.apply(arr1,arr2);
2 对象合并
2.1 $.extend()
2.2 遍历赋值
2.3 Obj.assign()
可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
Object.assign(target, ...sources)
2.4 对象的深拷贝和浅拷贝
2.4.1 浅拷贝
2.4.2 深拷贝
1 数组合并
1.1 concat 方法
var a=[1,2,3],b=[4,5,6];
var c=a.concat(b);
console.log(c);// 1,2,3,4,5,6
console.log(a);// 1,2,3 不改变本身
Run code
Cut to clipboard
1.2 循环遍历
var arr1=['a','b'];
var arr2=['c','d','e'];
for(var i=0;i<arr2.length;i++){
arr1.push(arr2[i])
}
console.log(arr1);//['a','b','c','d','e']
Run code
Cut to clipboard
1.3 apply
合并数组arr1和数组arr2,使用Array.prototype.push.apply(arr1,arr2) or arr1.push.apply(arr1,arr2);
var arr1=['a','b'];
var arr2=['c','d','e'];
Array.prototype.push.apply(arr1,arr2);
//或者
arr1.push.apply(arr1,arr2);<br>console.log(arr1) //['a','b','c','d','e']
Run code
Cut to clipboard
2 对象合并
2.1 $.extend()
var obj1= {'a': 1};
var obj2= {'b': 1};
var c = $.extend(obj1, obj2);console.log(obj1); // {a: 1, b: 1} obj1已被修改//或者 <br>var obj3 = $.extend({}, obj1, obj2) <br>console.log(obj3); //{a: 1, b: 1} 不会改变obj1,obj2
Run code
Cut to clipboard
2.2 遍历赋值
var obj1={'a':1};
var obj2={'b':2,'c':3};
for(var key in obj2){
if(obj2.hasOwnProperty(key)===true){ <br> //此处hasOwnProperty是判断自有属性,使用 for in 循环遍历对象的属性时,原型链上的所有属性都将被访问会避免原型对象扩展带来的干扰
obj1[key]=obj2[key];
}
}
console.log(obj1);//{'a':1,'b':2,'c':3};
Run code
Cut to clipboard
2.3 Obj.assign()
可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。
Object.assign(target, ...sources)
//a. 复制一个对象<br>var obj = { a: 1 ,b:2};
var copyObj = Object.assign({}, obj);
console.log(copyObj); // { a: 1,b:2 }<br><br>//b.合并多个对象var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };
var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1, b: 2, c: 3 }, 且目标对象自身也会改变
Run code
Cut to clipboard
2.4 对象的深拷贝和浅拷贝
2.4.1 浅拷贝
var obj1={'a':1};
var obj2={'b':{'b1':22,'b2':33}};
$.extend(obj1, obj2); //obj1拷贝了obj2的属性
console.log(obj1) // {'a':1,'b'{'b1':22,'b2':33}}
console.log(obj1.b.b1) // 22
obj2.b.b1=44; //obj2重新赋值
console.log(obj1.b.b1) // 44 obj1.b仅拷贝了对象的指引,所以受原obj2的影响
Run code
Cut to clipboard
2.4.2 深拷贝
var obj1={'a':1};
var obj2={'b':{'b1':22,'b2':33}};
$.extend(true,obj1, obj2); //第一个参数设为true表示深复制
console.log(obj1) // {'a':1,'b'{'b1':22,'b2':33}}
console.log(obj1.b.b1) // 22
obj2.b.b1=44; //obj2重新赋值
console.log(obj1.b.b1) // 22 obj1拷贝了obj2的所有属性以及值,并不受obj2的影响
Run code
Cut to clipboard
文章:js获取本周、本月、本季度、本年开始,结束时间 发表时间:2023-05-31, 17:15:22
#90
作者:广西河池市
js数组与字符串的相互转换方法
1、数组转字符串
需要将数组元素用某个字符连接成字符串,示例代码如下:
var a, b;
a = new Array(0,1,2,3,4);
b = a.join("-"); //"0-1-2-3-4"
2、字符串转数组
实现方法为将字符串按某个字符切割成若干个字符串,并以数组形式返回,示例代码如下:
var s = "abc,abcd,aaa";
ss = s.split(",");// 在每个逗号(,)处进行分解 ["abc", "abcd", "aaa"]
var s1 = "helloworld";
ss1 = s1.split(''); //["h", "e", "l", "l", "o", "w", "o", "r", "l", "d"]
Run code
Cut to clipboard
文章:js获取本周、本月、本季度、本年开始,结束时间 发表时间:2023-05-31, 16:58:32
#91
作者:广西河池市
Js获取当前日期时间及其它操作
var myDate = new Date();
myDate.getYear(); //获取当前年份(2位)
myDate.getFullYear(); //获取完整的年份(4位,1970-????)
myDate.getMonth(); //获取当前月份(0-11,0代表1月)
myDate.getDate(); //获取当前日(1-31)
myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)
myDate.getHours(); //获取当前小时数(0-23)
myDate.getMinutes(); //获取当前分钟数(0-59)
myDate.getSeconds(); //获取当前秒数(0-59)
myDate.getMilliseconds(); //获取当前毫秒数(0-999)
myDate.toLocaleDateString(); //获取当前日期
var mytime=myDate.toLocaleTimeString(); //获取当前时间
myDate.toLocaleString( ); //获取日期与时间
日期时间脚本库方法列表
Date.prototype.isLeapYear 判断闰年
Date.prototype.Format 日期格式化
Date.prototype.DateAdd 日期计算
Date.prototype.DateDiff 比较日期差
Date.prototype.toString 日期转字符串
Date.prototype.toArray 日期分割为数组
Date.prototype.DatePart 取日期的部分信息
Date.prototype.MaxDayOfDate 取日期所在月的最大天数
Date.prototype.WeekNumOfYear 判断日期所在年的第几周
StringToDate 字符串转日期型
IsValidDate 验证日期有效性
CheckDateTime 完整日期时间检查
daysBetween 日期天数差
js代码:
//---------------------------------------------------
// 判断闰年
//---------------------------------------------------
Date.prototype.isLeapYear = function()
{
return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0)));
}
//---------------------------------------------------
// 日期格式化
// 格式 YYYY/yyyy/YY/yy 表示年份
// MM/M 月份
// W/w 星期
// dd/DD/d/D 日期
// hh/HH/h/H 时间
// mm/m 分钟
// ss/SS/s/S 秒
//---------------------------------------------------
Date.prototype.Format = function(formatStr)
{
var str = formatStr;
var Week = ['日','一','二','三','四','五','六'];
str=str.replace(/yyyy|YYYY/,this.getFullYear());
str=str.replace(/yy|YY/,(this.getYear() % 100)>9?(this.getYear() % 100).toString():'0' + (this.getYear() % 100));
str=str.replace(/MM/,this.getMonth()>9?this.getMonth().toString():'0' + this.getMonth());
str=str.replace(/M/g,this.getMonth());
str=str.replace(/w|W/g,Week[this.getDay()]);
str=str.replace(/dd|DD/,this.getDate()>9?this.getDate().toString():'0' + this.getDate());
str=str.replace(/d|D/g,this.getDate());
str=str.replace(/hh|HH/,this.getHours()>9?this.getHours().toString():'0' + this.getHours());
str=str.replace(/h|H/g,this.getHours());
str=str.replace(/mm/,this.getMinutes()>9?this.getMinutes().toString():'0' + this.getMinutes());
str=str.replace(/m/g,this.getMinutes());
str=str.replace(/ss|SS/,this.getSeconds()>9?this.getSeconds().toString():'0' + this.getSeconds());
str=str.replace(/s|S/g,this.getSeconds());
return str;
}
//+---------------------------------------------------
//| 求两个时间的天数差 日期格式为 YYYY-MM-dd
//+---------------------------------------------------
function daysBetween(DateOne,DateTwo)
{
var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-'));
var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1);
var OneYear = DateOne.substring(0,DateOne.indexOf ('-'));
var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-'));
var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1);
var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-'));
var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000);
return Math.abs(cha);
}
//+---------------------------------------------------
//| 日期计算
//+---------------------------------------------------
Date.prototype.DateAdd = function(strInterval, Number) {
var dtTmp = this;
switch (strInterval) {
case 's' :return new Date(Date.parse(dtTmp) + (1000 * Number));
case 'n' :return new Date(Date.parse(dtTmp) + (60000 * Number));
case 'h' :return new Date(Date.parse(dtTmp) + (3600000 * Number));
case 'd' :return new Date(Date.parse(dtTmp) + (86400000 * Number));
case 'w' :return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));
case 'q' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number*3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
case 'm' :return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
case 'y' :return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());
}
}
//+---------------------------------------------------
//| 比较日期差 dtEnd 格式为日期型或者有效日期格式字符串
//+---------------------------------------------------
Date.prototype.DateDiff = function(strInterval, dtEnd) {
var dtStart = this;
if (typeof dtEnd == 'string' )//如果是字符串转换为日期型
{
dtEnd = StringToDate(dtEnd);
}
switch (strInterval) {
case 's' :return parseInt((dtEnd - dtStart) / 1000);
case 'n' :return parseInt((dtEnd - dtStart) / 60000);
case 'h' :return parseInt((dtEnd - dtStart) / 3600000);
case 'd' :return parseInt((dtEnd - dtStart) / 86400000);
case 'w' :return parseInt((dtEnd - dtStart) / (86400000 * 7));
case 'm' :return (dtEnd.getMonth()+1)+((dtEnd.getFullYear()-dtStart.getFullYear())*12) - (dtStart.getMonth()+1);
case 'y' :return dtEnd.getFullYear() - dtStart.getFullYear();
}
}
//+---------------------------------------------------
//| 日期输出字符串,重载了系统的toString方法
//+---------------------------------------------------
Date.prototype.toString = function(showWeek)
{
var myDate= this;
var str = myDate.toLocaleDateString();
if (showWeek)
{
var Week = ['日','一','二','三','四','五','六'];
str += ' 星期' + Week[myDate.getDay()];
}
return str;
}
//+---------------------------------------------------
//| 日期合法性验证
//| 格式为:YYYY-MM-DD或YYYY/MM/DD
//+---------------------------------------------------
function IsValidDate(DateStr)
{
var sDate=DateStr.replace(/(^\s+|\s+$)/g,''); //去两边空格;
if(sDate=='') return true;
//如果格式满足YYYY-(/)MM-(/)DD或YYYY-(/)M-(/)DD或YYYY-(/)M-(/)D或YYYY-(/)MM-(/)D就替换为''
//数据库中,合法日期可以是:YYYY-MM/DD(2003-3/21),数据库会自动转换为YYYY-MM-DD格式
var s = sDate.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g,'');
if (s=='') //说明格式满足YYYY-MM-DD或YYYY-M-DD或YYYY-M-D或YYYY-MM-D
{
var t=new Date(sDate.replace(/\-/g,'/'));
var ar = sDate.split(/[-/:]/);
if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate())
{
//alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');
return false;
}
}
else
{
//alert('错误的日期格式!格式为:YYYY-MM-DD或YYYY/MM/DD。注意闰年。');
return false;
}
return true;
}
//+---------------------------------------------------
//| 日期时间检查
//| 格式为:YYYY-MM-DD HH:MM:SS
//+---------------------------------------------------
function CheckDateTime(str)
{
var reg = /^(\d+)-(\d{ 1,2 })-(\d{ 1,2 }) (\d{ 1,2 }):(\d{ 1,2 }):(\d{ 1,2 })$/;
var r = str.match(reg);
if(r==null)return false;
r[2]=r[2]-1;
var d= new Date(r[1],r[2],r[3],r[4],r[5],r[6]);
if(d.getFullYear()!=r[1])return false;
if(d.getMonth()!=r[2])return false;
if(d.getDate()!=r[3])return false;
if(d.getHours()!=r[4])return false;
if(d.getMinutes()!=r[5])return false;
if(d.getSeconds()!=r[6])return false;
return true;
}
//+---------------------------------------------------
//| 把日期分割成数组
//+---------------------------------------------------
Date.prototype.toArray = function()
{
var myDate = this;
var myArray = Array();
myArray[0] = myDate.getFullYear();
myArray[1] = myDate.getMonth();
myArray[2] = myDate.getDate();
myArray[3] = myDate.getHours();
myArray[4] = myDate.getMinutes();
myArray[5] = myDate.getSeconds();
return myArray;
}
//+---------------------------------------------------
//| 取得日期数据信息
//| 参数 interval 表示数据类型
//| y 年 m月 d日 w星期 ww周 h时 n分 s秒
//+---------------------------------------------------
Date.prototype.DatePart = function(interval)
{
var myDate = this;
var partStr='';
var Week = ['日','一','二','三','四','五','六'];
switch (interval)
{
case 'y' :partStr = myDate.getFullYear();break;
case 'm' :partStr = myDate.getMonth()+1;break;
case 'd' :partStr = myDate.getDate();break;
case 'w' :partStr = Week[myDate.getDay()];break;
case 'ww' :partStr = myDate.WeekNumOfYear();break;
case 'h' :partStr = myDate.getHours();break;
case 'n' :partStr = myDate.getMinutes();break;
case 's' :partStr = myDate.getSeconds();break;
}
return partStr;
}
//+---------------------------------------------------
//| 取得当前日期所在月的最大天数
//+---------------------------------------------------
Date.prototype.MaxDayOfDate = function()
{
var myDate = this;
var ary = myDate.toArray();
var date1 = (new Date(ary[0],ary[1]+1,1));
var date2 = date1.dateAdd(1,'m',1);
var result = dateDiff(date1.Format('yyyy-MM-dd'),date2.Format('yyyy-MM-dd'));
return result;
}
//+---------------------------------------------------
//| 取得当前日期所在周是一年中的第几周
//+---------------------------------------------------
Date.prototype.WeekNumOfYear = function()
{
var myDate = this;
var ary = myDate.toArray();
var year = ary[0];
var month = ary[1]+1;
var day = ary[2];
document.write('< script language=VBScript\> \n');
document.write('myDate = Datue(''+month+'-'+day+'-'+year+'') \n');
document.write('result = DatePart('ww', myDate) \n');
document.write(' \n');
return result;
}
//+---------------------------------------------------
//| 字符串转成日期类型
//| 格式 MM/dd/YYYY MM-dd-YYYY YYYY/MM/dd YYYY-MM-dd
//+---------------------------------------------------
function StringToDate(DateStr)
{
var converted = Date.parse(DateStr);
var myDate = new Date(converted);
if (isNaN(myDate))
{
//var delimCahar = DateStr.indexOf('/')!=-1?'/':'-';
var arys= DateStr.split('-');
myDate = new Date(arys[0],--arys[1],arys[2]);
}
return myDate;
}
若要显示:当前日期加时间(如:2009-06-12 12:00)
function CurentTime()
{
var now = new Date();
var year = now.getFullYear(); //年
var month = now.getMonth() + 1; //月
var day = now.getDate(); //日
var hh = now.getHours(); //时
var mm = now.getMinutes(); //分
var clock = year + "-";
if(month < 10)
clock += "0";
clock += month + "-";
if(day < 10)
clock += "0";
clock += day + " ";
if(hh < 10)
clock += "0";
clock += hh + ":";
if (mm < 10) clock += '0';
clock += mm;
return(clock);
}
Run code
Cut to clipboard
文章:js获取本周、本月、本季度、本年开始,结束时间 发表时间:2023-05-31, 16:58:00
#92
作者:广西河池市
centos7关闭ipv6
centos7使用ipv6协议,如果出现问题了将会很难排查,所以想要关闭ipv6,该怎么关闭呢?下面我们就来看看详细的教程。
1、使用ifconfig命令查看网卡信息,如果出现inet6 fe80::20c:29ff:fed0:3514,说明机器开启了ipv6
2、编辑/etc/sysctl.conf配置,增加net.ipv6.conf.all.disable_ipv6=1
3、编辑/etc/sysconfig/network配置,增加 NETWORKING_IPV6=no,保存并退出
4、编辑/etc/sysconfig/network-scripts/ifcfg-eno16777736,确保IPV6INIT=no,ifcfg-eno16777736是根据自己机器的,实际网卡信息来看,不是固定的
5、关闭防火墙的开机自启动
systemctl disable ip6tables.service
6、执行sysctl -p或者reboot重启命令
7、再次使用ifconfig进行验证,只剩下ipv4,ipv6消失了,关闭成功
centos7使用ipv6协议,如果出现问题了将会很难排查,所以想要关闭ipv6,该怎么关闭呢?下面我们就来看看详细的教程。
1、使用ifconfig命令查看网卡信息,如果出现inet6 fe80::20c:29ff:fed0:3514,说明机器开启了ipv6
2、编辑/etc/sysctl.conf配置,增加net.ipv6.conf.all.disable_ipv6=1
3、编辑/etc/sysconfig/network配置,增加 NETWORKING_IPV6=no,保存并退出
4、编辑/etc/sysconfig/network-scripts/ifcfg-eno16777736,确保IPV6INIT=no,ifcfg-eno16777736是根据自己机器的,实际网卡信息来看,不是固定的
5、关闭防火墙的开机自启动
systemctl disable ip6tables.service
6、执行sysctl -p或者reboot重启命令
7、再次使用ifconfig进行验证,只剩下ipv4,ipv6消失了,关闭成功
文章:本地Linux CentOS7服务器安装笔记 发表时间:2023-05-30, 14:52:10
#93
作者:广西河池市
js 数组、对象转json 以及json转 数组、对象
1、JS对象转JSON
方式:JSON.stringify(obj)

2、JS数组转JSON
3、JS对象数组转JSON
4、JSON转JS数组
5、JSON转JS对象
#,广西河池市,2023-05-29,16:54:30, 小程序判断一个对象是否为空
ES6 新增的方法 Object.keys():
Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组。
如果我们的对象为空,他会返回一个空数组,如下:
我们可以依靠Object.keys()这个方法通过判断它的长度来知道它是否为空。
1、JS对象转JSON
方式:JSON.stringify(obj)
var json = {"name":"iphone","price":666}; //创建对象;
var jsonStr = JSON.stringify(json); //转为JSON字符串
console.log(jsonStr);
Run code
Cut to clipboard
2、JS数组转JSON
//数组转json串
var arr = [1,2,3, { a : 1 } ];
JSON.stringify( arr );
Run code
Cut to clipboard
3、JS对象数组转JSON
//数组转json串
var arr = [1,2,3, { a : 1 } ];
JSON.stringify( arr );
Run code
Cut to clipboard
4、JSON转JS数组
//json字符串转数组
var jsonStr = '[1,2,3,{"a":1}]';
var jsarr=JSON.parse( jsonStr );
alert(jsarr[0]);
Run code
Cut to clipboard
5、JSON转JS对象
var jsonString = '{"bar":"property","baz":3}';
var jsObject = JSON.parse(jsonString); //转换为json对象
alert(jsObject.bar); //取json中的值
Run code
Cut to clipboard
ES6 新增的方法 Object.keys():
Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组。
如果我们的对象为空,他会返回一个空数组,如下:
var a = {}
Object.keys(a) // []
Run code
Cut to clipboard
我们可以依靠Object.keys()这个方法通过判断它的长度来知道它是否为空。
if (Object.keys(object).length === 0) {
return false // 如果为空,返回false
}
return true // 如果不为空,则会执行到这一步,返回true
Run code
Cut to clipboard
文章:js 删除前confirm确认提示代码 发表时间:2023-05-29, 16:52:20
#94
作者:广西河池市
联表查询 group by order by desc 不支持排序
支持排序的代码SELECT * , count( mid ) AS mid
FROM (
SELECT A.mid, A.title, A.sortrank, A.pubdate
FROM `acms_archives` AS A
LEFT JOIN `acms_arctype` AS B ON A.typeid = B.id
WHERE B.topid =18
AND A.arcrank =0
AND A.sortrank = A.pubdate
AND A.pubdate >0
ORDER BY pubdate DESC
) AS z
GROUP BY z.mid
ORDER BY z.pubdate DESC
LIMIT 0 , 7
原代码
SELECT A.title,A.sortrank,A.pubdate FROM `acms_archives` as A left join `acms_arctype` as B ON A.typeid = B.id where B.topid=18 and A.arcrank=0 and A.sortrank = A.pubdate and A.pubdate > 0 group by A.mid order by A.pubdate desc limit 0,7
Run code
Cut to clipboard
文章:Mysql8.0及以上 only_full_group_by以及其他关于sql_mode原因报错详细解决方案 发表时间:2023-05-29, 16:40:11
#95
作者:广西河池市
php 写入文件,日志记录信息方法
private function write_log($data){
$years = date('Y-m');
//设置路径目录信息
$url = './public/log/txlog/'.$years.'/'.date('Ymd').'_request_log.txt';
$dir_name=dirname($url);
//目录不存在就创建
if(!file_exists($dir_name))
{
//iconv防止中文名乱码
$res = mkdir(iconv("UTF-8", "GBK", $dir_name),0777,true);
}
$fp = fopen($url,"a");//打开文件资源通道 不存在则自动创建
fwrite($fp,var_export($data,true)."\r\n");//写入文件
fclose($fp);//关闭资源通道
}
Run code
Cut to clipboard
文章:Thinkphp6配置使用Workerman WebSocket Socket 发表时间:2023-05-29, 16:38:04
PHP删除n天以前的文件,删除指定目录下指定类型(扩展名)的文件,包括子目录子和目录下的文件.
其中$ext数组代表不删除的文件扩展名.
调用函数trash('目录名',时间值);如trash('./files',3600)
参数时间值的单位是秒,如果省略不写,使用trash('./'),将删除当前时间10秒前及更早的文件.
function trash($folder,$time=10){ $ext=array('php','htm','html'); //带有这些扩展名的文件不会被删除. $o=opendir($folder); while($file=readdir($o)){ if($file !='.' && $file !='..' && !in_array(substr($file,strrpos($file,'.')+1),$ext)){ $fullPath=$folder.'/'.$file; if(is_dir($fullPath)){ trash($fullPath); @rmdir($fullPath); } else { if(time()-filemtime($fullPath) > $time){ unlink($fullPath); } } } } closedir($o); } trash('./');//调用自定义函数