序
2024年10月05日
一、概念
在PHP运行的过程中,可以将会产生输出的函数或操作结果暂时保存在PHP的缓冲区,只有当缓冲区满了、或者PHP运行完毕、或者在必要时候进行输出,才会将数据输出到浏览器,此缓冲数据的区域称为PHP的输出缓冲区(OB)。
二、原理
①使用了缓冲区之后,当执行PHP的时候,如果碰到了echo、print_r之类的会输出数据的代码(实际上许多函数都会产生输出),PHP就会将要输出的数据放到PHP自身的缓冲区,等待输出;
2024年10月05日
hello,大家好呀,我是yangyang,今天给php的朋友分享下关于在自己的tp项目中使用了think-swoole来全面协程化后遇到的关于导出文件输出流的一点小问题
导出报表是非常常见的需求,实现的技术方式有很多,小编不才,先给大家分享一下php我遇到的几种业务场景
2024年10月05日
今天主要介绍如何用slowquery工具来配置邮件告警,仅供参考。
进入到slowquery/alarm_mail/目录里,修改sendmail.php配置信息。
<?php $get_mail_content = get_include_contents('get_top100_slowsql.php'); function get_include_contents($filename) { if (is_file($filename)) { ob_start(); include $filename; $contents = ob_get_contents(); ob_end_clean(); return $contents; } return false; } $smtpserver = "xx.xxcom";//SMTP服务器 $smtpserverport = 587;//SMTP服务器端口 $smtpusermail = "xx.xx.xx";//SMTP服务器的用户邮箱 $smtpemailto = 'huangwbxx';//发送给谁 $smtpuser = "xunjian";//SMTP服务器的用户帐号,注:部分邮箱只需@前面的用户名 $smtppass = "xxxxx";//SMTP服务器的授权码 $mailtitle='【告警】慢查询报警推送TOP100条,请及时优化.'; $mailcontent='下面的慢查询语句或许会影响到数据库的稳定性和健康性,请您在收到此邮件后及时优化语句或代码。数据库的稳定性需要大家的共同努力,感谢您的配合!<br><br>' .$get_mail_content .'<br>< br>该邮件由slowquery系统自动发出,请勿回复,语句详细执行情况请登录<a href="http://1xx.xx.xx.xx/slowquery/slowquery.php">slowquery系统查看.<br><br>'; system("./sendEmail -f $smtpusermail -t $smtpemailto -s $smtpserver:$smtpserverport -u '$mailtitle' -o message-charset=utf8 -o message-content-type=html -m '$mailcontent' -xu $smtpusermail -xp '$smtppass'"); ?>
2024年10月05日
今天客户搬家新服务器之后发现织梦后台验证码不显示
就是这个毛病。经过检查发现他用记事本打开导致。尤其utf8尽量用Dreamweaver notepad++等编辑器编辑配置文件。否则容易bom丢失。
我们用一下方法解决成功
打开include文件夹下vdimgck.php文件(一般是倒数第三个)加入ob_clean() 清除图片生成缓存
2024年10月05日
PHP常用函数,记录下
/**
* UTF-8编码 GBK编码相互转换/(支持数组)
*
* @param array $str 字符串,支持数组传递
* @param string $in_charset 原字符串编码
* @param string $out_charset 输出的字符串编码
* @return array
*/
function array_iconv($str, $in_charset="gbk", $out_charset="utf-8"){
2024年10月05日
/* 图片地址 $obj->url 图片的宽,比如放大或缩小后的图片,如果图片宽本来是100,你把他放大到200,那这里就填200 $obj->largeWidth 图片的高,同上 $obj->largeHeight 新图的宽,比如你把图片从100放大到200,且只要其中的150,那这里就填150 $obj->newWidth 新图的高,同上 $obj->newHeight 新图相对于原图的的水平偏移,注意,这里的原图是指放大或缩小之后的图片, 就拿上面的讲,你的图片是100*200,当是你放大到 200*400, 现在你只要 150*150, 而且你要最中心的位置,即在 200*400 的大小中 在最中间的位置 裁剪 150*150 这时候 $obj->x 就应该是 (200-150)/2 = 25 , $obj->y 就应该是 (400-150)/2 = 125 $obj->x $obj->x */ <?php function clipping($obj){ //输出裁剪图片 $info=getimagesize($obj->url); $w=$info[0]; $h=$info[1]; switch($info[2]){ case 1: $largeImage=imagecreatefromgif($obj->url); break; case 2: $largeImage=imagecreatefromjpeg($obj->url); break; case 3: $largeImage=imagecreatefrompng($obj->url); break; } //创建一张临时图片,图片的width和height是放大或缩小之后的 $tempImage=imagecreatetruecolor($obj->largeWidth,$obj->largeHeight); //把即将要裁剪的图片放进这张临时图片 imagecopyresampled($tempImage,$largeImage,0,0,0,0,$obj->largeWidth,$obj->largeHeight,$w,$h); //销毁原图,因为现在已经有一张临时图片了 imagedestroy($largeImage); //创建一张新图,这张新图就是就要裁剪的大小 $newImage = imagecreatetruecolor($obj->newWidth,$obj->newHeight); // 把临时图片放进裁剪图片,参数已在上面说明了 imagecopyresampled($newImage,$tempImage,0,0,$obj->x,$obj->y,$obj->newWidth,$obj->newHeight,$obj->newWidth,$obj->newHeight); //销毁临时图片 imagedestroy($tempImage); //直接在浏览器输出图片,输出前先执行 ob_clean();不然可能出现输出失败 ob_clean(); switch($info[2]){ case 1: header('Content-Type:image/gif'); imagegif($newImage); break; case 2: header('Content-Type:image/jpeg'); imagejpeg($newImage); break; case 3: header('Content-Type:image/png'); imagepng($newImage); break; } //在浏览器输出之后就可以销毁了 imagedestroy($newImage); } ?>
2024年10月05日
在 PHP 中,我们直接进行 echo 、 或者 print_r 的时候,输出的内容就会直接打印出来。但是,在某些情况下,我们并不想直接打印,这个时候就可以使用输出缓冲控制来进行输出打印的控制。当然,这一套功能并不仅限出针对打印的内容,我们还可以做其它一些操作,这个我们放到最后再说。
首先,我们先来看看不让 echo 之类的内容打印输出。
2024年10月05日
1、ob_start()
开启文件缓存
2、ob_get_contents()
得到缓存中的内存
3、ob_get_length()
得到缓冲区的长度
4、ob_flush()
输出缓冲区的内容,如果你想获取缓冲区的内容要在这个函数之前使用ob_get_contents(),不然数据将会被清空
5、ob_end_flush()
输出缓冲区并关闭缓存
6、ob_end_clean()
2024年10月05日
php清除缓冲区的方法
方法1:ob_end_clean
ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲
语法:
ob_end_clean ( void ) : bool
此函数丢弃最顶层输出缓冲区的内容并关闭这个缓冲区。如果想要进一步处理缓冲区的内容,必须在ob_end_clean()之前调用ob_get_contents(),因为当调用ob_end_clean()时缓冲区内容将被丢弃。
返回值
成功时返回 TRUE, 或者在失败时返回 FALSE。 错误的原因首先是,在调用时没有一个起作用的缓冲区,或者是因为某些原因缓冲区不能被删除(可能对特殊缓冲区而言)。