Monthly Archive十月 2005
PHP:显示文件上传进度及上传任意大小的文件
转自http://www.ugia.cn/?p=54
利用php上传比较大的文件时,往往需要很长的等待时间,而且受网络和软件等的影响,经常会出现超时及上传失败的现象。如何在上传文件时实时的得到文件上传进度,以及如何避开php和其他因素的限制上传任意大小的文件呢?
php同asp等其他语言对上传文件的处理方式不同,asp中可以用Request.BinaryRead流式的读取客户端提交的数据。php是把文件存放在临时文件夹中,在文件上传完成后才能够获取其信息以及对其进行操作。如果在上传过程中我们能够得到其临时文件的文件名,我们就可以通过判断临时文件的大小来来得到上传进度,不过好像没有办法得到。所以我们只能通过其他方式,就是利用php的socket扩展建立一个简单的服务器,把数据post到这个服务器上,然后再用我们自己的机制来处理。
先说说流程,首先用php的socket函数库建立一个临时的http服务器,在某一端口监听,然后把ip地址和端口号通知客户端,客户端把上传表单提交到http://srvIpAddress:port(临时服务器), 临时服务器接受客户端请求,并读取post数据,分析并获取客户端上传的文件信息,把文件保存在服务器上,然后关闭临时服务器,释放资源,上传完成。 有点绕,不过思路还是简单的。
稍后我会发布一个类库,暂定名为:UGiA Visual PHP Uploader, 这样大家就可以在程序中很方便的调用了。效果如下:
JavaScript/DOM/XML & 技术 05 Oct 2005 01:10 pm
IE+JS: 上传之前检测图片文件大小
转自http://www.ugia.cn/?p=73
文件上传之前的检测,通常是通过文件名来判断文件类型是否合法,但是要想检测文件的大小很难办到,除非在本地或者使用控件。不过在IE下img有几个附加的属性,如:fileCreatedDate、fileModifiedDate、fileSize、fileUpdatedDate、filters,我们可以通过这些属性来获取图片文件的部分信息,如文件大小,我们用file表单同img标签结合,就能够在上传之前判断图片文件的大小是否合法了。
限制:
K
还有一个小小的发现就是,IE下动画的onload事件是在每次循环开始都触发,这样我们可以通过他来达到和js里setInterval()函数一样的效果,如:
loops: 0
<input type="file" name="file1" id="file1" size="40" onchange="changeSrc(this)"/>
<img src="about:blank" id="fileChecker" alt="test" height="18"/>
<
script type="text/javascript">var oFileChecker = document.getElementById("fileChecker");
function
changeSrc(filePicker){
oFileChecker.src = filePicker.value;
} oFileChecker.onreadystatechange = function ()
{
if (oFileChecker.readyState == "complete")
{
checkSize();
}
}
function
checkSize(){
var limit = document.getElementById("fileSizeLimit").value * 1024;
if (
oFileChecker.fileSize > limit){
alert("too large");
}
else
{
alert("ok");
}
}
第二个:
<
script type="text/javascript">var loops = 0;
document.getElementById("monkey").onload = function ()
{
document.getElementById("loopsNum").innerText= loops;
loops ++;
}
另外补充一些手册里的东西:
MAX_FILE_SIZE 隐藏字段(单位为字节)必须先于文件输入字段,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP 也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。实际上,PHP 设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
注意:本文所讨论的特性仅在IE下有效。
JavaScript/DOM/XML & 技术 05 Oct 2005 01:06 pm
bindows
通过 Bindows™,你可以开发Web页面中的全功能桌面应用程序,而无需任何插件。
Bindows™ 框架提供给你:
- 基于类的面向对象 API;
- 一个完整的窗口系统,带有一组广泛支持的窗体小部件,包括菜单、表单、表格、滑块、量表以及更多;
- 开发零接触 SOA 客户端应用程序的最好的工具包;
- 内置 XML,SOAP 和 XML-RPC 支持;
- 从单用户到企业级的支持。
“富”“瘦”兼备
Bindows 突破了你必须要在富(界面)和瘦(客户端)之间选择的典范。Bindows 应用程序可以如现代任何桌面应用程序一样华丽同时又极其瘦小(并且是零接触)。Bindows 应用程序是:
- 华丽的,可定制的,有着桌面般的 GUI 组件
- 运行于标准的浏览器中而无需任何安装的(零接触)
- 无需专门的客户端,运行时引擎,或者插件
无依赖性
Bindows 应用程序不依赖于:
- 服务器 —— 任何服务器(Java,.NET,PHP 等都可以与 Bindows 结合使用)
- 后端平台 —— 任何后端硬件和后端软件
- 操作系统 —— 客户端可以使用任何操作系统(只要它包含一个支持的浏览器)
- 语言 —— 所有的语言都支持。Bindows 支持 Unicode
- 浏览器 —— 大部分浏览器都支持(比如:Internet Explorer 5.5 及其更高版本,Mozilla 1.4 及其更高版本,Netscape 7.1 及其更高版本,Firefox,K-Meleon 和 Camino)
Bindows 软件开发工具包(SDK)
Bindows 是一个用来编写安全健壮的 Rich Internet Applications 的软件开发工具包(SDK)。Bindows 平台为瘦 Web 客户端提供了丰富的功能。Bindows 应用程序无需终端用户下载 —— 真正的零接触(不使用 Java、Flash 或者 ActiveX)。
要看 Bindows™ 所能创造的效果,可以看一下这些范例,或者试验一下这个论坛。
如果你希望学习更多关于如何构建 Bindows™ 应用程序的内容,可以查看文档部分。
XML 和 Web Services
Bindows 应用程序通过 XML 文档来定义,并且支持标准的 SOAP Web Services.
Bindows 开发环境
- 支持企业级项目
- 跨浏览器、跨平台支持
- 不依赖于服务器的构架
- 可以与新的和已存在的资源协同工作
- 有统一的开发方式
Rich Internet Applications (RIA)
Rich Internet Applications 将现代 PC 桌面程序般的界面与基于 Internet 的构架相结合,使得通过 Internet 浏览器访问到的程序拥有桌面软件一样的功能。RIA 允许 Web 站点在无需终端用户下载的情况下提供复杂的数据处理并有着快速的反应时间。
商业 2.0 杂志(2004 年 10 月)将 Rich Internet Applications 选为 2005 年被关注的十项技术之一。
bindows官方
http://www.bindows.net/
bindows论坛
http://www.bindows.net/webboard/
bindows中文
http://www.bindows.net.cn/
Database & 技术 05 Oct 2005 01:06 pm
Mysql的常用命令
Mysql的常用命令
一、连接MYSQL。
格式: mysql -h主机地址 -u用户名 -p用户密码
1、例1:连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>
2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123
(注:u与root可以不用加空格,其它也一样)
3、退出MYSQL命令: exit (回车)
二、修改密码。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令
mysqladmin -uroot -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、例2:再将root的密码改为djg345。
mysqladmin -uroot -pab12 password djg345
三、增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to test1@”%” Identified by “abc”;
但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “abc”;
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;
在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。
一、操作技巧
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。
2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。
二、显示命令
1、显示数据库列表。
show databases;
刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2、显示库中的数据表:
use mysql; //打开库,学过FOXBASE的一定不会陌生吧
show tables;
3、显示数据表的结构:
describe 表名;
4、建库:
create database 库名;
5、建表:
use 库名;
create table 表名 (字段设定列表);
6、删库和删表:
drop database 库名;
drop table 表名;
7、将表中记录清空:
delete from 表名;
8、显示表中的记录:
select * from 表名;
三、一个建库和建表以及插入数据的实例
drop database if exists school; //如果存在SCHOOL则删除
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ’深圳’,
year date
); //建表结束
//以下为插入字段
insert into teacher values(’’,’glchengang’,’深圳一中’,’1976-10-10’);
insert into teacher values(’’,’jack’,’深圳一中’,’1975-12-23’);
注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。varchar和char有什么区别呢,只有等以后的文章再说了。(4)将YEAR设为日期字段。
如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:下,并在DOS状态进入目录mysqlin,然后键入以下命令:
mysql -uroot -p密码 < c:school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。
四、将文本数据转到数据库中
1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用来代替.
例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23
2、数据传入命令 load data local infile "文件名" into table 表名;
注意:你最好将文件复制到mysqlin目录下,并且要先用use命令打表所在的库。
五、备份数据库:(命令在DOS的mysqlin目录下执行)
mysqldump --opt school>school.bbb
注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。
后记:其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。最好的MYSQL教程还是“晏子“译的“MYSQL中文参考手册“不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象”PHP4中文手册”那样是chm的格式,在查找函数命令的时候不太方便。
update user set password=password(’newpassword’) where user=’root’;
flush privileges;