若相依 发表于 2015-2-4 00:06:15

PHP网站制作之用Flash图形化数据(二)

建议大家买一本书,而不光是在网上看一些零碎的资料,一本书毕竟会讲的系统一些,全面一些,而且印刷的书不受电脑的限制,但是建议在看书的时候最好旁边有电脑,这样可以很及时地上机实践。   让咱们烤点甜饼(做饼图)
胜利地装置了PHP地Shockwave Flash撑持后,就能够用PHP创立Shockwave文件了。进修的最好办法就是直接跳到法式去,所以上面就让咱们看看法式。第一个文件包含如何利用类的示例代码,同时也显示了若何将一个Flash文件嵌入到HTML文档中。

<?php

// include class needed for flash graph
include("class.pie.flash.php");

mysql_connect ("localhost", "root", "");

$query = "SELECT DISTINCT city_name, COUNT(city_id)
    FROM city
    GROUP BY city_name;";

$result = mysql_db_query ("hermes",$query);

while ($row = mysql_fetch_array ($result)) {
    $city_counts[] = $row["COUNT(city_id)"];
    $city_names[] = $row["city_name"];
}

mysql_free_result ($result);

// Instantiate new object
$graph = new flash_pie($city_counts, "http://edu.cnzz.cn/NewsInfo/city.swf");

// set graph title (should not exceed about 25 characters)
$graph->pie_title("City Results", 30);

// set graph legend
$graph->pie_legend($city_names);

// show graph
$graph->show();

// free resources
$graph->close();

?>

<html>
<head>
<meta http=equiv="Expires" content="Fri, Jun 12 1981 08:20:00 GMT">
<meta http=equiv="Pragma" content="no-cache">
<meta http=equiv="Cache-Control" content="no-cache">
<meta http=equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor=white>
<div align=center>
<embed src="http://edu.cnzz.cn/NewsInfo/city.swf" quality=high loop=false pluginspage="http://www.macromedia.com/
shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"
type="application/x-shockwave-flash" width=600 height=300></embed>
</div>
</body>
</html>



<?php

class flash_pie {

// class variables

// setup some global colors
var $r_arr = array(0.1,1, 0, 1, 0, 1, 0.388235294, 0.4, 0.388235294, 0.929411765);
var $g_arr = array(1,    0, 0, 1, 1, 0, 0.8,         0.4, 0.8,         0.439215686);
var $b_arr = array(0.25, 0, 1, 0, 1, 1, 1,         0.4, 1,         0.043137255);

var $percents;

function flash_pie($values, $this_file) { //begin constructor
    // to write out code directly to browser, set content header and use "php://stdout"
    //swf_openfile ("php://stdout", 700, 250, 30, 1, 1, 1);
    //header("Content-type: application/x-shockwave-flash");

    swf_openfile ($this_file, 1000, 450, 30, 1, 1, 1);
   
    // set up viewport for flash movie
    swf_ortho2 (-400, 300 , -90, 250);

    // choose the font we will use for pie graph
    swf_definefont(10, "Mod");

    // get sum of array for percents/slices
    while(list($key,$val) = each($values)) {
      $sum = $sum + $val;
    }

    for ($i=0; $i<count($values); $i++) {
      // calculate how big they need to be and then
      // draw all of our slices
      if ($i == 0) {
            // setup parameters for first slice
            $begin = 0;
            $val = $values[$i]/$sum;
            $end = $val*360;
            swf_translate(-200, 0, 0);
      } else {
            // setup parameters for every other slice
            $begin = $end;
            $val = $values[$i]/$sum;
            $end = $end + $val*360;
      }

      // function call to add slice
      $objID = 1+$i*10;
      $this->show_slice($i, $objID, $begin, $end);

      // put together percent array for all labels
      $this->percents[$i] = round($values[$i]/$sum*100);            
    }
   
}//end flash_pie

function show_slice($i, $objID, $begin, $end) {
    // draws a slice and places it in our frame
    swf_addcolor($this->r_arr[$i], $this->g_arr[$i], $this->b_arr[$i], 1);

    swf_startshape($objID);
    swf_shapefillsolid(0, 0, 0, 1);
    swf_shapearc(0, 0, 100, $begin, $end);
    swf_shapecurveto(0, 0, 0, 0);
    swf_endshape($objID);

    swf_pushmatrix();
    swf_placeobject($objID, 1);
    swf_popmatrix();
    swf_showframe();
}


function pie_legend($labels) {
    // draws the legend and labels and places it in our frame
    for ($i=0; $i<count($labels); $i++) {
      swf_addcolor($this->r_arr[$i], $this->g_arr[$i], $this->b_arr[$i], 1);

      swf_definerect($i+1000, 1, 0, 20, 20, 0);
      if ($i == 0) {
            swf_translate(120, 75, 0);
      } else {
            swf_translate(0, 20, 0);
      }
      swf_placeobject($i+1000, 1);

      swf_translate(0, 5, 0);
      unset($label);
      $label = $labels[$i];
      $label .= " (";
      $label .= $this->percents[$i];
      $label .= " percent)";
      if ($i==0) {
            $width = (swf_textwidth($label)/4)+30;
      } else {
            $width = round(swf_textwidth($label)/2)+30;
      }
      $this->pie_text($i-1000, "$label", 15, $width, 0);
      swf_translate(-$width, 0, 0);
    }
    swf_translate($width, 30*count($labels), 0);
}               


function pie_text($id, $text, $size, $x, $y) {
    // simple function to draw text ($text) at ($x,$y) with font size ($size)
    // set color of text to black
    swf_addcolor(0,0,0,0);

    // set font size and slant
    swf_fontsize($size);
    swf_fontslant(0);

    // define, position and place text in frame
    swf_definetext($id, "$text", 1);
    swf_translate($x, $y, 0);
    swf_placeobject($id, 1);
}

function pie_title($text, $size) {
    // simple function to draw title and set lineup
    // $text should not exceed about 25 characters
    $this->pie_text(99, $text, $size, 0, 150);
    swf_translate(0, -300, 0);
}      

function show() {
    // show the frame
    swf_showframe();
}


function close() {
    // flush our buffer and return movie
    $data = swf_closefile(1);
}               

} // end class flash_pie

?>

    注重,你可以将生成的SWF文件直接前往到阅读器中,而不用必定要像我一样把它写到一个文件中。这能够对测试来讲是有效的,但你能够很罕用到一个Flash文件,更多的时分你能够想把Flash文件嵌入到HTML文档中。假如你选择直接把Flash文件输入到阅读器中,你可以以下设置header content 类型:
   header("Content-type: application/x-shockwave-flash")
并把swf_openfile(filename",...)改成swf_openfile("php://stdout",...)

更多信息的链接:
    http://www.php.net/manual/ref.swf.php关于swf_* PHP函数的申明
    http://reality.sgi.com/grafica/flash/下载PHP的swf库
    http://openswf.org                     更多Flash东西和信息
    http://www.macromedia.com/software/flash/open/licensing/
                                           关于Macromedia Flash SDK的更多信息 然后大吼:别人可以,我为什么就不可以?(是不是有点阎罗教练的味道,默默的确是电影看多了,抽嘴巴是会痛的,各位其实明白这个道理了就行了)

兰色精灵 发表于 2015-2-4 08:50:35

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。

不帅 发表于 2015-2-9 20:49:54

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,

柔情似水 发表于 2015-2-10 20:49:30

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。

第二个灵魂 发表于 2015-2-16 07:16:23

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

若相依 发表于 2015-2-28 20:54:33

爱上php,他也会爱上你。

飘灵儿 发表于 2015-3-10 08:01:01

个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。

蒙在股里 发表于 2015-3-13 00:10:56

最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。

山那边是海 发表于 2015-3-15 21:06:35

真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,

透明 发表于 2015-3-18 07:51:56

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。

乐观 发表于 2015-3-18 20:17:42

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

灵魂腐蚀 发表于 2015-3-26 13:29:49

Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81

因胸联盟 发表于 2015-3-30 08:41:11

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

变相怪杰 发表于 2015-4-8 23:58:13

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。

莫相离 发表于 2015-4-18 04:38:47

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

活着的死人 发表于 2015-4-21 19:10:43

个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。

金色的骷髅 发表于 2015-4-23 22:25:59

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

分手快乐 发表于 2015-4-26 02:12:32

有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。

小女巫 发表于 2015-4-26 14:11:01

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
页: [1]
查看完整版本: PHP网站制作之用Flash图形化数据(二)