存档

‘PHP’ 分类的存档

PHP如何控制终端输出文字颜色

2017年6月10日 没有评论

经常碰到一些语言在终端下执行的时候为什么可以输出一些彩色的文字样式,今天刚好执行 composer 工具的帮助时候发现竟然PHP也可以实现这样的效果(composer是一个Phar包程序,本质上就是一个PHP程序包)

经过研究发现其实原理挺简单,看看下面这段执行的PHP代码效果

$php -r “echo \”用\\033[0;32mPHP\\033[0m\\033[41m输出一段\\033[0;31m彩\\033[0;33m色\\033[0;34m文\\033[0;35m字 \\033[0m \n\”;”

PHP在终端输出彩色文字

其实背后原理很简单,分析上面的代码可以看到一串由 \033[ 开始的字符,其实这一段字符是用于引导非常规字符序列,在这里的作用就是引导设置输出属性,后边的[32m就是将前景色设置为绿色,字母m表示设置的属性类别,数字代表属性值。同类的多种设置项可以组合在一起,中间用分号(;)隔开。 阅读全文…

分类: PHP 标签:

创建PHP守护进程后台运行,监控状态退出自动重启

2016年10月6日 没有评论

经常用到PHP脚本写的小程序需要在服务器端保持后台运行,除了使用screen等工具外,这里介绍使用Linux shell编写一个小工具实现PHP脚本程序在后台保持运行,不受终端退出影响,且能自动监测脚本运行状态,对因其他因素导致程序退出的情况自动进行脚本重启,实现守护运行. 阅读全文…

分类: Linux, PHP 标签: ,

关于PHP做文件下载效率优化和体验提升

2015年9月28日 没有评论

Web开发中我们经常会遇到需要PHP处理要下载的文件,比如需要用户登陆才能下载文件,被下载的文件不允许直接访问,下载后的文件需要重命名等,通常我们可以使用下面的代码实现:

<?php
  authenticate(); //权限判断
  // 读取文件内容
  $content=file_get_contents($file);
  // 发送合适的 HTTP 头
  header("Content-type: application/octet-stream");
  header('Content-Disposition: attachment; filename="' . basename($file) . '"');
  header("Content-Length: ". filesize($file));
  echo $content; // 或者 readfile($file);
?>

但是这样做性能极低,你可以想像用户每次下载的时候程序都会一次一次地经过一个固定的buffer读取文件内容到内存,再发送到前端服务器,最后才能发送到客户端,还有各种网络超时和大量内存消耗,这将会是一个相当糟糕的设计。下面将介绍一个更直接高效的方式来实现。

X-Sendfile 是一种将文件下载请求由后端转交给前端服务器,由前端服务器直接处理文件下载请求的一种机制。它可以有效缓解后端服务器压力,将文件下载请求直接将由擅长处理静态文件请求的前端服务器如:Nginx、Lighthttpd等,极大地提高了文件下载请求效率。

X-Sendfile是通过一个非标准化的特定HTTP header实现的,后端服务器发送一个特定的HTTP header到前端服务器的时候,前端服务器从X-Sendfile得到请求的文件地址后,前端服务器将利用自身的功能机制将文件直接发送给用户。

X-Sendfile实际上是一种服务器内部的跳转机制,这种处理请求并不会将实际需要请求的文件地址暴露给用户,X-Sendfile做为一种非标准化的机制,不同的服务器的实现有所区别

SENDFILE 头 使用的 WEB 器
X-Sendfile Apache, Lighttpd v1.5, Cherokee
X-LIGHTTPD-send-file Lighttpd v1.4
X-Accel-Redirect Nginx, Cherokee

阅读全文…

分类: PHP 标签: , ,

ThinkPHP使用Uploadify等flash上传插件无法传递session的问题

2015年8月28日 没有评论

在ThinkPHP在使用Uploadify或其他基于Flash的上传插件的时候很多人会碰到上传控件无法传递Session的问题,特别是Firefox浏览器上面。官方解释可以将session id通过插件参数传递到后端,以下是Uploadify官方解决方案,但实测无法实现传递Session.

阅读全文…

OSX系统下面编译PHP的memcache等客户端扩展

2015年7月31日 没有评论

之前的一编文章『OS X 系统PHP 5.5.9 的 MongoDB、Memcache、Redis客户端模块分享』因为微云分享官方修改了分享策略导致连接失效的原因文件无法下载(已更新链接),看了文章的网友抓狂实在不好意思,所以决定写一篇详细的编辑方法,希望能授人以渔。

PHP客户端编辑主要步骤如下:

解压缩扩展的源文件压缩包

在解压后的根目录下面执行phpize命令

/usr/bin/phpize

这里大家要注意了,因为OSX系统自带一个比较老版本的php安装,如果大家想使用最新版的PHP的话上面的命令使用新版phpize的命令地址,下面其他PHP命令类似

然后在根目录下面执行 configure 命令

 ./configure –with-php-config=/usr/bin/php-config

注意这个时候可能提示找不到 configure命令,那看看是不是没有安装 autoconf 和 automake,安装相关程序再次执行即可

另外一定要注意参数–with-php-config 的版本和路径

接下来执行编辑

make

make install

这个时候如果编辑安装成功的话会提示生成的拓展位置,在 php.ini 文件添加 extension=memcache.so

查看 phpinfo() 函数结果可查看memcache 拓展信息说明安装成功,如果你很不幸依然不成功,可以在『关于我』里面找到本人的联系方式

分类: OS X, PHP 标签: , ,

PHP短标签(short_open_tag ),还是忘了它吧

2014年12月28日 没有评论

是的,PHP默认是开启PHP短标签的,即默认情况下short_open_tag=ON,大家看看PHP的官方说明上面讲的很清楚下面的官方配置文件上面也是这样说的(绿色和红色标)。

; This directive determines whether or not PHP will recognize code between

; <? and ?> tags as PHP source which should be processed as such. It is

; generally recommended that <?php and ?> should be used and that this feature

; should be disabled, as enabling it may result in issues when generating XML

; documents, however this remains supported for backward compatibility reasons.

; Note that this directive does not control the <?= shorthand tag, which can be

; used regardless of this directive.

; Default Value: On

; Development Value: Off

; Production Value: Off

; http://php.net/short-open-tag

short_open_tag = Off

不过在这里我还是建议大家还是忘了这个默认设置吧,最好还是不要使用短标签的好。

阅读全文…

分类: PHP 标签: ,

OS X 系统PHP 5.5.9 的 MongoDB、Memcache、Redis客户端模块分享

2014年6月28日 6 条评论

换上MacBook Pro后第一件事情就是安装工作环境了,PHP系统环境还是选择了XAMPP,直接有现成的OSX安装包相当方便百度已经做了最新版本的分发,下载地址在这里 XAMPP For OSX

集成环境的PHP版本为PHP5.5.9,MongoDB、Redis、Memcache客户端的PHP模块没找到需要自己安装编辑,下面是本人自己安装编辑的so文件,有兴趣的同学可以下载直接使用(理论上相同版本的PHP可以直接使用,没有测试欢迎反馈)

mongo.so
redis.so
memcache.so

原文件在这里,直接使用不成功的可以下载编译,我在编译的过程中遇到过一些小问题,有个别出现Waring提示,但是编译通过了我做了忽略处理。其他如果出现致命错误停止编译的情况下建议换用最新版本的

mongo1.5.2-for-php5.5.9.tgz
redis-2.2.5-for-php5.5.9.tgz
memcache-3.0.8-for-php5.5.9.tgz

如果下载的拓展不可用建议大家参考『OSX系统下面编译PHP的memcache等客户端扩展』自已试着编译安装

分类: OS X, PHP 标签: , , , ,

简单处理表单重复提交问题

2013年7月12日 2 条评论

之前写过一篇防止表单重复提交的博文,主要是介绍PRG设计模式的原理,相对比对理论化的一篇,今天给个简单有效的PHP实现.

方案的主要原理是,当用户在后台提交POST请求成功后,采用heaer在服务器端进行跳转(302重定向),这样在用户提交成功后刷新页面不会出现重复提交POST请求的问题.

需要注意的是,在服务器端通过302跳转只能解决提交成功响应后刷新页面重复提交问题,并不能解决POST交响应中服务器还未返回响应时刷新页面造成的重复提交.
阅读全文…

分类: PHP 标签: ,

Web安全威胁与防范工作总结

2012年9月16日 没有评论

WEB开发中由于项目规模和需求的规范性,安全问题可能并不是所有的时候都能引起足够的关注,大多数时候技术人员根据经验和习惯作一些处理,一些相对比较严格和苛刻的问题,往往都是出现问题以后才临时解决。小规模应用出现状况的情况比较少,而且处理起来也可以比较迅速,但是应用达到一定规模以后,如果前期没有做好足够的工课,后期补漏洞的代价就比较高了。所以在条件允许的情况下,把安全问题放在首要位置,或许是一个比较明智的选择。下面是本人总结的几点WEB安全相关知识,备以常参。希望对大家熟悉WEB攻击原理与处理,提高高质量代码产出率和娴熟应对安全威胁有所帮助, 阅读全文…

分类: PHP, 架构 标签: , , , ,

分享一段预防SQL注入和跨站攻击代码

2012年9月5日 没有评论

分享一段防SQL注入和跨站攻击代码,经过生产环境测试和多种安全漏洞扫描软件扫描,能解决大部分SQL注入和跨站脚本攻击问题。

代码包含常见SQL注入与跨站攻击过滤函数,支持SQL注入,跨站脚本攻击和跨站POST提交等常见安全过滤功能。

https://github.com/aboustudy/Web-Security-Filter

分类: PHP 标签: ,