首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
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
累计撰写
786
篇文章
累计收到
30
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
560
篇与
的结果
2023-08-07
crontab+php-cgi/php 定时执行PHP脚本
crontab+php-cgi/php 定时执行PHP脚本说到crontab ,一般是crontab+shell 组合来执行任务,在开发中可能有这类需要:每隔一段时间请求一个php页面。有这样的需求就得用到crontab了,稍微看了php命令行模式,网上搜索了相关资料,整理如下。在web根目录创建请求的脚本index.php 我的文件路径(根据安装路径不同有不同路径):/usr/local/webserver/htdosc/index.php创建crontab文件2.1 crontab -e2.2 * /usr/local/webserver/php/bin/php-cgi -q /usr/local/webserver/htdosc/index.php#编辑crond计划,每分钟请求index.php完成,以上步骤完成后,在我的电脑中能正常每分钟请求index.php注意事项:一. /usr/local/webserver/php/ 是我的php安装路径二. php-cgi 是php解析器(我的理解是这样,总感觉我理解的不对,希望大虾们指正),有些资料是用./bin/php,我电脑上就不能,所以用php-cgi,可能安装的方式不对吧。三. -q 是安静模式(某些资料中看到的)运行php脚本四. 有些资料是 把在index.php的首行添加#! /usr/local/webserver/php/bin/php -q ,并对index.php添加执行权限。我没有这样做,也能正常请求index.php 。方法不一样,道理一样吧!
2023年08月07日
12 阅读
0 评论
0 点赞
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日
11 阅读
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 点赞
1
...
96
97
98
...
112