2017年06月16日

我开发PHP应用使用IDE的主要功能

Filed under: PHP — cmpan @ 2017-06-16 12:31:11

一个IDE整合很多提高开发效率的工具,才能提现出它的价值。

我平时常用IDE如下功能:

  • 创建项目;
  • 创建、编辑、删除文件夹/文件;
  • 语法高亮,是个IDE都没问题;
  • 语法错误提示(PHP/JS/CSS);
  • 输入自动补全,是个IDE都没问题;
  • 文档注释提示
    鼠标放到函数、类、属性、方法上时,显示其文档注释信息。
  • 文档注释参数自动补。
  • 运行脚本
    • cil运行
    • 浏览器中运
  • 调试
    • cli运行脚本调试
    • 调试URL
  • 性能分析
  • 单元测试(PHPUnit)
    • 执行单元测试类并显示测试结果和错误信息
    • 调试单元测试
    • 代码覆盖率测试
  • 代码片段
  • 生成API文档
  • 完整的操作快捷键
  • git版本管理
    • gitflow
    • 支持ssh协议
  • composer依赖管理
    • 添加/更新依赖包
  • phing自动化部署
    当需要把代码部署到多台服务器的时候,自动部署作用就大了。这个在命令行下也能搞定,IDE能整合就更好一点。
  • Code Sniffer编码规范检查
  • 前端支持
    • emmet
    • sass/scss
    • js
  • 文字查找替换
    • 支持正则匹配
    • 可指定文件
    • 可指定文件
  • markdown编辑
    平时用markdown编写开发文档更有优势。

Views – 97

2017年03月18日

PHP不能保存session的问题

Filed under: PHP — cmpan @ 2017-03-18 18:13:11

php 的session无效的原因:
1、session模块没安装或被禁掉,这个可能性比较小;
2、保存session文件的文件夹不能读写;
3、生成session文件了,但是内容都是空的。出现这个问题可能是你在session变量下标使用了!或/,这个在文档里有说明(http://php.net/session.serialize-handler),不过我觉得这个也算是个bug吧。

Views – 248

2015年03月18日

PHP生成新浪t.cn短URL

Filed under: PHP » 实践经验 — cmpan @ 2015-03-18 20:55:18

网页内容里面显示URL时,如果在电脑上显示,问题不大,但是如果在手机上的话,一个加入SEO优化关键词的URL,占了手机好几行,所以短URL这个时候就发挥作用了。
有时候淘宝会禁止从某个网站跳转来,我们把淘宝页面做成短URL后,再放入网站中,短网址就成了一个中转站,这样淘宝就当点击来自短网址网站。

1
2
3
4
5
6
7
8
9
<?php
$key = '2270845191';
$r = file_get_contents('http://api.t.sina.com.cn/short_url/shorten.json?source=' . $key . '&url_long=http://yulans.cn/&url_long=http://www.yulans.cn/');
if($r) {
    $items = json_decode($r);
    foreach($items as $item) {
        print "{$item->url_long} => \n{$item->url_short}\n----------\n";
    }
}

Views – 2564

2014年04月6日

【原创】PHP的动态特性

Filed under: PHP » PHP » 实践经验 — cmpan @ 2014-04-06 13:21:15

原文2008年写,发布在PHP杂志2009.1第十五期,看PDF文档效果会更好点。
PHPer15.pdf 下载
作者:流水孟春 121169238(at)qq.com
本文主要总结给对PHP 特性不了解的新手看的,因此演示代码占比较多的篇幅。
大家看还缺哪些给补充吧。欢迎来邮件或在PHPChina 的《PHPer》杂志版块纠正错误。
动态语言就是能够在运行时改变程序结构和变量类型的语言。例如:新的类和对
象可以被加载和创建,新的函数或方法可以加入和去除等等,比如Smalltalk、Ruby、
Python、PHP、Lua、Perl、Groovy 等。反之则是静态语言,比如C/C++、Java、C#等。
动态语言的动态特性决定它开发的时候需要更少的代码,有更高的灵活性。PHP
的动态特性奠定了它存在的价值,熟悉PHP 的动态特性让我们更能活用PHP。
(全文 …)

Views – 2862

2013年06月22日

Linux下使用xhprof进行PHP性能分析

Filed under: PHP — cmpan @ 2013-06-22 23:36:21

1、安装xhprof
使用pecl命令安装

1
pecl install xhprof-beta

安装后,将在扩展文件夹中增加xhprof.so和在 $PHP_DIR/lib/php 文件夹中增加 xhprof_lib、xhprof_html文件夹。
为获得更好的UI界面,我们直接到https://github.com/phacility/xhprof下载整个项目下来,将项目文件夹改名为xhprof,放到web目录中使用。

2、在性能分析的代码中加入性能分析代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 启用
xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

// 不能直接用 xhprof_enable(); 需传3个参数才可以;原因不明。内存不足?

// 分析性能的代码

// 停止性能分析
$xhprof_data = xhprof_disable();


// 保存性能分析结果
include_once "xhprof/xhprof_lib/utils/xhprof_lib.php";
include_once "xhprof/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo"); // 第二个参数(xhprof_foo)不能带多个".",否则UI无法渲染

3、查看性能分析结果
打开链接浏览xhprof_html文件夹

http://url.to/xhprof/xhprof_html/

显示代码执行流程分析图需安装图形化显示工具包

1
yum install graphviz

Views – 271

2012年12月28日

PHP兼容公有云平台附件存贮的设计方案(原创)

Filed under: 云&开放平台 » PHP » 实践经验 — cmpan @ 2012-12-28 23:57:37

我们网站上常上传的附件有视频、音频、压缩包、文本文件、图片等文件,并且我们常需要对图片文件生成缩略图、或者是对已上传的文件改变大小并打上水印,而且会场将某一个文件夹里面的临时文件全部删除。在我们的便准环境里,直接用gd或imagemagick函数就可以直接读取文件系统里的图片处理后再存贮。但是共有云平台是不允许对代码目录进行写操作的,而是使用独立的文件系统来存贮附件。我们通过filesize()获取图片大小,或用imagecreatefromjpeg()来创建图片对象等,我们传入的参数这时候就会是通过http协议url了(否则用自定义的wrapper)。我们都知道,通过http来读文件相对于程序运行时间来说是很话时间的,是程序性能的瓶颈所在。这都不行,那啥办?使用自定义wrapper。
(全文 …)

Views – 1815

2012年12月9日

PHP单元测试脏数据处理方式

Filed under: PHP — 标签:, , — cmpan @ 2012-12-09 11:41:23

单元测试的时候,难免产生脏数据,对脏数据该如何处理呢?
我们最先想到的方法是:
在测试方法中,
被删 /改,操作之前记录数据,操作完成后还原数据。
新增 ,记录新增的主键,测试结束后在测试脚本中执行删除。

我之前想了很多种想取巧的方法,想让操作更简单,但是都不够完美,有的甚至非常差。
1、在数据层添加观察者,数据有变动后通知观察者来处理。
这样不但有些变动可能被遗漏,还打破了程序的结构,需要重新设计数据层,不可行。
2、使用临时表
在setUp()中创建临时表并绑定到表网关类,tearDown()中将其临时表删除。
这样当一个测试类中需要调用到多个表网关类的时候,就要弄n个表网关类并将其绑到模型中,灾难啊。

回到头来,还是用首先想到的方法更好。

Views – 1967

2012年11月19日

Windows PHP5.3 开发环境安装imagick

Filed under: PHP — 标签:, — cmpan @ 2012-11-19 17:58:41

1、下载 ImageMagick并安装

http://image_magick.veidrodis.com/image_magick/binaries/ImageMagick-6.6.2-10-Q16-windows-dll.exe

64位的系统也用这个,不要下x64的,否则跟php_imagick.dll不兼容。

2、下载php_imagick.dll

http://valokuva.org/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/vc9_nts/php_imagick.dll

如果你用的是线程安全的php,请下载http://valokuva.org/outside-blog-content/imagick-windows-builds/php53/imagick-2.3.0-dev/vc9_zts/php_imagick.dll

3、设置
在php.ini中添加
extension=php_imagick.dll

重启web server就OK了

Views – 4179

2012年11月18日

PHP业务逻辑层和数据访问层设计

Filed under: PHP — 标签:, , , , , , — cmpan @ 2012-11-18 22:40:16

1、面向对象能给我们什么?

进行分析之前,我们先来复习一下面向对象。
对象是要进行研究的任何事物。
是具有相同或相似性质的对象的抽象。
面向对象的要素:封装、继承、多态。
面向对象目的是:如何分配职责
(全文 …)

Views – 4483

2012年11月17日

改善PHP开发方式

Filed under: PHP » PHP » 实践经验 — cmpan @ 2012-11-17 18:13:41

使用好的开发方式,我们可以提高开发效率、避免和减少出错概率、保证代码质量、提高系统可维护性、避免灾难事故发生,可以花更多的时间找凉快的地方凉快去。
(全文 …)

Views – 2134

2012年11月16日

zend studio 9 选择自定义字体

Filed under: PHP » Zend Studio — cmpan @ 2012-11-16 13:00:38

Window -> Preferences -> General -> Appearance -> Colors and Fonts -> Text Font
点击右边edit设置字体。
如果是win7+,也许很多系统已安装的字体在这里看不见,点击弹出窗口左下的“显示更多字体”或直接进入windows字体管理界面,选择想要设置的字体,通过右键>显示来设置就OK了。

Views – 1720

2012年10月29日

【转】支持快速迭代的LAMP解决方案 ——贴吧LAMP解决方案

Filed under: PHP » PHP » 实践经验 — cmpan @ 2012-10-29 20:58:14

摘要:天下武功,唯快不破,互联网竞争的利器就是快!且听贴吧LAMP解决方案如何全面支持快速迭代。
关键词:LAMP,快速迭代
领域:架构

(全文 …)

Views – 1550

【转】漫谈社区PHP 业务开发

Filed under: PHP » PHP » 实践经验 — cmpan @ 2012-10-29 20:55:24

在当前这个互联网业务飞速发展时期,新的产品如雨后春笋般涌出,老产品线新业务也在不断突破和尝试。这就对快速开发迭代提出了更高的要求。

(全文 …)

Views – 1674

2012年10月23日

给ecshop添加可选择多语言

Filed under: PHP » PHP » 实践经验 — cmpan @ 2012-10-23 14:36:51

需求:
前台默认使用英文(en_us),可选择使用中文(zh_cn),同时英文页面依然是英文。

思路:
通过在访问的url上加上 lang=zh_cn变量来使用中文,没有lang变量的时候使用默认的语言

方案:
当url没有lang变量的时候,如果已登录用户设置了$_SESSION['lang'],则使用$_SESSION['lang']作为默认语言,如果未登录用户设置了$_COOKIE['lang'],则使用$_COOKIE['lang']作为默认语言,否则使用’en_us’作为默认语言。
(全文 …)

Views – 2645

2012年07月13日

discuz!X2.5个人空间DIY模块开发

Filed under: discuzx » PHP » PHP » 实践经验 — 标签: — cmpan @ 2012-07-13 18:12:30

1、在source/language/lang_space.php
的 $lang['blockdata']数组添加 ‘block下标’ => ‘模块显示名称’

程序将通过: http://localhost/dzx25/home.php?mod=spacecp&ac=index&op=getblock&blockname=block下标&inajax=1
获取内容

2、在source/function/function_space.php function getblockhtml() 的switch块中添加 ‘block下标’ switch条件并实现返回内容。

3、默认启用模块设置:

修改 source/function/function_home.php 的 getuserdefaultdiy() 函数
‘block`block下标’ => array(‘attr’ => array(‘name’=>’block下标’))

Views – 2649

2012年02月16日

zend studio打开已存在项目的方法

Filed under: PHP » Zend Studio » PHP » 实践经验 — cmpan @ 2012-02-16 20:31:02

我们用zend studio创建一个php项目以后,把项目文件夹复制到其他电脑上以或切换工作区后,是可以直接打开该项目的。

打开方法:
File > Import > General > Existing Projects into Workspace

然后选择项目所在文件夹即可。

Zend Studio每个工作区下创建一个.metadata和RemoteSystemsTempFiles文件夹来保存项目相关信息。
我们打开zend studio的时候,它打开了一个Workspace,这个Workspace里面可以有多个项目,项目文件可以再工作区文件夹里面,也可以在外面。

不像VS打开单个项目,而是打开一个Workspace,而项目则在Workspace中,如果想打开其他不在工作区中的项目,则把项目导入工作区即可。

Views – 5038

2012年02月15日

Zend studio 8+设置默认使用UTF-8编码

Filed under: PHP » Zend Studio » PHP » 实践经验 — cmpan @ 2012-02-15 12:42:21

Zend Studio 8+默认使用系统编码,也就是GBK,当我们用Zend Studio 用从SVN服务器导出项目的时候,如果项目使用UTF-8字符集,打开文件的时候中文将会出现乱码。
解决:
将如下设置为使用UTF-8编码
1、Project > Properties > Resource
2、Window > Preferences > General > Workspace
3、Window > Preferences > Web > HTML Files
4、Window > Preferences > Web > CSS Files
5、Window > Preferences > PHP > Debug

Views – 4311

2011年11月11日

用Flash理跨域上传或异步请求不能传Cookie的解决方案

Filed under: PHP » PHP » 实践经验 — cmpan @ 2011-11-11 03:09:00

用flash上传或flash做代理异步请求的时候,因为flash不能直接传递浏览器中的cookie到服务器,引起SESSION无法识别身份。想当年刚碰到这个问题的时候会非常头痛。其实在PHP里面,解决时很容易的。

客户端:把cookie变量添加到URL

1
2
3
4
5
6
7
    var url = 'http://www.vkas.net/index.php?user/account/getInfo';
    if(document.cookie.length > 0) {
        var cookies = document.cookie.split(';');
        for(var i in cookies) {
            url += '&' + encodeURI(cookies[i].replace(/^\s+|\s+$/g, ''));
        }
    }

服务器端:把URL中传的cookie.session.name设置到session id。这个过程必须在session_start()之前做。

1
2
3
4
    // 解决Flash不能传Cookie
    if (!empty($_GET[session_name()])) {
        session_id($_GET[session_name()]);
    }

Views – 2670

2011年10月26日

对于PHP大型开发框架的看法

Filed under: PHP » PHP » 实践经验 — cmpan @ 2011-10-26 10:00:09

PHP从诞生以来就受到广大编程爱好者的喜欢,成为中小站长的好帮手,并培养了大量的PHP编程人员,但是随着PHP的应用越发广泛,很多时候已不限于从事中小网站的应用,一些大型PHP项目也屡见不鲜。
(全文 …)

Views – 2116

2011年09月29日

最丑陋的PHP命名空间

Filed under: PHP » PHP » 实践经验 — cmpan @ 2011-09-29 13:12:29

PHP5.3加入了命名空间,很高兴有了这个特性,把自己写的框架改成使用命名空间的,发现很不爽。

写了个没有命名空间的函数 function myFnc(){}
调用的时候如果页面里声明了命名空间,就必须用 \myFnc() 来调用。
写了一个没有命名空间的类 class MyClass {}
调用的时候如果页面里声明了命名空间,就必须用 new \MyClass() 来调用。

为什么声明了命名空间就不能直接用 myFnc()、new MyClass() 类调用全局函数和类呢?
万恶之源在于画蛇的时候添了一足。
那条足在哪呢?
就是相对命名空间

我定义了如下命名空间
namespace sp\A;
namespace sp\A\B;
namespace sp\A\B\C;

在namespace sp\A;中,我可以使用 use B\ClassName、use B\C\ClassName来使用命名空间 namespace sp\A\B和namespace sp\A\B\C下的类,这是使用相对命名空间来访问命名空间,这造成混乱不少。
有相对就会有绝对,而绝对访问方式是:
use \spA\B\ClassName;
use \sp\A\B\C\ClassName;

看见use中的开头的反斜杠“\”了吗?他就是万恶之源中的万恶之源。

为什么一定要搞个相对命名空间出来而不统一直接用
use spA\B\ClassName;
use sp\A\B\C\ClassName;

如果这样我们没有命名空间的类可以直接用 new MyClass(),而不用 new \MyClass(),
调用没有命名空间的函数就可以直接用 muFnc(),而不必用 \myFnc()

画蛇何必添足呢!

Views – 2166

Older Posts »
Copyright © 2009 流水孟春 版权所有
Web技术,LAMP,Nginx,Web2.0,前端技术
Powered by WordPress & UI Designed by 流水孟春