﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C++冲浪板面-随笔分类-离散点</title><link>http://www.cppblog.com/shu-64/category/791.html</link><description>记录C++点滴感悟</description><language>zh-cn</language><lastBuildDate>Thu, 29 May 2008 06:22:46 GMT</lastBuildDate><pubDate>Thu, 29 May 2008 06:22:46 GMT</pubDate><ttl>60</ttl><item><title>PHP文件上传(二)</title><link>http://www.cppblog.com/shu-64/archive/2006/05/09/6845.html</link><dc:creator>SHUIGANG</dc:creator><author>SHUIGANG</author><pubDate>Tue, 09 May 2006 14:34:00 GMT</pubDate><guid>http://www.cppblog.com/shu-64/archive/2006/05/09/6845.html</guid><wfw:comment>http://www.cppblog.com/shu-64/comments/6845.html</wfw:comment><comments>http://www.cppblog.com/shu-64/archive/2006/05/09/6845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shu-64/comments/commentRss/6845.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shu-64/services/trackbacks/6845.html</trackback:ping><description><![CDATA[    下面是一个更加复杂的文件上传实例,先看该程序的代码,稍后我们将详细讲解这个程序.该程序命名为upload.php,代码如下:
    <?
    if(!$UploadAction):
    ?>

    <HTML>
    <HEAD>
    <TITLE>文件上传界面</TITLE>
    </HEAD>
    <BODY>
    <table>
    <tr  align="center">
    <td><form ENCTYPE="multipart/form-data" NAME="SubmitForm"
ACTION="upload.php"METHOD="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000"><input
type="hidden" name="UploadAction" value="1">
    </td></tr>
    <tr align="center">
    <td><input NAME="UploadFile" TYPE="file" SIZE="30"></td>
    </tr>
    <tr align="center">
    <td><input NAME="submit" VALUE="提交" TYPE="submit"></td>
    <td><input NAME="reset" VALUE="重置" TYPE="reset"></td>
    </tr>
    </form>
    </table>
    </center>
    </BODY>
    </HTML>

    <?
    else:
    ?>

    <HTML>
    <HEAD>
    <TITLE>文件上传代码</TITLE>
    </HEAD>
    <BODY>

    <?
    $UploadAction=0;
    echo "Good!";
    $TimeLimit=60;/*设置超时限制时间　默认时间为30秒 设置为0时为不限时*/
    set_time_limit($TimeLimit);

    If(($UploadFile !="none"))
    {
        $UploadPath=AddSlashes(dirname($PATH_TRANSLATED))."\\upload\\";
        //上传文件存放路径
     
     $FileName=$UploadPath.$UploadFile_name;//上传文件名

     if($UploadFile_size < 1024) //上传文件大小
     {
            $FileSize=(string)$UploadFile_size." 字节";
        }
        elseif ($UploadFile_size < (1024 * 1024))
        {
            $FileSize=number_format((double)($UploadFile_size/1024),1)." KB";
        }
        else{
            $FileSize=number_format((double) ($UploadFile_size / (1024 * 1024)).
1) . " KB";
        }

        if(!file_exists($FileName))
        {
            if(copy($UploadFile,$FileName))
            { echo "文件 $UploadFile_name ($FileSize)上传成功! ";}
            else
            { echo "文件 $UploadFile_name 上传失败! "; }

            unlink ($UploadFile);
        }
        else
        { echo "文件" $UploadFile_name 已经存在! "; }
    }
    else
    { echo "你没有选择任何文件上传! ";}

    set_time_limit(30); //恢复默认超时设置
   
   ?>
   
    <BR><A HREF = "Upload.php">返回</A>

    </BODY>
    </HTML>

    <?
    endif;
    ?>
    该程序首先生成一个简单的上传文件截面,浏览文件,单击[上传]按钮后,将显示上传成功页面.
    下面详解释上面的程序.
    本程序由于同时包含上传界面和上传处理部分,故总体上可以分为两部分,我们通过在form中添加UploadAction指出当前的状态(界面或实现). if(!$UploadAction):后是一部分,else;后又是一部分.前一部分是生成上传文件界面,后一部分是处理上传文件.
    首先在form表单中要将method属性设为Post,enctype属性设为multipart/form-data;
    在form表单中可以加一个hidden类型的input框，其中名字为MAX_FILE_SIZE的隐藏值域,通过设置其VALUE可以限制上传文件的大小.
    因为form传递过来的值会自动赋值给同名变量,所以直接通过$UploadFile 可以直接访问上传的文件,但由于这是一个保存文件的变量,因此文件名字必须通过另外一个$UploadFile_name变量取得.
    上传的文件必须用一个固定的目录保存,在这里我们用一个$UploadPath 变量保存．如可以设置$UploadPath ＝"/home/flier/upload/",这里我们使用了复杂一点的自动定位,如:
    $UploadPath=AddSlashes(dirname($PATH_TRANSLATED))."\\upload\\";
    $PATH_TRANSLATED,顾名思义就是当前传送目录,我们假定以其一个名为upload的子目录来保存上传的文件.dirname函数返回其目录名,然后加上子目录名.
    然后用一个变量$FileName保存完整的上传后文件名和路径:
    $FileName=$UploadPath.$UploadFile_name;
    在前面的form表单中定义了一个变量UploadFile,在后面处理上传文件时,我们就可以使用这个变量,直接通过$UploadFile访问上传的文件,但由于这是一个保存文件的变量,因此文件名字必须通过另外一个$UploadFile_name变量取得.
    下面是这个变量的具体用法:
    1.$UploadFile:在将要存放上传文件的服务器上的临时文件名
   2.$UploadFile_name:在发送者系统中的初始文件名.
    3.$UploadFile_size:按字节计算的上传文件的大小.
    4.$UploadFile_type:多用途网际邮件扩充协议类型的文件,前提是浏览器提供这种信息,比如说"image/gif".
    用set_time_limit($TimeLimit);设置超时限制时间,默认时间为30秒,设置为0时为不限时,考虑到大文件上传时容易出现超时的情况,这里加大超时限制时间.
    上面我们就详细讲述了如何使用PHP进行上传.这里要重点强调两点:
    A.在form表单中要将method属性设为post,enctype属性设为multipart/form-data.
    B.在form表单中可以加一个hidden类型的input框,其中名字为MAX_FILE_SIZE的隐藏值域,通过设置其VALUE可以限制上传文件的大小.当然,这个值不可能超过PHP的配置文件(PHP3.0为php3.ini,PHP4.0为php.ini)中的upload_max_filesize,注意这个input框一定要放在所有file类型的input框前面，否则也是无效的．

    　
   
      
     

      <img src ="http://www.cppblog.com/shu-64/aggbug/6845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shu-64/" target="_blank">SHUIGANG</a> 2006-05-09 22:34 <a href="http://www.cppblog.com/shu-64/archive/2006/05/09/6845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP文件上传(一)</title><link>http://www.cppblog.com/shu-64/archive/2006/05/09/6835.html</link><dc:creator>SHUIGANG</dc:creator><author>SHUIGANG</author><pubDate>Tue, 09 May 2006 12:39:00 GMT</pubDate><guid>http://www.cppblog.com/shu-64/archive/2006/05/09/6835.html</guid><wfw:comment>http://www.cppblog.com/shu-64/comments/6835.html</wfw:comment><comments>http://www.cppblog.com/shu-64/archive/2006/05/09/6835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shu-64/comments/commentRss/6835.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shu-64/services/trackbacks/6835.html</trackback:ping><description><![CDATA[    工作后就很少有兴趣写些技术层面的东西,作为补充,只在水缸博客(http://shuigang.bokenw.com)中发些神经而已.恩,犹豫了很久,是否应该在C++博客上搞点PHP,即网站开发所用到的经典事例,而后还是觉得写在这里合适些.私人生活和工作应该完全分开,这么做很有必要!
    下面我们来说点正事.
    首先,利用PHP的确可以实现文件的上传功能.(客户端的浏览器应该是Netscape 3以上或者IE 3以上的版本)
    开工之前我们需要将PHP配置文件(PHP3.0为php3.ini,PHP4.0为php.ini)做如下设置:
    将;upload_tmp_dir该行的注释符(即前面的分号)去掉,使该行在php.ini文档中起作用.upload_tmp_dir是用来定义上传文件的存放的临时路径,在这里还可以给其定义一个绝对路径,例如:upload_tmp_dir=d:\upload.当然,此时你的d:\upload目录必须有读写权限.
    如果在.php程序里已经定义了上传的路径,此时上传文件的路径以.php程序里定义的路径为基准.
    upload_max_filesize是用来限制PHP处理上传文件大小的最大值,以字节计算,默认值为2097152=2*1024*1024字节(2M),可通过修改默认值来定义最大上传文件的大小.
    修改后不要忘了重启Apache、IIS或PWS服务器.
    在PHP文件上传中,最重要的就是文件系统函数copy()的使用.
    boolean copy(string source,string target)
    说明如下:1.该函数用于文件的拷贝,同主机或跨系统均可.
                 2.参数source:源文件地址,在实际开发中可用form中的file组件来传递.
                 3.参数target:目标文件地址,但你必须拥有该目录的写文件权限,这在某些免费主页空间中是不可能的.
                 4.返回值为布尔值,成功为1,失败为0.
    下面是一个最简单的文件上传实例,命名为simple_upload.phop,代码如下:
    <html>
    <head>
    <title>文件上传</title>
    </head>
    <body>
    <table>
    <form enctype="multipart/form-data" name=myform method="post">
    <tr><td>文件上传</td><td><input name="submit" value="上传" type="submit">
    </form>
    <?php
    if(isset($submit)) {
        if($myfile != "none") {
            $upload_dir = "C:\WINNT\Temp";
            $up=copy($myfile,$upload_dir);
            if($up==1) {
                print("文件上传成功!");
            }
            else {
                print ("文件上传失败.");
            }
            unlink ($myfile);
        }
        else {
            print("你没有上传任何文件");
        }
    }
    ?>
    </td></tr>
    </table>
    </body>　
    </html>
    该例首先是一个简单的上传网页界面，然后通过submit按钮判断是否已提交,如果已提交则进行上传处理,上传目录要有写权限.

<img src ="http://www.cppblog.com/shu-64/aggbug/6835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shu-64/" target="_blank">SHUIGANG</a> 2006-05-09 20:39 <a href="http://www.cppblog.com/shu-64/archive/2006/05/09/6835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常变量的双重身份</title><link>http://www.cppblog.com/shu-64/archive/2006/01/30/3046.html</link><dc:creator>SHUIGANG</dc:creator><author>SHUIGANG</author><pubDate>Mon, 30 Jan 2006 13:33:00 GMT</pubDate><guid>http://www.cppblog.com/shu-64/archive/2006/01/30/3046.html</guid><wfw:comment>http://www.cppblog.com/shu-64/comments/3046.html</wfw:comment><comments>http://www.cppblog.com/shu-64/archive/2006/01/30/3046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shu-64/comments/commentRss/3046.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shu-64/services/trackbacks/3046.html</trackback:ping><description><![CDATA[　　常变量是从应用需要的角度提出的,例如有时要求某些变量的值不允许改变(如函数的参数),这时就用const加以限定．
　　请区别用#define命令定义符号常量和用const定义的常变量．符号常量只是用一个符号代替一个字符串，在编译时把所有符号常量替换为指定的字符串，它没有类型，在内存中并不存在以符号常量命名的存储单元．而常变量具有变量的特征，它具有类型，在内存中存在着以它命名的存储单元，可以用sizeof运算符测出其长度．与一般变量唯一不同的是指定变量的值不能改变．用#define命令定义符号常量是Ｃ语言所采用的方法，Ｃ＋＋把它保留下来是为了和Ｃ兼容．Ｃ＋＋的程序员一般喜欢用const定义常变量．虽然二者实现的方法不同，但从使用的角度看，都可以认为用一个标识符代表了一个常量．有些书上把用const定义的常变量也称为定义常量，但我们应该了解它和符号常量的区别．<img src ="http://www.cppblog.com/shu-64/aggbug/3046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shu-64/" target="_blank">SHUIGANG</a> 2006-01-30 21:33 <a href="http://www.cppblog.com/shu-64/archive/2006/01/30/3046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高级语言的演化</title><link>http://www.cppblog.com/shu-64/archive/2006/01/22/2968.html</link><dc:creator>SHUIGANG</dc:creator><author>SHUIGANG</author><pubDate>Sun, 22 Jan 2006 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/shu-64/archive/2006/01/22/2968.html</guid><wfw:comment>http://www.cppblog.com/shu-64/comments/2968.html</wfw:comment><comments>http://www.cppblog.com/shu-64/archive/2006/01/22/2968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shu-64/comments/commentRss/2968.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shu-64/services/trackbacks/2968.html</trackback:ping><description><![CDATA[1954年           FORTRAN语言 用于科学计算是世界上第一种计算机高级语言
1964年           BASIC语言    FORTRAN语言的基础上简化而成  为初学者设计的小型高级语言  被称为"大众语言"
1972年           C语言         由美国贝尔实验室的D.M.Ritchie研制成功　　结构化和模块化的面向过程语言　　为计算机专业人员设计
20世纪80年代初   C++语言      由AT&TBell实验室的Bjarne Stroustrup博士及其同事开发成功　　既可用于面向过程的结构化又可用于面　　　　　　　　　　　　　　　　向对象的程序设计  为了解决软件危机  与C兼容  
                        
　　　　　　　　　　　　　　　　AT&T发布的第一个C++编译系统实际上是一个预编译器（前端编译器）　把C++代码转化成C代码
1988年                         第一个真正的C++编译系统诞生
1989年                         C++2.0版本出现  包括了类的多继承
1991年                         C++3.0版本出现  增加了模板  
                                C++4.0版本则增加了异常处理  命名空间  运行时类型识别(RTTI)等功能
1997年                         以4.0版本为基础制订的ANSI C++标准正式通过并发布       <img src ="http://www.cppblog.com/shu-64/aggbug/2968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shu-64/" target="_blank">SHUIGANG</a> 2006-01-22 11:20 <a href="http://www.cppblog.com/shu-64/archive/2006/01/22/2968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ｃ＋＋语言编译器——ＧＣＣ简介</title><link>http://www.cppblog.com/shu-64/archive/2006/01/18/2886.html</link><dc:creator>SHUIGANG</dc:creator><author>SHUIGANG</author><pubDate>Wed, 18 Jan 2006 12:00:00 GMT</pubDate><guid>http://www.cppblog.com/shu-64/archive/2006/01/18/2886.html</guid><wfw:comment>http://www.cppblog.com/shu-64/comments/2886.html</wfw:comment><comments>http://www.cppblog.com/shu-64/archive/2006/01/18/2886.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cppblog.com/shu-64/comments/commentRss/2886.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shu-64/services/trackbacks/2886.html</trackback:ping><description><![CDATA[　　ＧＣＣ最早是ＧＮＵ-Ｃ-Ｃompiler(ＧＮＵ Ｃ 语言编译器）的缩写，现在则是ＧＮＵ-Ｃomposed-Ｃompiler(ＧＮＵ编译器集群）的缩写。ＧＮＵ的著名代表项目是Ｌinux。ＧＮＵ是一个没有实际意义的“自缩略语”——Ｇnu is Ｎot ＵＮＩＸ。意思是“Ｇnu　不是ＵＮＩＸ＂。在１９８３年一些早年的ＵＮＩＸ开发者发起了一个开放软件运动。他们认为，软件应当是开放的，任何人都应该可以接触到源代码，这样不仅用户可以随时根据自己的需要修改程序，而且软件本身也可以通过类似生物进化的模式（无限分支，优胜劣汰）得到全面的完善。由于当时ＵＮＩＸ主要由软件厂商所控制，因此ＧＮＵ决定给自己起名叫＂Ｎot ＵＮＩＸ＂，表示有别于ＵＮＩＸ。
　　ＧＣＣ是一个开放的程序语言编译器。ＧＣＣ的核心是Ｃ／Ｃ＋＋编译器。ＧＣＣ与众不同的特点在于它是完全开放的，是自由软件，可以从网上下载，任何人都可以免费得到这个软件包甚至源代码。由于ＧＣＣ的开放性，它已经被软件行业的自由开发者移植到各种不同平台。它既可以用于Ｗindows环境，也可以用于ＤＯＳ，ＵＮＩＸ，Ｌinux等操作系统。
　　由于ＧＣＣ不属于赢利性的公司，没有任何商业意图，因而其实现的功能最接近ＡＮＳＩ标准，ＧＣＣ是目前最标准的Ｃ／Ｃ＋＋语言编译器之一。使用ＧＣＣ的程序人员的习惯可以说是最好的。因为他们习惯于正确使用标准的Ｃ／Ｃ＋＋用法。由于没有商业目的，ＧＣＣ不会出现“为了收钱而升级”的情况，因此其产品本身比较稳定，不需要进行不必要的更新。由于有不同的开发人员将ＧＣＣ移植到了多种不同平台，为ＧＣＣ写的程序，在各个平台之间，是源代码级兼容的（个别直接操作硬件的程序除外）。这为移植程序打下了良好基础。ＧＣＣ在国外应用十分广泛，很有发展前途。建议读者熟悉它、使用它。
　　ＤＪＧＰＰ是ＧＣＣ在ＤＯＳ／Ｗindows平台上的实现。
　　作为开放软件，ＧＣＣ并不是“一个”软件。使用ＤＪＧＰＰ需要了解与ＤＪＧＰＰ集成在一起的另一个重要软件ＲＨＩＤＥ。ＲＨＩＤＥ不是一个编译器，而是一个开发环境（编译调试环境）。它提供了一个界面供开发者输入和编辑、调试与运行。而真正的编译工作是由ＤＪＧＰＰ（gcc.exe)完成的（ＲＨＩＤＥ在后台调用gcc.exe来编译，并将编译信息显示在ＲＨＩＤＥ的窗口里）。
<img src ="http://www.cppblog.com/shu-64/aggbug/2886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shu-64/" target="_blank">SHUIGANG</a> 2006-01-18 20:00 <a href="http://www.cppblog.com/shu-64/archive/2006/01/18/2886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>