ZendStudio 调试WordPress

Zend studio是编辑、调试php文件的工具,使用很方便(类似于eclipse,只不过它是php的)。使用zend studio可以很方便的阅读和调试php代码。这里给出调试wordpress源码的方法。

搭建wordpress博客,需要apache(或者IIS)、mysql、php,这里我们可以使用apache、mysql和php的集成环境wamp。这款软件安装方便,省去了我们手动配置的麻烦,不过安装完毕wamp后,mysql的默认密码为空,最好修改一下,怎么修改,不在赘述(百度、谷歌之)。

我们下载wordpress的源码,解压到wamp自带的apache的web发布目录下,相对路径是wamp/www,将解压后的文件放在www文件夹中,启动wamp的服务。浏览器访问http://localhost/wp-admin/install.php(根据自己设置的目录相应修改URL),正常安装wordpress。安装完毕后,测试下前台和后台是否正常。如果正常,下面开始将wordpress放到zend studio中。

打开zend studio,界面

和eclipse的界面非常相似。新建一个php项目,新建时选择Local php Project,我使用的zend studio 9,版本不同可能造成具体操作不同。注意:项目的路径要选在wamp发布web程序的目录,即wamp/www目录中,截图:

项目新建成功后,再把安装成功的wordpress源码copy进我们新建的项目中,如我新建的项目名为wampwp,我的wordpress放在一个名叫source的文件夹中,把source文件夹拖入wampwp文件夹中即可,然后F5刷新zend studio中的项目文件。截图:为zend studio项目目录截图:

然后为zend studio指定我们apache服务器,在wordpress源文件中找到index.php(不要在wp-admin、或者wp-include文件夹中找,在主目录中),右击index.php文件,选run as,然后点击configuration,配置运行所需的apache,截图:

配置。选择默认的即可。然后点击configuration,进入具体配置,查看配置是否正确

URL一般就是localhost或者127.0.0.1,下面的路径填写apache发布web程序的目录。确认无误后,确定。

zend studio调试php程序有两种方法,使用zend debugger和xdebug。zend debugger好像对php 5.3支持不太好,这里使用xdebug,使用xdebug还有原因就是wamp已经为我们集成了xdebug,不用自己再安装了,O(∩_∩)O~。xdebug的信息,可以使用phpinfo()函数查看。

好了,开始设置断点,执行调试。我们可以在wp-blog-header.php文件的$wp_did_header = true;这一行加一个断点,因为index.php文件加载wp-blog-header.php,这个文件是所有前台用户的必经之路,在这里设置断点,我们可以一步步具体查看wordpress是怎么启动起来的。截图:

设置完断点,右击index.php,选择debug as,点击php web application,启动调试。可以看到程序在断点处停住,F5 step into,F6 step over等等,千里之行始于调试,move。
本文参考至: 易踪网

ZendStudio 常用快捷键

注:本文省略“通用快捷键”描述,诸如:ctrl+N=新建,ctrl+O=打开,ctrl+C=复制,ctrl+V,ctrl+X……等等几乎所有软件都通用的一组快捷键,而着重介绍zde独有的快捷键。

了解并灵活运用这些快捷键以后,一定能帮助您在实际的项目操作中更加游刃有余。

编辑功能

组合键

实现功能

适用条件

Ctrl+/

单行注释。当前为php代码时,则在光标所在行添加双斜杠行注释,选择多行则每一行都添加双斜杠;而当代码为html时则在行前后添加<!– –>注释,选中多行将在选区前后添加<!– –>注释,而非每行添加

PHP代码、html代码全部适用,不适用于CSS部分

Ctrl+Shift+/

块注释,为选择的PHP代码添加/* */块注释,如果没有选择任何代码,则将光标所在行添加块注释

PHP代码适用,对HTML代码其功能与Ctrl+/相同

Ctrl+U

选择的代码片段全部转换为大写

php、html等均适用

Ctrl+L

选择的代码片段全部转换为小写

php、html等均适用

Ctrl+D

复制光标所在行

所有代码均适用

Ctrl+E

删除光标所在行

所有代码均适用

Tab/Shift+Tab

按tab增加代码缩进,默认为4个空格位置,可在首选项中进行设置,Shift+Tab则减少缩进,此操作对多行操作同样有效。即多行同时增加/减少缩进。

所有代码均适用

Ctrl+Alt+F

在文件中查找,打开“在文件中查找”对话框

整个ZDE环境适用

Ctrl+BackSpace

删除光标前一个单词,或者一个符号,注意这里的“一个单词”是由ZDE自行理解的,与英文中的一个单词有一定出入

所有代码均适用

Ctrl+G

转到行。打开转到行对话框,填写行数字即可转到相应行,此为通用快捷键

整个ZDE环境适用

Alt+ →,←

右箭头是定位到光标的下一个位置,左箭头则是定位到光标的上一个位置。

整个ZDE环境适用

环境切换

组合键

实现功能

适用条件

Esc

隐藏辅助窗口,以便让编辑区域最大,而文件管理器窗口不会隐藏

整个ZDE环境适用

Ctrl+W

切换自动换行,即当代码超长时是否出现横向滚动条

Ctrl+Tab

在各个编辑器标签页之间切换,也可描述为在多个打开的文件窗口间切换

Ctrl+F4

关闭当前标签页,Alt+F4是关闭整个ZDE环境,注意下区别

HTML标记

组合键

实现功能

适用条件

Ctrl+1,2,3

分别添加一对<h1>、<h2>、<h3> html标签,

所有代码部分

Ctrl+Enter

断行,即产生一个<br />标签,这里注意ZDE自动产生的为<br>标签,不符合web标准

Ctrl+~

空格即一个 注意:~键位于PC键盘数字1左侧,tab键上方

Ctrl+B

粗体,产生一对<b>标签,web标准似乎提倡使用<strong></strong>

Alt+I

斜体,产生一对<i>标签

书签操作

组合键

实现功能

适用条件

F2

添加/删除书签

所有代码部分

Ctrl+F2

跳到当前文件的下一个书签

Alt+F2

在当前项目的所有书签间切换

Ctrl+Shift+F2

删除所有书签

Ctrl+Shift+M

显示书签对话框

Zend Studio调试快捷键列表

组合键

实现功能

适用条件

F9

添加/删除断点

所有代码部分

F10

逐过程。单步执行调试文件到下一行

F5

开始执行。执行调试文件,直到遇到断点。

F8

调试URL。打开调试URL对话框

F12

概要文件URL。打开profile URL对话框

Shift+F8

添加监视点。打开添加监视点对话框

Shift+F11

跳出。单步执行到返回后执行的第一行

F11

逐语句。单步执行到下一被执行的行

Shift+F10

执行到光标行。执行代码到光标所在行。

Ctrl+F5

无中断的执行脚本

Shift+F5

停止调试器

Ctrl+Alt+B

在浏览器中显示

注:调试快捷键只有在调试代码的时候才会用到,关于如何在Zend Studio 调试脚本,以及如何搭建调试服务器等内容,在后续教程中将做详细的讲解。

 

nginx错误:File Not Found

使用php-fpm解析PHP,”No input file specified”,”File not found”是令nginx新手头疼的常见错误,原因是php-fpm进程找不到SCRIPT_FILENAME配置的要执行的.php文件,php-fpm返回给nginx的默认404错误提示。

比如我的网站doucument_root下没有test.php,访问这个文件时通过抓包可以看到返回的内容。

HTTP/1.1 404 Not Found
Date: Fri, 21 Dec 2012 08:15:28 GMT
Content-Type: text/html
Proxy-Connection: close
Server: nginx/1.2.5
X-Powered-By: PHP/5.4.7
Via: 1.1 c3300 (NetCache NetApp/6.0.7)
Content-Length: 16

File not found.

很多人不想用户直接看到这个默认的404错误信息,想自定义404错误.

给出解决办法前我们来先分析下如何避免出现这类404错误,然后再说真的遇到这种情况(比如用户输入一个错误不存在的路径)时该怎么办,才能显示自定义的404错误页。

一、错误的路径被发送到php-fpm进程

出现这类错误,十个有九个是后端fastcgi进程收到错误路径(SCRIPT_FILENAME),而后端fastcgi收到错误路径的原因大都是配置错误。

常见的nginx.conf的配置如下:
[codesyntax lang=”php”]

server {
    listen   [::]:80;
    server_name  example.com www.example.com;
    access_log  /var/www/logs/example.com.access.log;  

    location / {
        root   /var/www/example.com;
        index  index.html index.htm index.pl;
    }

    location /images {
        autoindex on;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example.com$fastcgi_script_name;
        include fastcgi_params;
    }
}

[/codesyntax ]
这个配置中有很多不合理的地方,其中一个明显的问题就是root指令被放到了location / 块。如果root指令被定义在location块中那么该root指令只能对其所在的location生效。其它locaiont中没有root指令,像location /images块不会匹配任何请求,需要在每个请求中重复配置root指令来解决这个问题。因此我们需要把root指令放在server块,这样各个location就会继承父server块定义的$document_root,如果某个location需要定义一个不同的$document_root,则可以在location单独定义一个root指令。

另一个问题就是fastCGI参数SCRIPT_FILENAME 是写死的。如果修改了root指令的值或者移动文件到别的目录,php-fpm会返回“No input file specified”错误,因为SCRIPT_FILENAME在配置中是写死的并没有随着$doucument_root变化而变化,我们可以修改SCRIPT_FILENAME配置如下:

[codesyntax lang=”php”]
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
[/codesyntax ]

所以我们不能忘记在server块中配置root指令,不然$document_root的值为空,只会传$fastcgi_script_name到php-fpm,这样就会导致“No input file specified”错误。

二、请求的文件真的不存在

当nginx收到一个不在的.php文件的请求时,因为nginx只会检查$uri是否是.php结尾,不会对文件是否存在进行判断,.php结尾的请求nginx会直接发给php-fpm处理。php-fpm处理时找不到文件就会返回“No input file specified”带着“404 Not Found”头。

解决办法:

我们在nginx拦截不存在的文件,请求并返回自定义404错误

使用 try_files 捕捉不存在的urls并返回错误。
[codesyntax lang=”php”]

location ~ .php$ {
 try_files $uri =404;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME ....
 ...................................
 ...................................
}

[/codesyntax ]
上面的配置会检查.php文件是否存在,如果不存在,会返回404页面。

 

本文参考至:  运维与架构

WordPress文章部分内容回复可见代码

WordPress插件无穷多,但是插件在方便的同时,也给我们带来了另一个难题:插件过多会导致网页速度变慢,影响用户体验。

因此对于网络上利用easy2hide插件实现文章部分内容回复可见的功能,我不是很感冒。因此我想能不能利用代码来实现这一功能呢?

在不懈的搜索和尝试下,我找到并稍微改进了能实现此功能的代码,使其更美观。不敢私藏,贡献出来欢迎大家拍砖:

[codesyntax lang=”php”]

//文章内容回复可见   
 function reply_to_read($atts, $content=null) {   
 	extract(shortcode_atts(array("notice" => '

<温馨提示:为统计浏览次数等原因,本处内容待您评论本文后刷新即可查看,请谅解!>  

‘), $atts));
$email = null;
$user_ID = (int) wp_get_current_user()->ID;
if ($user_ID > 0) {
$email = get_userdata($user_ID)->user_email;
//对博主直接显示内容
$admin_email = “fredpan@188.com”; //博主Email
if ($email == $admin_email) {
return $content;
}
} else if (isset($_COOKIE[‘comment_author_email_’ . COOKIEHASH])) {
$email = str_replace(‘%40’, ‘@’, $_COOKIE[‘comment_author_email_’ . COOKIEHASH]);
} else {
return $notice;
}
if (empty($email)) {
return $notice;
}
global $wpdb;
$post_id = get_the_ID();
$query = “SELECT `comment_ID` FROM {$wpdb->comments} WHERE `comment_post_ID`={$post_id} and `comment_approved`=’1′ and `comment_author_email`='{$email}’ LIMIT 1”;
if ($wpdb->get_results($query)) {
return do_shortcode($content);
} else {
return $notice;
}
}

add_shortcode(‘reply’, ‘reply_to_read’);

[/codesyntax]

其中,博主的eMail需要设置自己的地址,博主可以不用回复就可见。
您也可以在style.css中添加以下代码实现您想要的效果:

[codesyntax lang=”css”]

.reply-to-read{   
 background: #BDBDBD;   
 color: #000000;   
 font-family: Times New Roman, Georgia, Trebuchet MS;   
 font-size: 15px;   
 font-style: normal;   
 margin: 10px 5px 15px 20px;   
 padding: 10px 5px 10px;   
 line-height: normal;   
 }

[/codesyntax]

将需要隐藏的内容用[@reply]包裹,编辑文章时,添加:

[@reply]你希望评论回复可见的内容[@/reply]
或者
[@reply notice=”自定义提醒回复内容”]自定义提醒回复内容[@/reply]

说明:使用时去掉@

本文参考至:北极宫