PHP开发调试(debug)工具Eclipse Console for PHP(EC4P)

来自:

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
        项目管理员:jipc  [QQ群:67014623]点击加入

更新进度:v0.5 v0.6 v0.7

**********************************************************************************************
        使用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。

  1. import java.io.*;
  2. import java.net.*;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;

  5. /**
  6. * edit soolly
  7. * vision:0.5
  8. * eclipse 插件端代码
  9. * 网络上的代码,完善了线程锁,现在接收数据流打印的时候顺序不会乱了
  10. * 一段时间以后计划做成eclipse插件
  11. * 代码发布在http://club.topsage.com/thread-2450808-1-1.html
  12. *
  13. * 该文件来源:《java编程思想(第2版)》,作者Bruce Eckel
  14. * 被修改了输出的几句话。,还有编码等 现成的php 的 eclipse 的控制台,
  15. *
  16. * 使php 在pdt环境下 本机调试更加方便 发表评论,请http://xieye.javaeye.com/ xieye 20081122
  17. */
  18. class Console4PHPOperate extends Thread {
  19.         private Socket socket;
  20.         private BufferedReader in;
  21.         private Console4PHPServe obj;

  22.         public Console4PHPOperate(Socket s,Object o) throws IOException {
  23.                 socket = s;
  24.                 obj = (Console4PHPServe)o;
  25.                 in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
  26.         }

  27.         public void run() {
  28.                 try {
  29.                                 SimpleDateFormat sdf = new SimpleDateFormat(
  30.                                                 "[HH:mm:ss]");
  31.                                                 //"yyyy-MM-dd HH:mm:ss");
  32.                                 System.out.print(sdf.format(new Date()) + " ");
  33.                                 while (true) {
  34.                                         String str = in.readLine();
  35.                                         if (str.equals(Console4PHPServe.S_EOF))
  36.                                                 break;
  37.                                         if(str.equals("//"+Console4PHPServe.S_EOF)){
  38.                                                 str=Console4PHPServe.S_EOF;
  39.                                         }
  40.                                         System.out.println(str);
  41.                                 }
  42.                 } catch (IOException e) {
  43.                         System.err.println("== 客户端强行关闭 ==");
  44.                 } finally {
  45.                         try {
  46.                                 socket.close();
  47.                                 obj.waitForAll(true, this);
  48.                         } catch (IOException e) {
  49.                                 System.err.println("Socket not closed");
  50.                         }
  51.                 }
  52.         }
  53. }

  54. public class Console4PHPServe {
  55.         static final int PORT = 8281; // 监听端口,请保持php一致
  56.         static final String S_EOF = "END"; // 停止字符串,和php一致

  57.         public static void main(String[] args) throws IOException {
  58.                 Console4PHPServe c = new Console4PHPServe();
  59.                 c.waitForAll(false,c);
  60.         }
  61.                
  62.         public synchronized void waitForAll(boolean flag,Object o)  throws IOException {
  63.                 if(flag){
  64.                         notifyAll();
  65.                 }else{
  66.                         ServerSocket s = null;
  67.                         try{
  68.                         s = new ServerSocket(PORT);
  69.                         System.out.println("PHP控制台启动。");
  70.                         }catch(Exception e){
  71.                                 System.out.println("端口"+PORT+"被占用!");
  72.                         }
  73.                         try {
  74.                                 while (true) {
  75.                                         Socket socket = s.accept();
  76.                                         try {
  77.                                                 new Console4PHPOperate(socket,o).start();
  78.                                                 try {
  79.                                         wait();
  80.                                     } catch (Exception e) {}
  81.         
  82.                                         } catch (IOException e) {
  83.                                                 socket.close();
  84.                                         }
  85.                                 }
  86.                         } finally {
  87.                                 System.out.println("PHP控制台关闭。");
  88.                                 s.close();
  89.                         }
  90.                 }
  91.     }
  92.         
  93.         protected void finalize()   
  94.         {   
  95.                 System.out.println("PHP控制台关闭。");
  96.         }
  97. }
复制代码

[PHP] 代码: 存为PHP文件,名字为:e4phpconsole.php,工程的哪个文件需要控制台(console)功能,直接引用(include_once('e4phpconsole.php');),然后使用printout()或者println()等方法就可以看到控制台(console)的输出了

  1. <?php
  2.     header('Content-Type:text/html; charset=utf-8');
  3.    
  4. /**
  5. * edit soolly
  6. * vision:0.5
  7. * php程序引入代码
  8. * 有机会看看怎样写PHP程序的扩展
  9. * 网络上的代码,完善了线程锁,现在接收数据流打印的时候顺序不会乱了
  10. * 一段时间以后计划做成eclipse插件
  11. * 代码发布在http://club.topsage.com/thread-2450808-1-1.html
  12. */
  13.    
  14.     /**
  15.      *
  16.      * 给字符串添加'<br />'
  17.      * @param $s
  18.      */
  19.     function echobr($s)
  20.     {
  21.         echo $s.'<br />';
  22.     }
  23.         
  24.     /**
  25.      *
  26.      * 返回socket对象
  27.      */
  28.     function getSocket(){
  29.         $service_port = '8281';

  30.         $address = '127.0.0.1';

  31.         $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  32.         
  33.         if ($socket === false) {
  34.             echobr( "socket创建失败: 原因: " . socket_strerror(socket_last_error()) );
  35.             return false;
  36.         } else {
  37.             //echobr( " socket 创建OK.");
  38.         }
  39.         
  40.         $result = socket_connect($socket, $address, $service_port);
  41.         if ($result === false) {
  42.             echobr( "socket连接失败。 <br/> 原因: ($result) " . socket_strerror(socket_last_error($socket)) );
  43.             return false;
  44.         } else {
  45.             //echobr( "socket 连接 OK.");
  46.         }
  47.         return $socket;
  48.     }
  49.    
  50.     //关闭socket
  51.     function closeSocket($socket){
  52.             //var_dump(socket_get_option($socket, SOL_SOCKET, SO_SNDBUF));
  53.             socket_close($socket);
  54.             //echobr( "socket 关闭 OK.");
  55.     }
  56.    
  57.     /**
  58.      *
  59.      * 向控制台监听的端口输出
  60.      * @param $s
  61.      */
  62.     function printconsole($s){
  63.             $S_EOF = "END";
  64.             if(preg_match("/(.*/n)($S_EOF)(/n.*)/", $s)){
  65.                     $s=preg_replace("/(.*/n)($S_EOF)(/n.*)/","$1//$S_EOF$3", $s);
  66.             }
  67.         $s .= ' -- '.$_SERVER['SCRIPT_FILENAME'];
  68.         $in = $s . "/n" . $S_EOF;
  69.              $socket = getSocket();
  70.         socket_write($socket, $in, strlen($in));
  71.         closeSocket($socket);
  72.         //echobr($s.'------------------------------------- : '.date('h:i:s').'<hr />');
  73.     }
  74.     /**
  75.      *
  76.      * 页面输出不换行,控制台每个输出都换行
  77.      * @param $s
  78.      */
  79.     function printout($s){
  80.             echo $s;
  81.             printconsole($s);
  82.     }
  83.    
  84.     /**
  85.      *
  86.      * 页面输出换行,控制台每个输出换行
  87.      * @param $s
  88.      */
  89.     function println($s){
  90.             echobr($s);
  91.             printconsole($s);
  92.     }
  93. ?>
复制代码

[PHP]示例:

  1. include_once('e4phpconsole.php');

  2. println("0asa/nEND/nsda");
  3. println("1");
  4. println("2");
  5. printout("3");
  6. printout("4");
  7. printout("5");
  8. printout("6");
  9. printout("7");
  10. printout("8");
  11. printout("9");
复制代码

以下的下载地址更新比较慢,想用最新的版本请到EC4P SVN下载。不用安装svn客户端也可以,上面放的是zip的,直接选择相应的版本就可以了。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页