首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
135 阅读
2
php接口优化 使用curl_multi_init批量请求
129 阅读
3
2024年备考系统架构设计师
102 阅读
4
《从菜鸟到大师之路 ElasticSearch 篇》
101 阅读
5
PHP 文件I/O
89 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
785
篇文章
累计收到
4
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
559
篇与
的结果
2023-08-07
PHP文件型缓存解决方案secache
PHP文件型缓存解决方案secache注: 前两天发现的东西, 不同于一般的PHP文件缓存实现手法. 写得不错.类似Memcahced, 单文件实现, 支持并发, 比传统分离小文件缓存方式性能提高一倍.由于缓存文件只有一个,PHP最大寻址能力是2G,过大会指针溢出, 所以只能支持1G的缓存.以下是官方网站的介绍secache是一个PHP编写的文件型缓存解决方案纯php实现, 无须任何扩展,支持php4 / 5使用lru算法自动清理过期内容可以安全用于多进程并发最大支持1G缓存文件使用hash定位,读取迅速项目及下载地址 : http://code.google.com/p/secache/secache使用方法require('../secache/secache.php');$cache = new secache;$cache->workat('cachedata');$key = md5('test'); //必须自己做hash,前4位是16进制0-f,最长32位。$value = '值数据'; //必须是字符串$cache->store($key,$value);if($cache->fetch($key,$return)){echo ''.$key.'=>'.$return.'';}else{echo 'Data get failed! '.$key.'';}
2023年08月07日
10 阅读
0 评论
0 点赞
2023-08-07
SPL spl_autoload_register与__autoload方法使用示例浅谈
SPL spl_autoload_register与__autoload方法使用示例浅谈最近在写一个框架,当然过程中借鉴了很多前辈的写框架的经验啦,哈哈。在谈到框架自动加载类的方面,我大概翻了一下,现在主流的框架系统都使用spl_autoload_register函数,而非__autoload函数。额。。。为毛不用__autoload呢????示例:function my_own_loader($classname){$class_file = strtolower($classname).".php";if (file_exists($class_file)){require_once($class_file);}}spl_autoload_register("my_own_loader");$a = new A();这里要注意的是:__autoload 方法在 spl_autoload_register 后会失效,因为 autoload_func 函数指针已指向 spl_autoload 方法可以通过下面的方法来把 _autoload 方法加入 autoload_functions listspl_autoload_register( '__autoload' );此外我们还可以使用我们自定义的加载方法:第一种函数式:function my_own_loader($classname){$class_file = strtolower($classname).".php";if (file_exists($class_file)){require_once($class_file);}}spl_autoload_register("my_own_loader");$a = new A();第二种类式:class Loader{public static function my_own_loader($classname){$class_file = strtolower($classname).".php";if (file_exists($class_file)){require_once($class_file);}}}// 通过数组的形式传递类和方法的名称spl_autoload_register(array("my_own_loader","Loader"));$a = new A();spl_autoload_register()函数应该是主流框架使用最多的也是非常核心的函数之一,可实现自动注册函数和类,实现类似__autoload() 函数功能,简化了类的调用与加载,提高了工作的效率。支持版本:PHP 5 >= 5.1.2至于效率问题。php手册上有如此之话:bool spl_autoload_register ([ callback $autoload_function ] )将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。貌似他么指向同一个堆栈,效率上都是大哥二哥的问题,哈哈。。有兴趣的也可以具体去测试下。。
2023年08月07日
13 阅读
0 评论
0 点赞
2023-08-07
PHP的路由浅析
PHP的路由浅析1.什么是php的路由机制1、路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。举个例子,如:http://main.wopop.com/article/1 其中:/article/1 -> ?_m=article&id=1。2、然后将拥有对应参数的URL转换成特定形式的URL结构,是上面的过程的逆向过程。2.PHP的URL路由方式总体来说就是:获取路径信息->处理路径信息URL路由方式:第一种是通过url参数进行映射的方式,一般是两个参数,分别代表控制器类和方法比如index.php?c=index&m=index映射到的是index控制器的index方法。第二种,是通过url-rewrite的方式,这样的好处是可以实现对非php结尾的其他后缀进行映射,当然通过rewrite也可以实现第一种方式,不过纯使用rewrite的也比较常见,一般需要配置apache或者nginx的rewrite规则RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]第三种,就是通过pathinfo的方式,所谓的pathinfo,就是形如这样的url。xxx.com/index.php/c/index/aa/cc,apache在处理这个url的时候会把index.php后面的部分输入到环境变量$_SERVER['PATH_INFO'],它等于/c/index/aa/cc。然后我们的路由器再通过解析这个串进行分析就可以了,后面的部分放入到参数什么地方的,就依据各个框架不同而不同了。一个简单的PHP路由实现3.1 修改htaccess文件编写服务器apache或IIS自带的rewrite文件,将URL结构导入指定文件比如:index.php。开启rewrite:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。启用.htaccess,需要修改apache/conf/httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。Options FollowSymLinksAllowOverride None改为Options FollowSymLinksAllowOverride All然后我写了这样的rewrite:RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭RewriteCond $1 !^(index.php.php|images|robots.txt)RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$ sharexie/test.php?action=$1&id=$2([a-zA-Z]{1,})-([0-9]{1,}).html$是规则,sharexie/test.php?action=$1&id=$2是要替换的格式,$1代表第一个括号匹配的值,$2代表第二个。上面的代码就是将URL结构导入sharexie/test.php中。把这些保存为.htaccess文件放在网站的根目录就行了。test.php<?phpecho '你的Action是:' . $_GET['action'];echo '<br/>';echo '你的ID是:' . $_GET['id'];?>好了,我们现在在浏览器中输入:127.0.0.1/view-12.html输出的是:你的Action是:view你的ID是:121、讲解一下RewriteRule:RewriteRule是重写规则,支持正则表达式的,上面的([0-9]{1,})是指由数字组成的,$是结束标志,说明是以数字结束!2、RewriteRule配置参数1) R 强制外部重定向2) F 禁用URL,返回403HTTP状态码。3) G 强制URL为GONE,返回410HTTP状态码。4) P 强制使用代理转发。5) L 表明当前规则是最后一条规则,停止分析以后规则的重写。6) N 重新从第一条规则开始运行重写过程。7) C 与下一条规则关联8) T=MIME-type(force MIME type) 强制MIME类型9) NS 只用于不是内部子请求10) NC 不区分大小写11) QSA 追加请求字符串12) NE 不在输出转义特殊字符 \%3d$1 等价于 =$1举例:1、将xianglc将定到 index.php?c=myuser&m=itime&domain=xianglcRewriteRule ^([a-zA-Z0-9]){6,20}/?$ index.php?c=myuser&m=itime&domain=$0 [L]2、#RewriteRule ^/index.html$ /1.php [L]RewriteRule ^/index-(.?)-(.?)-(.?)-(.?)-(.?)-(.?)-(.?)-(.?)-(.*?)$ $9&a=$1&b=$2&c=$3&d=$4&e=$5&f=$6&g=$7&h=$8 [C,NC]RewriteRule ^(.?)-(.?)-(.?)-(.?)-(.?)-(.?).html(.*?)$ /1.php?$7&i=$1&j=$2&k=$3&l=$4&m=$5&n=$6 [QSA,L,NC]Php内容:3.2 一个路由解析器,用来解析规则,匹配和转换URL。先将所有的链接转到index.php中,在index.php中进行路由分发,按照类和方法分配到相应的类文件中的函数上去。用$_SERVER['REQUEST_URI']取出URL中的www.xx.com/后面的部分,按照相关规则分别区分为class和mothod以及参数key=>value的值。最后include该类文件,执行其中的函数。实例如下:<?phperror_reporting(0);date_default_timezone_set("Asia/Shanghai");$_DocumentPath = $_SERVER['DOCUMENT_ROOT'];$_RequestUri = $_SERVER['REQUEST_URI'];$_UrlPath = $_RequestUri;$_FilePath = __FILE__;$_AppPath = str_replace($_DocumentPath, '', $_FilePath); //==>\router\index.php$_AppPathArr = explode(DIRECTORY_SEPARATOR, $_AppPath);for ($i = 0; $i < count($_AppPathArr); $i++) { $p = $_AppPathArr[$i]; if ($p) { $_UrlPath = preg_replace('/^\/'.$p.'\//', '/', $_UrlPath, 1); } }$_UrlPath = preg_replace('/^\//', '', $_UrlPath, 1); $_AppPathArr = explode("/", $_UrlPath); $_AppPathArr_Count = count($_AppPathArr); $arr_url = array( 'controller' => 'sharexie/test', 'method' => 'index', 'parms' => array()); $arr_url['controller'] = $_AppPathArr[0]; $arr_url['method'] = $_AppPathArr[1]; if ($_AppPathArr_Count > 2 and $_AppPathArr_Count % 2 != 0) { die('参数错误');} else { for ($i = 2; $i < $_AppPathArr_Count; $i += 2) { $arr_temp_hash = array(strtolower($_AppPathArr[$i])=>$_AppPathArr[$i + 1]); $arr_url['parms'] = array_merge($arr_url['parms'], $arr_temp_hash); }} $module_name = $arr_url['controller']; $module_file = $module_name.'.class.php'; $method_name = $arr_url['method']; if (file_exists($module_file)) { include $module_file; $obj_module = new $module_name(); if (!method_exists($obj_module, $method_name)) { die("要调用的方法不存在"); } else { if (is_callable(array($obj_module, $method_name))) { $obj_module -> $method_name($module_name, $arr_url['parms']); $obj_module -> printResult(); } }} else { die("定义的模块不存在");}?>参考文档:http://httpd.apache.org/docs/2.2/rewrite/http://www.cnblogs.com/xiangxiaodong/archive/2012/07/19/2600138.html用原生的php书写ci的路由功能:http://www.nowamagic.net/librarys/veda/detail/1938
2023年08月07日
11 阅读
0 评论
0 点赞
2023-08-07
PHP面向对象的链式调用方式实现
PHP面向对象的链式调用方式实现在ZF里面经常有和jQuery类似的链式的结构代码。$("p").css("color").addClass("selected");//jQuery//比如这样jQuery可以连着使用2个方法。在ZF中也有发现类似的链式$this->_plugins ->setRequest($this->_request) ->setResponse($this->_response);于是就跟进了函数,发现实现起来也还蛮简单的。只需要在每个方法最后返回$this.下面是我写的一个例子。<?phpclass wc{ public function __construct($who) { echo "{$who}准备去上厕所了<br/>"; } public function go() { echo "1.跑出了教室<br/>"; return $this; }public function action() { echo "2.到了厕所,开始尿尿<br/>"; return $this; }public function back(){ echo "3.尿尿结束,回到教室"; return $this; } }$xm = new wc("小明");$xm->go()->action()->back();/ 执行结果:小明准备去上厕所了1.跑出了教室2.到了厕所,开始尿尿3.尿尿结束,回到了教室/当然这里也只是单纯实现了功能,至于其他的因素这里并没有考虑。嘿嘿。?>ps:类中方法返回某个类对象;或者类中属性 指向某个类对象 即可
2023年08月07日
12 阅读
0 评论
0 点赞
2023-08-07
php函数
随机函数gmp_random — 产生一个随机数lcg_value — 组合线性同余发生器(返回范围为 (0, 1) 的一个伪随机数)mt_rand — 生成更好的随机数(最大值2147483647)rand — 产生一个随机整数(最好用mt_rand代替)(win下默认最大值32767,最大值2147483647)str_shuffle — 随机打乱一个字符串array_rand — 从数组中随机取出一个或多个单元shuffle — 将数组打乱安全相关函数以下PHP内置函数能增加PHP代码的安全性:类型转换(非函数)(int), (integer) - 转换为整数(bool), (boolean) - 转换为布尔值(float), (double), (real) - 转换为浮点数(string) - 转换为字符串(array) - 转换为数组//防止sql注入mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符( NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.),并考虑到连接的当前字符集。不转义 % and _.mysqli::real_escape_string —(mysqli_real_escape_string) 转义特殊字符( NUL (ASCII 0), \n, \r, \, ', ", and Control-Z.)到一个字符串中用于SQL语句,考虑到当前编码的连接.不转义 % and _.//防止上传漏洞exif_imagetype 判断一个图像的类型getimagesize 函数将测定任何图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。finfo_file — 返回一个文件的信息(PHP 5 >= 5.3.0)escapeshellcmd — 过滤用作命令的字符串中的特殊字符(转义shell元字符)转义( #&;`|*?~<>^()[]{}$\, \x0A and \xFF. ' and ")stream_filter_append — 为数据流添加过滤器(附加一个过滤器到一个数据流)stream_filter_prepend — 为数据流预备添加过滤器(附加一个过滤器到一个数据流)stream_filter_register — 注册一个用户定义的数据流过滤器rawurldecode — 对已编码的 URL 字符串进行解码rawurlencode — 按照 RFC 3986 对 URL 进行编码返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 » RFC 3986 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱urldecode — 解码已编码的 URL 字符串urlencode — 编码 URL 字符串 返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。str_replace子字符串替换preg_filter — 执行一个正则表达式搜索和替换(PHP 5 >= 5.3.0)preg_grep — 返回匹配模式的数组条目(返回与模式匹配的数组单元)preg_match_all — 执行一个全局正则表达式匹配preg_match — 执行一个正则表达式匹配preg_quote — 转义正则表达式字符 正则表达式特殊字符有. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -preg_replace_callback — 执行一个正则表达式搜索并且使用一个回调函数进行替换preg_replace — 执行一个正则表达式的搜索和替换htmlentities — 转换所有合适的字符为HTML实体htmlspecialchars — 转换特殊字符为HTML实体(转换',",<,>,&)quotemeta — 引用元字符(在. \ + * ? [ ^ ] ( $ )前添加反斜杠)addcslashes — 以 C 语言风格使用反斜线转义字符串中的指定字符(转义自定义字符)addslashes — 使用反斜线转义字符串(在',",\,NUL前添加反斜杠)strip_tags — 从字符串中去除 HTML 和 PHP 标记array_filter — 用回调函数过滤数组中的元素array_map — 将回调函数作用到给定数组的单元上array_walk_recursive — 对数组中的每个成员递归地应用用户函数array_walk — 对数组中的每个成员应用用户函数ctype_alnum — 检测是否符合字母数字格式ctype_alpha —检测是否都是字母ctype_cntrl — 是否都是控制字符ctype_digit — 是否都是数字ctype_graph — 检测是否都是可以显示的字符(不包含空格)ctype_print — 检测是否都是可以显示的字符(包含空格)ctype_punct — 检测是否是可以显示的字符,但是不包含字母数字和空格(注:是否都是键盘上的标点符号和特殊字符)//数据筛选 可验证:布尔值,email,整数,浮点数,IP,url,正则等。filter_has_var — 检查是否存在指定类型的变量filter_input_array — 从脚本外部获取多项输入,并进行过滤(得到多个外部变量并选择性地过滤它们)filter_input — 从脚本外部获取输入,并进行过滤(获得一个特定的外部变量的名称,并选择性地过滤它)filter_list — 返回一个所有支持的过滤器的列表filter_var_array — 得到多个变量并选择性地过滤它们filter_var — 用一个指定过滤器过滤一个变量gettype — 获取变量的类型*intval — 获取变量的整数值 var 可以是任何标量类型。 intval() 不能用于 array 或 object。floatval — 获取变量的浮点值 var 可以是任何标量类型。你不能将 floatval() 用于数组或对象。strval — 获取变量的字符串值 var 可以是任何标量类型。不能将 strval() 用于数组或对象。is_array — 检测变量是否是数组is_bool — 检测变量是否是布尔型is_float — 检测变量是否是浮点型is_int — 检测变量是否是整数is_null — 检测变量是否为 NULLis_numeric — 检测变量是否为数字或数字字符串is_scalar — 检测变量是否是一个标量is_string — 检测变量是否是字符串settype — 设置变量的类型
2023年08月07日
18 阅读
0 评论
0 点赞
1
...
96
97
98
...
112