php汉字转拼音

 更新时间:2016年11月25日 16:10  点击:1543
<?php
$d=array(
array("a",-20319),
array("ai",-20317),
array("an",-20304),
array("ang",-20295),
array("ao",-20292),
array("ba",-20283),
array("bai",-20265),
array("ban",-20257),
array("bang",-20242),
array("bao",-20230),
array("bei",-20051),
array("ben",-20036),
array("beng",-20032),
array("bi",-20026),
array("bian",-20002),
array("biao",-19990),
array("bie",-19986),
array("bin",-19982),
array("bing",-19976),
array("bo",-19805),
array("bu",-19784),
array("ca",-19775),
array("cai",-19774),
array("can",-19763),
array("cang",-19756),
array("cao",-19751),
array("ce",-19746),
array("ceng",-19741),
array("cha",-19739),
array("chai",-19728),
array("chan",-19725),
array("chang",-19715),
array("chao",-19540),
array("che",-19531),
array("chen",-19525),
array("cheng",-19515),
array("chi",-19500),
array("chong",-19484),
array("chou",-19479),
array("chu",-19467),
array("chuai",-19289),
array("chuan",-19288),
array("chuang",-19281),
array("chui",-19275),
array("chun",-19270),
array("chuo",-19263),
array("ci",-19261),
array("cong",-19249),
array("cou",-19243),
array("cu",-19242),
array("cuan",-19238),
array("cui",-19235),
array("cun",-19227),
array("cuo",-19224),
array("da",-19218),
array("dai",-19212),
array("dan",-19038),
array("dang",-19023),
array("dao",-19018),
array("de",-19006),
array("deng",-19003),
array("di",-18996),
array("dian",-18977 创建类似"../../../xxx/xxx.txt"的目录都很好!

function mkdirs($path, $mode = 0777) //creates directory tree recursively
{
$dirs = explode(''/'',$path);
$pos = strrpos($path, ".");
if ($pos === false) { // note: three equal signs
// not found, means path ends in a dir not file
$subamount=0;
}
else {
$subamount=1;
}

for ($c=0;$c < count($dirs) - $subamount; $c++) {
$thispath="";
for ($cc=0; $cc <= $c; $cc++) {
$thispath.=$dirs[$cc].''/'';
}
if (!file_exists($thispath)) {
//print "$thispath<br>";
mkdir($thispath,$mode);
}
}
}

原函数中使用$GLOBALS["dirseparator"]我改成了''/''


function recur_mkdirs($path, $mode = 0777) //creates directory tree recursively
{
//$GLOBALS["dirseparator"]
$dirs = explode($GLOBALS["dirseparator"],$path);
$pos = strrpos($path, ".");
if ($pos === false) { // note: three equal signs
// not found, means path ends in a dir not file
$subamount=0;
}
else {
$subamount=1;
}

for ($c=0;$c < count($dirs) - $subamount; $c++) {
$thispath="";
for ($cc=0; $cc <= $c; $cc++) {
$thispath.=$dirs[$cc].$GLOBALS["dirseparator"];
}
if (!file_exists($thispath)) {
//print "$thispath<br>";
mkdir($thispath,$mode);
}
}

}

 

<

实际上是毫无作用的函数了~因为现在的域名商都很滑。很多域名只要注册了,就算不使用也会被默认指向一个域名商的网址。所以即便探过去,都会返回一个200值。 = = 这也是没办法的事。

 


<?php
$url
= ''http://www.example.com''
;

print_r(get_headers($url
));

print_r(get_headers($url, 1
));
?>
Array(    [0] => HTTP/1.1 200 OK    [1] => Date: Sat, 29 May 2004 12:28:13 GMT    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT    [4] => ETag: "3f80f-1b6-3e1cb03b"    [5] => Accept-Ranges: bytes    [6] => Content-Length: 438    [7] => Connection: close    [8] => Content-Type: text/html)Array(    [0] => HTTP/1.1 200 OK    [Date] => Sat, 29 May 2004 12:28:14 GMT    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT    [ETag] => "3f80f-1b6-3e1cb03b"    [Accept-Ranges] => bytes    [Content-Length] => 438    [Connection] => close    [Content-Type] => text/html)

 

 

<?php
//$fp = file_get_contents("http://www.163.com");


$fp = fsockopen("www.selangsfer32.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />n";
exit;
}
?>



从寒假就开始看他的程序,寒假里边没有怎么搞明白,又冷,手生冻疮了。回来以后,从头开始看吧,分析那一部分不是很明白,但是看到后来,检测漏洞的时候,我想暂时不管它存储的结构什么,反正都是Node之类的东西,看他是怎么检测的,有的细节地方那个暂时翻过去,结果感觉比前边analysze部分简单得多了,连那些存储结构什么的都明白些了。
当然也看他的论文,论文换了一个寒假看完,没弄明白,像Cfg这些东西在论文中有,但是显示不出来,没有直观的感觉,不爽。所以这两天忙着弄了个GUI界面来显示这个Cfg控制流图,麻烦了一点,不过总算是出来了,看看好像也没有多大问题,献丑在这里了。另外,本来是自己使用的,有的地方考虑不周也无所谓,自己再调调就行了。
共有3个文件,第一个是Coor.java,保存每个节点的坐标以及其子节点坐标:


package at.ac.tuwien.infosys.www.pixy;

import java.util.*;
public class Coor 
{
    
private int x;
    
private int y;
    
private List<Coor> coors;
    
public Coor(int x, int y)
    
{
        
this.coors = new LinkedList<Coor>();
        
this.x = x;
        
this.y = y;
    }

    
public int getX()
    
{
        
return this.x;
    }

    
public int getY()
    
{
        
return this.y;
    }

    
public List<Coor> getCoors()
    
{
        
return this.coors;
    }

    
public void addCoor(Coor coor)
    
{
        
this.coors.add(coor);
    }

    
public boolean equals(Coor coor)
    
{
        
if (coor.getX()==this.x && coor.getY()==y)
        
{
            
return true;
        }

        
return false;
    }

    
public boolean contains(Coor c)
    
{
        
for (Coor coor : this.coors)
        
{
            
if (coor.getX()==c.getX() && coor.getY()==c.getY())
            
{
                
return true;
            }

        }

        
return false;
    }

}



第二个是DrawPanel.java,负责画图的组件:


package at.ac.tuwien.infosys.www.pixy;
import at.ac.tuwien.infosys.www.pixy.conversion.Cfg;
import at.ac.tuwien.infosys.www.pixy.conversion.nodes.*;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
 *
 * 
@author Administrator
 
*/

public class DrawPanel extends JPanel
{
    
private java.util.List<CfgNode> cfgList;
    
private java.util.List<Coor> coorList;
    
    
/** Creates a new instance of OvalJPanel */
    
public DrawPanel(java.util.List<CfgNode> cfgList, java.util.List<Coor> coorList) 
    
{
        
this.cfgList = cfgList;
        
this.coorList = coorList;
    }

    
//在面板上绘制图形
    public void paintComponent(Graphics g)
    
{
        
        
        
for (int i=0 ;i<this.cfgList.size() ;i++ )
        
{
            CfgNode cfgNode 
= this.cfgList.get(i);
            Coor coor 
= this.coorList.get(i);
            
int x = coor.getX();
            
int y = coor.getY();
            g.setColor(Color.red);
            g.drawOval(x
-50, y-1510030);
            g.setColor(Color.blue);
            g.drawString(cfgNode.toString(), x
-30, y-5);
            g.drawString(
"Loc :" + String.valueOf(cfgNode.getOrigLineno()), x, y+10);
            java.util.List
<Coor> coors = coor.getCoors();
            
for (Coor c : coors)
            
{
                
int cx = c.getX();
                
int cy = c.getY();
                g.setColor(Color.black);
                
if (c.equals(coor))
                
{
                    g.setColor(Color.yellow);
                }

                g.drawLine(x, y
+15, cx, cy-15);
                
            }

        }

    }

}




第三个是Draw.java,主控制组件,只需要在Checker中调用该类,传以适当参数(Cfg),就可以了。


package at.ac.tuwien.infosys.www.pixy;
import at.ac.tuwien.infosys.www.pixy.conversion.Cfg;
import at.ac.tuwien.infosys.www.pixy.conversion.nodes.*;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
/**
 *
 * 
@author Administrator
 
*/

public class Draw {
    
    
//声明框架
    private JFrame frame = new JFrame("Control Flow Graph");
    
//声明书签面板
    private DrawPanel draw;
    
private Cfg cfg;
    
private Map<CfgNode, Coor> map;
    
private java.util.List<CfgNode> cfgList;
    
private java.util.List<Coor> coorList;
    
private int startX = 50;
    
private int startY = 30;

    
/** Creates a new instance of TabbedJFrame */
    
public Draw(Cfg cfg) {
        
//this.map = new TreeMap<CfgNode, Coor>();
        this.cfgList = new LinkedList<CfgNode>();
        
this.coorList = new LinkedList<Coor>();
        
this.cfg = cfg;
    }

    
public void show()
    
{
        frame.add(
new JScrollPane(new DrawPanel(this.cfgList, this.coorList)), BorderLayout.CENTER);
        frame.setSize(
10001000);
        frame.setLocation(
5050);
        frame.setVisible(
true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    
/**
     * 将Cfg转换为cfgList和coorList.
     
*/

    
public void convert()
    
{
        CfgNode node 
= this.cfg.getHead();
        
int size = this.cfg.size();
        Coor coor 
= new Coor(startX, startY);

        
this.cfgList.add(node);
        
this.coorList.add(coor);
        System.out.println(size);
        java.util.List
<CfgNode> noded = new LinkedList<CfgNode>();
        
        
for (int i=0 ;i<size ;i++ )
        
{
            
int n = i;
            
if (noded.contains(node))
            
{
                n 
= -1;
                
for (CfgNode cfgNode : this.cfgList )
                
{
                    n
++;
                    
if (noded.contains(cfgNode))
                    
{
                        
continue;
                    }

                    node 
= cfgNode;
                    
break;
                }

            }


            noded.add(node);
//为了上边的if判断好做,故在此向noded中添加
            java.util.List<CfgNode> list = node.getSuccessors();
            
int len = list.size();
            
if (len == 0)
            
{
                
continue;
            }


            
int k = 0;
            
            coor 
= this.coorList.get(this.cfgList.indexOf(node));
            startY 
= coor.getY() + 60;
            
for (CfgNode cfgNode : list)
            
{
                startX 
= coor.getX() + k*250;
                k
++;
                
if (this.cfgList.contains(cfgNode))
                
{
                    Coor c 
= (Coor)this.coorList.get(this.cfgList.indexOf(cfgNode));
                    
if (!coor.contains(c))
                    
{
                        coor.addCoor(c);
                    }

                    
continue;
                }

                coor.addCoor(
new Coor(startX, startY));
                
this.cfgList.add(cfgNode);
                
this.coorList.add(new Coor(startX, startY));
            }

            node 
= list.get(0);//这里取到的CfgNode可能已经分析过了,通过上边的if判断可以从cfgList中另外取一个。
        }

    }

    
public void setStartX(int x)
    
{
        
this.startX = x;
    }

    
public void setStartY(int y)
    
{
        
this.startY = y;
    }

    
public int getStartX()
    
{
        
return this.startX;
    }

    
public int getStartY()
    
{
        
return this.startY;
    }

    
public void dump()
    
{
        System.out.println(
"------------------");
        
for (int i=0 ; i<this.cfgList.size(); i++)
        
{
            CfgNode cfgNode 
= this.cfgList.get(i);
            Coor coor 
= this.coorList.get(i);
            System.out.println(cfgNode.toString() 
+ "  "/* + cfgNode.toString()*/ +"  " + coor.getX() + " " + coor.getY() + "  " + coor.getCoors().size());
        }

        System.out.println(
"------------------");
    }

    
    
public void dumpMap()
    
{
        java.util.List
<CfgNode> list = this.cfg.dfPreOrder();
        System.out.println(
"******************");
        
for (CfgNode node : list)
        
{
            System.out.println(
"    " + node.toString() + " " + node.getSuccessors().size());
        }

        System.out.println(
"******************");
    }

    
public static void main(String [] args)
    
{
    
//    new Draw();
    }

    
}


可能这个项目还会做很久,中间会不会有些心得继续放到这个懒得管的空间中来呢,期待着。

< 今天继续提交读程序笔记,这次比较少,而且相对简单些。

ConnectorComputation
    - compute()
        如果workList还有元素,就继续循环,但是第一次进入循环时候根据构造方法来看workList只有一个元素<mainFunction, emptyCallString>。然后从workList中取出第一个元素,获取TacFunction和CallString(gamma),根据TacFunction(p)从function2ECS中得到ECS(ecs_p),实际上此时functions2ECS中第一个元素对应的TacFunction即为_main。得到gamma在ecs_p中的位置,即是在一个CallString的链表中的位置
        随后,将p这个TacFunction包含的所有的CfgNodeCall迭代一遍,对于每一个callNode,得到其callee(即被调用的函数q),在q!=null的情况下,以callNode建立一个新的CallString(gamma_2),从function2ECS中得到q对应的ECS(ecs_q),获取ecs_q中gamma_2的位置,如果为-1,就将gamma_2添加到ecs_q的CallStrings队列中去,并以q和gamma_2建立元素添加到workList中去,expand it。
        接下来扩充什么ConnectorFunction因为都在for循环里边,是对局部变量的操作,所以没有什么用处。
        在while循环结束之后,调用makeCallGraph()方法。
    - makeCallGraph()
        首先以mainFunction初始化一个CallGraph,获得mainFunction所包含的方法调用列表processUs<CfgNodeCall>,并建立一个以访问的集合visited,将mainFunction添加进集合里边。
        当processUs不为空,依次取出元素callNode,得到它的caller和callee,如果callee!=null,向callGraph中添加元素。如果callee还没有被处理过,则将其所包含的所有函数调用添加进processUs,并将其放进visited。


Checker
    根据初始提供的run-all.bat的参数来看,实际上aliases analyze和literal analyze并没有进行,只是gta.analyze()进行了,实际上也就是只有dependance analyze执行了。通过以来关系最后决定vulns。

[!--infotagslink--]

相关文章

  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • PHP实现创建以太坊钱包转账等功能

    这篇文章主要介绍了PHP实现创建以太坊钱包转账等功能,对以太坊感兴趣的同学,可以参考下...2021-04-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • PHP+jQuery+Ajax实现多图片上传效果

    今天我给大家分享的是在不刷新页面的前提下,使用PHP+jQuery+Ajax实现多图片上传的效果。用户只需要点击选择要上传的图片,然后图片自动上传到服务器上并展示在页面上。...2015-03-15
  • golang与php实现计算两个经纬度之间距离的方法

    这篇文章主要介绍了golang与php实现计算两个经纬度之间距离的方法,结合实例形式对比分析了Go语言与php进行经纬度计算的相关数学运算技巧,需要的朋友可以参考下...2016-07-29
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • PHP正则表达式过滤html标签属性(DEMO)

    这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
  • .Net(c#)汉字和Unicode编码互相转换实例

    下面小编就为大家带来一篇.Net(c#)汉字和Unicode编码互相转换实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 谈谈PHP中相对路径的问题与绝对路径的使用

    经常看到有人踩在了PHP路径的坑上面了,感觉有必要来说说PHP中相对路径的一些坑,以及PHP中绝对路径的使用,下面一起来看看。 ...2016-08-24
  • php构造方法中析构方法在继承中的表现

    这篇文章主要为大家详细介绍了php构造方法中析构方法在继承中的表现,感兴趣的小伙伴们可以参考一下...2016-04-15
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • php有序列表或数组中删除指定的值的实现代码

    这篇文章主要介绍了php有序列表或数组中删除指定的值的实现代码,删除给定的值之后,得到一个新的有序列表,长度-1,下面是具体的实现方法...2021-08-22
  • php图片添加文字水印实现代码

    这篇文章主要为大家详细介绍了php图片添加文字水印实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-03-17
  • PHP简单实现生成txt文件到指定目录的方法

    这篇文章主要介绍了PHP简单实现生成txt文件到指定目录的方法,简单对比分析了PHP中fwrite及file_put_contents等函数的使用方法,需要的朋友可以参考下...2016-04-28