Entries by jackson

发布PHP的一个SMTP发送邮件的类

smtp的类 实现SMTP发送邮件的文件,调用smtp的方法 index.php <form method=”post” name=”gotm2″> 标题:<input type=”text” name=”titles” /><br> 内容:<input type=”text” name=”conts” /><br> 发送给谁:<input type=”text” name=”mailtod” /><br> <input type=”submit” name=”subitem” value=”发送” /> </form> <a href=’mail.rar’>源码下载</a>

WORDPRESS中二次开发的一些小结

1.    根据分类来制定导航条 A.    修改页面header.php! <div id=”main-nav”> <ul> //增加这一行 </ul> </div> B.    修改style.css,增加下面一行语句 #main-nav li.cat-item{ margin-right: 2.2em; float: left; } 2.    删除控制面板首页多余的板块 A.删除开发日志面板,在wp-adminincludesdashboard.php注释掉下面几句代码。 // Primary feed (Dev Blog) Widget if ( !isset( $widget_options[‘dashboard_primary’] ) ) { $update = true; $widget_options[‘dashboard_primary’] = array( ‘link’ => apply_filters( ‘dashboard_primary_link’,  __( ‘http://wordpress.org/development/’ ) ), ‘url’ => apply_filters( ‘dashboard_primary_feed’,  __( ‘http://wordpress.org/development/feed/’ […]

好的代码里只要一个 return 语句

别再这样写了: public boolean foo() { if (true) { return true; } else { return false; } } 每次当我深入某个开源项目,看到大概是某个专家写的、并被有经验的专业人士审查过的这样的代码,我都会惊讶不已,竟然没有人去阻止这个开发者在这个方法里胡乱的放置返回语句。 请告诉我,把代码写成下面的样子很难吗? public boolean foo() { boolean flag = true; if (true) { flag=true; } else { flag=false; } return flag; } 这是Java基本常识。实际上,这不仅是Java基本常识,这是小学水平的Java知识。如果你的方法返回一个值,你应该在方法的开始处把它声明做一个变 量。然后再去做一些赋予这个变量正确意义的操作。然后,在你的最后一行,把这个变量返回给调用程序。这样做不仅仅是为写出好的代码,这是一种有教养的表 现。 你是否曾试图修改过一些在方法里到处都是返回语句的程序代码?无从下手。事实上,去维护这样的代码,你第一要做的是重新组织它的结构,让它里面不再有一大 堆的返回语句。这样才能把事情做好。没有任何一个方法是不可以写成只在末尾处有一个的、单一的、易于找到的返回语句的形式的。 的确,烂程序员总有一万个理由来说明他们为什么编写出这样糟糕的程序代码。“我只是为了避免在返回时一堆的多余的条件判断语句。”那好,首先,我告诉你, 计算机中执行一些条件判断语句时是该死的快,你用短路一个方法来节省CPU的一两个指令操作不是显的太荒诞了吗。此外,如果这些所谓多余的条件判断语句最 终没有派上用场的话,这是否是一个有用的信号来说明你的“多余”的代码可能需要重写,也许可以把它们重构成另外一个方法,让它们显的不多余? 关键要说的是,没有任何理由可以为写糟糕的代码或当懒惰的程序员做托辞,特别是当写出好的代码并不是那么困难的情况下。不要在写出里面有成百上千个返回语句的方法了。Java里的方法只可以返回一个值,相应的,一个方法应该有且只有一个返回语句。

PHP性能优化总结

1、 对许多代码文件说,特别是含有很多包含文件(include or require)。它们需要花费更多的时间和解析并产生中间代码。 2、 即使PHP代码文件没有发生改变,这个执行过程还会严格的按照流程执行。也就是说,无论你的应该程序是否发生改变,每次调用的时候,都需要重新编译生成opcode码。(其实这就是编译缓存存在的理由) 3、 这个流程不仅仅发生在主要的代码文件,对于每一次的include和require来说,都会执行这个流程。(这是可以继续优化的) 那些地方可以优化呢? 1、将mod_php fast-cgi化,避免每次都要加载这个模块,这个模块还要每次都去初始化php的解释环境。 2、缓存php文件的opcode码,这样话,避免每次都去编译。 APC可用用来实现第2点。编译缓存去掉了执行PHP过程中的解析过程,所以它对含有大量PHP代码的应用程序是非常有效的。通常情况下可以提升2-3倍以上的速度。对于包含大量include文件的项目,编译缓存更现实出它的优越性。 注:include并不会被编译缓存进行缓存。比如现在有两个文件:main.php 和tobeInclude.php,其中main.php中有这样的语句include tobeInclude.php’。假设中间码的后缀为.op(实际上不是这样)。那么加上缓存cache后 main.php=>main.op ,tobeInclude.php=>tobeInclude.op。但是PHP在执行main.php的时候,她还是需要去解析main.op中 的include命令,去调用tobeInclude.op的内容。具体流程是这样的。 …=>执行main.op=>执行tobeInclude.op=>… 而不是之间简单的执行main.op 所以说“过多的include文件会降低程序性能的”。 APC的具体配置。 Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。 APC 官方网站为 http://pecl.php.net/package/apc 1、安装 以PHP extension 形式安装 phpize ./configure –enable-apc –enable-apc-mmap make make install 生成.so,将.so拷贝到php引用modules的目录下,修改权限755 2、配置 apc.enabled boolean apc.optimization optimization 选项在脚本中可以改变 APC PHP.ini配置选项详解 [APC] ; […]

PHP.ini 性能优化

ctrl+f查找:disable_functions 找到后在=后面添加 (这里都是禁止在php里面执行的函数)代码: 复制内容到剪贴板 exec,system,passthru,error_log,ini_alter,dl,openlog,syslog,readlink, symlink,link,leak,fsockopen,proc_open,popepassthru,chroot,scandir, chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,popen 上面内容请放到一行。因为保持帖子的整体效果作了换行 一般后台只用加: 复制内容到剪贴板 disable_functions = system,passthru,shell_exec,com,exec,shell 查找:display_errors 如果是On的话改成Off 查找:magic_quotes_gpc 如果是Off的话改成On 查找:register_globals 如果是On的话改成Off 查找:open_basedir 后面增加 /www/:/tmp/ 这里是限制php可以访问的目录,后面一定要加上/,否则如果有/wwwabcd这个目录也会被访问得到 多个目录用英文:分隔。如果不添加/tmp/的话Discuz!的上传功能就无法使用 注意:以上内容在php.ini的开头会有相关设置的提示,请按ctrl+x查找下一个,不要直接在上面修改 —————————— 对php.ini优化 GD库的支持 ;extension=php_gd2.dll 将前面的冒号去掉, output_buffering = Off 输出缓存允许你甚至在输出正文内容之后发送 header(标头,包括cookies)行 其代价是输出层减慢一点点速度。你可以使用输出缓存在运行时打开输出缓存, 或者在这里将指示设为 On 而使得所有文件的输出缓存打开。 output_handler = ; 你可以重定向你的脚本的所有输出到一个函数, 那样做可能对处理或以日志记录它有用。 例如若你将这个output_handler 设为ob_gzhandler, 则输出会被透明地为支持gzip或deflate编码的浏览器压缩。 设一个输出处理器自动地打开输出缓冲。 找到这个 output_buffering = Off 修改为 On 注意,不要设置数值,只需要设置为On即可。 […]

PHP Socket 编程

socket Socket协议的形象描述 1.一个是发动机(Socket),提供了网络通信的能力 一个是轿车(Http),提供了具体的方式 2.socket的英文原义是“孔”或“插座”。在这里作为4BDS UNIX的进程通信机制,取后一种意义。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的 网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于 申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还 要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连 接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一 方挂起电话机相当于关闭socket,撤消连接。 在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是透明的,这也与 socket机制非常相似。socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足 了。 至此,我们对socket进行了直观的描述。抽象出来,socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没 有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。在网间网内部,每一个socket用一个半相关描述 : (协议,本地地址,本地端口) 一个完整的socket有一个本地唯一的socket号,由操作系统分配。 最重要的是,socket 是面向客户 / 服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的 socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。 socket利用客户 / 服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器socket 半相关为全局所公认非常重要。读者不妨考虑一下,两个完全随机的用户进程之间如何建立通信?假如通信双方没有任何一方的socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。 —– Socket 接口是访问 Internet 使用得最广泛的方法。 如果你有一台刚配好TCP / IP协议的主机,其IP地址是202 . 120.127 . 201 , 此时在另一台主机或同一台主机上执行ftp 202.120 .127.201 ,显然无法建立连接。因 ” 202.120.127.201 ” 这台主机没有运行FTP服务软件。同样, 在另一台或同一台主机上运行浏览软件 如Netscape,输入 […]

Ecshop功能改造范例

一. 看图: a) 二. 当管理员选中此图片后,将其图片的ID,设计者的ID,设计者的Name传入SESSION中暂时储存,同时并发增加商品表单,当添加商品成功后返回的商品ID,一并存入”ecs_downpic”表中储存,方便处理成衣商品与图片和设计者的一对一关系. 三. 具体的实现示例: a) <a href=”goods.php?act=down_goods&id={$value.id}”>下单成衣</a> i. Href地址中的参数,第一个传入的action,第二个传了一个id值过去.方便处理. b) 在goods.php中,我们得加入的实现代码. i. elseif ($_REQUEST [‘act’] == ‘down_goods’) 1. 首先知道模板点击之后,处理代码的地方,实现代码的地方在这个if语块中. ii. 得定义一个处理结果的连接. 1. $link [] = array (‘href’ => ‘goods.php?act=add’, ‘text’ => ‘添加成衣商品‘ ); a) 告诉代码,所有操作完成之后,连接是什么,会到哪里去. iii. $id = isset ( $_REQUEST [‘id’] ) ? $_REQUEST [‘id’] : 0; 1. 接收我们刚传过来的id值,因为需要这个id去找一些我们想要的数据. iv. 我们在这个功能中,首先得找到图片信息,然后去找到图片的设计者,最终达到商品和设计者之间的一种关系. […]

WordPress插件的结构

开发一个WordPress插件的一个更重要的方面,是你怎样设计它的结构。本文将研究几个关于设计插件结构的提示,以帮助你组织你的插件资源,避 免名字冲突。每一个插件作者的插件的结构都不尽相同,所以这些提示只是我的个人偏好。我将首先简单地描述一下一个WordPress插件是怎样工作的,然 后介绍一个插件的结构。 WordPress插件怎样工作 在将一个插件放入到wp-content/plugins/目录后,插件应该自动的处于可以安装的状态。 当一个插件被“启用”,等同于告知WordPress将你的代码装载到“每”个页面(包括管理页面)。这也就是为什么当你启用了很多的插件的时候,你的WordPress可能非常慢的原因,这是由它所引入的代码的量决定的。 从你的插件被启用,WordPress自动将你的代码装载后开始,你可以利用WordPress插件API。你还可以使用WordPress模板标签或者创建你自己的函数。 如果你计划开发一个改变文章内容或者评论的插件,我建议你读一下WordPress loop。WordPress loop是一个显示你的文章的循环。有些模板标签在这个循环外面无法工作,所以,你准确地知道你代码在哪里执行是非常必要的。你可通过使用Actions和Filters来控制这一点,这将会在将来的文章中解释。 文件夹结构 所有的WordPress插件都会被安装到wp-content/plugins目录中。有些插件作者的插件只包含一个文件,但是我推荐你总是创建一个文件夹来保存你的插件。 典型地,我会把我的插件放在如下的目录结构中: 插件文件夹名称(你插件的名字,没有空格或者特殊字符) 插件PHP文件 js文件夹(存放javascript文件) css文件夹(存放样式表文件) php文件夹(存放其他的PHP文件) 举例来说,这是一个我创建的样例结构: devlounge-plugin-series devlounge-plugin-series.php js css php 在devlounge-plugin-series文件夹中,我将只包含主要的PHP文件,把其他的文件都放到他们各自属于的文件夹中。这个结构将帮助其他插件作者在查看你的代码的时候,能够分辨哪个是主要的插件文件,哪些是支持插件正常工作的附属文件。 WordPress还建议将图片放到一个文件夹中,并且包含一个readme文件在你的插件中。 主要插件文件 当你开始编写一个插件的时候,前面七行用来描述你的插件。 下面展示的是插件在WordPress插件面板上出现的截图。 设定一个类结构 开发一个插件,并不需要你对PHP类了若指掌,但是如果你真的很熟悉,那会很有帮助。为了避免与其他的WordPress插件发生名字冲突,一个类结构是必须的。如果别人在插件当中使用了和你一样的函数名,那么就会发生一个错误,WordPress可能会无法响应直到你删除那个插件。 为了避免名字冲突,所有的插件都使用一个PHP类结构是急需的。这里有一些“骨架”代码,可以帮助你创建一个类结构。 if (!class_exists(“DevloungePluginSeries”)) { class DevloungePluginSeries { function DevloungePluginSeries() { //constructor } } } //End Class DevloungePluginSeries ?> 上述代码的含义是,首先检查是否有一个名叫DevloungePluginSeries的类存在。如果这个类不存在,那么创建这个类。 初始化你的类 下面的代码将会初始化你的类。 if (class_exists(“DevloungePluginSeries”)) { $dl_pluginSeries = new DevloungePluginSeries(); } ?> […]