来自:
PHP开发调试(debug)工具Eclipse Console for PHP(EC4P)
**********************************************************************************************
项目名称:Eclipse Console for PHP
项目简称:EC4P
项目地址:http://sourceforge.net/projects/econsole4php/
SVN:svn co https://econsole4php.svn.sourceforge.net/svnroot/econsole4php econsole4php
**********************************************************************************************
使用eclipse(PDT PHP Development Tools Project)类型的开发工具做PHP开发或者二次开发时,非寻常郁闷的就是调试(debug)的时候不能像其他语言一样在控制台(console)输出消息,必须得打开网页使用echo或者var_dump等,非常的不方便。
在网上找了半天,得到一个小半成品,但是存在输出顺序混乱等问题。另外,PHP debug扩展Xdebug虽然改写了var_dump函数,但是还是同样的问题,不能在控制台(console)输出。
下面是我释出的PHP eclipse控制台(console)输出项目(Eclipse Console for PHP|EC4P)0.5版本,基本实现了在控制台(console)输出一些调试参数的功能。
这样的功能对于小项目,PHP初学者,或者一些不方便页面输出的调试非常有用,欢迎大家使用并反馈意见,不胜荣幸。
下面的代码为最初的形态,最新的请寻找 EC4P下载版本。
CSND下载地址:EC4P
[java] 代码:在eclipse里 建个工程console4php,新建java文件,名字为:Console4PHPServe.java,编译运行,控制台输出: "PHP控制台启动",java接收端OK。
- import java.io.*;
- import java.net.*;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- /**
- * edit soolly
- * vision:0.5
- * eclipse 插件端代码
- * 网络上的代码,完善了线程锁,现在接收数据流打印的时候顺序不会乱了
- * 一段时间以后计划做成eclipse插件
- * 代码发布在http://club.topsage.com/thread-2450808-1-1.html
- *
- * 该文件来源:《java编程思想(第2版)》,作者Bruce Eckel
- * 被修改了输出的几句话。,还有编码等 现成的php 的 eclipse 的控制台,
- *
- * 使php 在pdt环境下 本机调试更加方便 发表评论,请http://xieye.javaeye.com/ xieye 20081122
- */
- class Console4PHPOperate extends Thread {
- private Socket socket;
- private BufferedReader in;
- private Console4PHPServe obj;
- public Console4PHPOperate(Socket s,Object o) throws IOException {
- socket = s;
- obj = (Console4PHPServe)o;
- in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
- }
- public void run() {
- try {
- SimpleDateFormat sdf = new SimpleDateFormat(
- "[HH:mm:ss]");
- //"yyyy-MM-dd HH:mm:ss");
- System.out.print(sdf.format(new Date()) + " ");
- while (true) {
- String str = in.readLine();
- if (str.equals(Console4PHPServe.S_EOF))
- break;
- if(str.equals("//"+Console4PHPServe.S_EOF)){
- str=Console4PHPServe.S_EOF;
- }
- System.out.println(str);
- }
- } catch (IOException e) {
- System.err.println("== 客户端强行关闭 ==");
- } finally {
- try {
- socket.close();
- obj.waitForAll(true, this);
- } catch (IOException e) {
- System.err.println("Socket not closed");
- }
- }
- }
- }
- public class Console4PHPServe {
- static final int PORT = 8281; // 监听端口,请保持php一致
- static final String S_EOF = "END"; // 停止字符串,和php一致
- public static void main(String[] args) throws IOException {
- Console4PHPServe c = new Console4PHPServe();
- c.waitForAll(false,c);
- }
- public synchronized void waitForAll(boolean flag,Object o) throws IOException {
- if(flag){
- notifyAll();
- }else{
- ServerSocket s = null;
- try{
- s = new ServerSocket(PORT);
- System.out.println("PHP控制台启动。");
- }catch(Exception e){
- System.out.println("端口"+PORT+"被占用!");
- }
- try {
- while (true) {
- Socket socket = s.accept();
- try {
- new Console4PHPOperate(socket,o).start();
- try {
- wait();
- } catch (Exception e) {}
- } catch (IOException e) {
- socket.close();
- }
- }
- } finally {
- System.out.println("PHP控制台关闭。");
- s.close();
- }
- }
- }
- protected void finalize()
- {
- System.out.println("PHP控制台关闭。");
- }
- }
[PHP] 代码: 存为PHP文件,名字为:e4phpconsole.php,工程的哪个文件需要控制台(console)功能,直接引用(include_once('e4phpconsole.php');),然后使用printout()或者println()等方法就可以看到控制台(console)的输出了
- <?php
- header('Content-Type:text/html; charset=utf-8');
- /**
- * edit soolly
- * vision:0.5
- * php程序引入代码
- * 有机会看看怎样写PHP程序的扩展
- * 网络上的代码,完善了线程锁,现在接收数据流打印的时候顺序不会乱了
- * 一段时间以后计划做成eclipse插件
- * 代码发布在http://club.topsage.com/thread-2450808-1-1.html
- */
- /**
- *
- * 给字符串添加'<br />'
- * @param $s
- */
- function echobr($s)
- {
- echo $s.'<br />';
- }
- /**
- *
- * 返回socket对象
- */
- function getSocket(){
- $service_port = '8281';
- $address = '127.0.0.1';
- $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
- if ($socket === false) {
- echobr( "socket创建失败: 原因: " . socket_strerror(socket_last_error()) );
- return false;
- } else {
- //echobr( " socket 创建OK.");
- }
- $result = socket_connect($socket, $address, $service_port);
- if ($result === false) {
- echobr( "socket连接失败。 <br/> 原因: ($result) " . socket_strerror(socket_last_error($socket)) );
- return false;
- } else {
- //echobr( "socket 连接 OK.");
- }
- return $socket;
- }
- //关闭socket
- function closeSocket($socket){
- //var_dump(socket_get_option($socket, SOL_SOCKET, SO_SNDBUF));
- socket_close($socket);
- //echobr( "socket 关闭 OK.");
- }
- /**
- *
- * 向控制台监听的端口输出
- * @param $s
- */
- function printconsole($s){
- $S_EOF = "END";
- if(preg_match("/(.*/n)($S_EOF)(/n.*)/", $s)){
- $s=preg_replace("/(.*/n)($S_EOF)(/n.*)/","$1//$S_EOF$3", $s);
- }
- $s .= ' -- '.$_SERVER['SCRIPT_FILENAME'];
- $in = $s . "/n" . $S_EOF;
- $socket = getSocket();
- socket_write($socket, $in, strlen($in));
- closeSocket($socket);
- //echobr($s.'------------------------------------- : '.date('h:i:s').'<hr />');
- }
- /**
- *
- * 页面输出不换行,控制台每个输出都换行
- * @param $s
- */
- function printout($s){
- echo $s;
- printconsole($s);
- }
- /**
- *
- * 页面输出换行,控制台每个输出换行
- * @param $s
- */
- function println($s){
- echobr($s);
- printconsole($s);
- }
- ?>
[PHP]示例:
- include_once('e4phpconsole.php');
- println("0asa/nEND/nsda");
- println("1");
- println("2");
- printout("3");
- printout("4");
- printout("5");
- printout("6");
- printout("7");
- printout("8");
- printout("9");
以下的下载地址更新比较慢,想用最新的版本请到EC4P SVN下载。不用安装svn客户端也可以,上面放的是zip的,直接选择相应的版本就可以了。