如何利用php+mysql保存和输出文件

本地文件上传到服务器后,服务器的脚本对文件进行保存,一般有两种方式,一种是作为
文件保存到机器的特定目录下,但是这里就有很多诸如文件重名带来的种种不便之处,有的程
序自动改文件名字,把名字加上上传时间等方法以保证文件名的唯一性,这样失去了文件的原
始名字,通过文件名查询特定的文件信息也有很多困难,不利于文件的统一管理;一种是把文
件保存到数据库中利用数据库的强大功能,可以方便的实现文件的各种操作。本文采用的是第
二种方法。
这一组程序演示了,如何将硬盘的一个文件通过网页,上传到服务器的数据库里面,并且
读出文件的内容。 使用说明: 一共有5个程序,说明如下: 1. file.sql—
本程序要用到的数据库表的结构[注:数据库用的是test] 2. upload.php—
上传表单 3. submit.php— 上传处理程序 4. show_info.php —
显示部分上传的文件信息 5. show_add.php— 显示[下载]文件
//////////////////////////////////////////////////////////////////////
file.sql — //简要说明
保存上传得文件的基本信息的数据库结构,此处注意保存文件内容的字段,使用longtext类型
因为普通的blob类型最大存储64K字节。另外,一般php的默认配置最大上传文件为2M,如果上
传的文件特别大,莫忘了调整php.ini的设置哦。 //文件源码 create table
receive( id int NOT NULL auto_increment, #主键,自动累加 file_data
longblob,#文件内容 file_type varchar(100),#文件类型 file_name
varchar(255),#文件名字 file_size int,#文件大小 PRIMARY KEY(id) #主键
) //////////////////////////////////////////////////////////////////////
upload.php — //简要说明
上传界面,用户选择文件,然后提交给submit.php处理 值得注意的是一个
MAX_FILE_SIZE的隐藏值域,通过设置其VALUE可 以限制上载文件的大小。
//程序源码 html head title文件上传表单/title /head body table form
enctype=multipart/form-data name=myform action=submit.php method=post
INPUT TYPE = “hidden” NAME = “MAX_FILE_SIZE” VALUE =”1000000″
trtd选择上传文件/tdtd input name=myfile type=file/td/tr trtd
colspan=2input name=submit value=上传 type=submit/td/tr /table /body
/html
//////////////////////////////////////////////////////////////////////
submit.php — //简要说明
把用户上传得文件连同文件的基本信息保存到数据库里 //程序源码 ?php
if($myfile != “none” $myfile != “”) { //有了上传文件了
//设置超时限制时间,缺省时间为 30秒,设置为0时为不限时 $time_limit=60;
set_time_limit($time_limit); // //把文件内容读到字符串中
$fp=fopen($myfile,”rb”); if(!$fp) die(“file open error”); $file_data =
addslashes(fread($fp, filesize($myfile))); fclose($fp); unlink($myfile);
//文件格式,名字,大小 $file_type=$myfile_type;
$file_name=$myfile_name; $file_size=$myfile_size;
//连接数据库,把文件存到数据库中
$conn=mysql_connect(“127.0.0.1″,”***”,”***”); if(!$conn)
die(“error : mysql connect failed”); mysql_select_db(“test”,$conn);
$sql=”insert into receive (file_data,file_type,file_name,file_size)
values ($file_data,$file_type,$file_name,$file_size)”;
$result=mysql_query($sql); //下面这句取出了刚才的insert语句的id
$id=mysql_insert_id(); mysql_close($conn); set_time_limit(30);
//恢复缺省超时设置 echo “上传成功— “; echo “a
href=show_info.php?id=$id显示上传文件信息/a”; } else { echo
“你没有上传任何文件”; } ?
//////////////////////////////////////////////////////////////////////
show_info.php — //简要说明
从数据库里取出文件的基本信息[文件名和文件大小]。 //程序源码 ?php
if(!isset($id) or $id==””) die(“error: id none”); //定位记录,读出
$conn=mysql_connect(“127.0.0.1″,”***”,”***”); if(!$conn)
die(“error: mysql connect failed”); mysql_select_db(“test”,$conn);
$sql =”select file_name ,file_size from receive where id=$id”; $result
= mysql_query($sql); if(!$result) die(” error: mysql query”);
//如果没有指定的记录,则报错 $num=mysql_num_rows($result); if($num1)
die(“error: no this recorder”); //下面两句程序也可以这么写
//$row=mysql_fetch_object($result); //$name=$row-name;
//$size=$row-size; $name = mysql_result($result,0,”file_name”); $size
= mysql_result($result,0,”file_size”); mysql_close($conn); echo
“hr上传的文件的信息:”; echo “brThe files name – $name”; echo “brThe
files size – $size”; echo “bra href=show_add.php?id=$id附件/a”; ?
//////////////////////////////////////////////////////////////////////
show_add.php — //简要说明 从数据库里取出文件内容 //程序源码 ?php
if(!isset($id) or $id==””) die(“error: id none”); //定位记录,读出
$conn=mysql_connect(“127.0.0.1″,”***”,”***”); if(!$conn)
die(“error : mysql connect failed”); mysql_select_db(“test”,$conn);
$sql=”select * from receive where id=$id”; $result =mysql_query($sql);
if(!$result) die(“error: mysql query”); $num=mysql_num_rows($result);
if($num1) die(“error: no this recorder”); $data =
mysql_result($result,0,”file_data”); $type =
mysql_result($result,0,”file_type”); $name =
mysql_result($result,0,”file_name”); mysql_close($conn);
//先输出相应的文件头,并且恢复原来的文件名 header(“Content-type:$type”);
header(“Content-Disposition: attachment; filename=$name”); echo $data;
? 本程序在 win2000 pro + apache 1.13.19 + php 4.0.5 + mysql 3.23.36
下通过。

  1.php  连接数据库的示例。
  2.php  关闭数据库连接。
  3.php  执行sql语句。
  4.php  获取sql语句执行错误的信息。
  5.php  获取查询结果集。
  6.php  获取结果集中的所有记录。
  7.php  用php程序显示表中数据。
  8.php  分页显示数据。
  9.html  提交用户信息的html页面。
  10.php  数据插入数据库。
  11.php  显示数据信息的php程序。
  12.php  添加删除链接的php程序。
  13.php  删除数据库数据。

*/
 // 1.php  连接数据库的示例。

 代码如下

$host = ‘localhost’;
$user_name = ‘root’;
$password = ‘admin’;

$conn = mysql_connect($host,$user_name,$password);
if(!$conn)
{
    die(‘数据库连接失败:<br/>’.mysql_error());
}
echo ‘数据库连接成功!’;

 

// 2.php  关闭数据库连接。

 代码如下

$host = ‘localhost’;
$user_name = ‘root’;
$password = ‘admin’;

$conn = mysql_connect($host,$user_name,$password);
if(!$conn)
{
    die(‘数据库连接失败:’.mysql_error());
}
echo ‘数据库连接成功!’;

if(mysql_close($conn))
{
    echo ‘<br/>……..<br/>’;
    echo ‘到数据库的连接已经成功关闭’;
}

 

 

 
  //3.php  执行sql语句。
 

 

 代码如下

$host = ‘localhost’;
$user_name = ‘root’;
$password = ‘admin’;

$conn = mysql_connect($host,$user_name,$password);
if(!$conn)
{
    die(‘数据库连接失败:’.mysql_error());
}
mysql_select_db(‘test’);

$sql = ‘select id,name,city from users’;
$result = mysql_query($sql);

if($result)
{
    echo ‘sql语句:’ . $sql . ‘<br/>已经成功执行!’;
    $num = mysql_num_澳门新葡亰3522平台游戏,rows($result);   
//调用函数mysql_num_row()获得select语句查询结果的行数
    echo
‘<br/>该sql语句查询到<b>’.$num.'</b>行数据’;
}

mysql_close($conn);
 

//4.php  获取sql语句执行错误的信息。

 代码如下

$host = ‘localhost’;
$user_name = ‘root’;
$password = ‘admin’;

$conn = mysql_connect($host,$user_name,$password);
if(!$conn)
{
    die(‘数据库连接失败:’.mysql_error());
}
mysql_select_db(‘test’);

$sql = ‘select id,name,city,gender from users’;

//这里使用mysql_error()获取sql语句执行出错时的相关信息
$result = mysql_query($sql) or die(“<br/>error:
<b>”.mysql_error().”</b><br/><br/><br/>产生问题的sql<br/>”.$sql);

if($result)
{
    echo ‘sql语句:’ . $sql . ‘<br/>已经成功执行!’;
}

mysql_close($conn);

 

 

  //5.php  获取查询结果集。

 

 代码如下

$host = ‘localhost’;
$user_name = ‘root’;
$password = ‘admin’;

$conn = mysql_connect($host,$user_name,$password);
if(!$conn)
{
    die(‘数据库连接失败:’.mysql_error());
}
mysql_select_db(‘test’);

$sql = ‘select id,name,city from users’;

$result = mysql_query($sql) or die(“<br/>error:
<b>”.mysql_error().”</b><br/>产生问题的sql:”.$sql);

if($num = mysql_num_rows($result))
{
    $row = mysql_fetch_array($result);
    echo ‘<pre>’;
    print_r($row);
}

mysql_close($conn);
  //6.php  获取结果集中的所有记录。
$host = ‘localhost’;
$user_name = ‘root’;
$password = ‘admin’;

$conn = mysql_connect($host,$user_name,$password);
if(!$conn)
{
    die(‘数据库连接失败:’.mysql_error());
}
mysql_select_db(‘test’);

$sql = ‘select id,name,city from users’;

$result = mysql_query($sql) or die(“<br/>error:
<b>”.mysql_error().”</b><br/>产生问题的sql:”.$sql);

if($num = mysql_num_rows($result))
{
    echo ‘<pre>’;
    while($row = mysql_fetch_array($result,mysql_assoc))
    {
        print_r($row);
    }
}

mysql_close($conn);
 

 

 

//7.php  用php程序显示表中数据。

 

 代码如下

$host = ‘localhost’;
$user_name = ‘root’;
$password = ‘admin’;

$conn = mysql_connect($host,$user_name,$password);
if(!$conn)
{
    die(‘数据库连接失败:’.mysql_error());
}
mysql_select_db(‘test’);

$sql = ‘select id,name,city,created_time from users’;

$result = mysql_query($sql) or die(“<br/>error:
<b>”.mysql_error().”</b><br/>产生问题的sql:”.$sql);
?>
<html>
<head>
<title>13-7.php</title>
</head>
<center>

<body>
<table width=”75%” border=”0″ cellpadding=”0″ cellspacing=”1″
bgcolor=”#7b7b84″>
    <tr bgcolor=”#8bbcc7″>
        <td height=”33″><div
align=”center”><strong>用户id</strong></div></td>
        <td><div
align=”center”><strong>用户名称</strong></div></td>
        <td><div
align=”center”><strong>来自城市</strong></div></td>
        <td><div
align=”center”><strong>注册时间</strong></div></td>
    </tr>

<?php
if($num = mysql_num_rows($result))
{
    while($row = mysql_fetch_array($result,mysql_assoc))
    {
?>
    <tr bgcolor=”#ffffff”>
        <td height=”22″ align=”right”><?php echo $row[‘id’];
?> </td>
        <td height=”22″> <?php echo $row[‘name’];
?> </td>
        <td height=”22″> <?php echo $row[‘city’];
?> </td>
        <td height=”22″> <?php echo
$row[‘created_time’]; ?> </td>
    </tr>
<?php
    }
}
mysql_close($conn);
?>

</table>
</body>
</center>
</html>
 

 

 

//8.php  分页显示数据。

 

 代码如下