下载大的文件+连接数据库语句自己能写出来
<?php
ob_start();
/*
加入ob_start输出缓冲,因为header放后面出现warninig,
其中主要无关的信息不要echo输出,都会下载到客户端,导致下载后的文件不对~
*/
header("Content-type:text/html;charset=utf-8");
$file_name="1.jpg";
//用以解决中文不能显示出来的问题
$file_name=iconv("utf-8","gb2312",$file_name);
$file_sub_path=$_SERVER['DOCUMENT_ROOT']."/mynew/";
$file_path=$file_sub_path.$file_name;
//首先要判断给定的文件存在与否
if(!file_exists($file_path)){
echo "没有该文件文件";
return ;
}
$fp=fopen($file_path,"r");
$file_size=filesize($file_path);
//下载文件需要用到的头
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".$file_name);
$buffer=1024;
$file_count=0;
//向浏览器返回数据 针对大的文件,分批读取并下载;
while(!feof($fp) && $file_count<$file_size){
$file_con=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_con;//分批读
ob_flush();//分批下载 冲刷php自身的缓冲
flush();//冲刷服务器的缓冲
}
/*
对于小的文件直接即可
fread($fp,$file_size);
*/
fclose($fp);
?>
下载文件需要设置header 4个头
其中content-type:appliction/octet-stream是二进制流
根据不同的下载文件类型,这里可以不同:
if (!preg_match("[tmp|txt|rar|pdf|doc]", $file_extension))exit ("非法资源下载");
switch ($file_extension) {
case "exe" :
$ctype = "application/octet-stream";
break;
case "zip" :
$ctype = "application/zip";
break;
case "mp3" :
$ctype = "audio/mpeg";
break;
case "mpg" :
$ctype = "video/mpeg";
break;
case "avi" :
$ctype = "video/x-msvideo";
break;
default :
$ctype = "application/force-download";
}
连接数据库语句
<?php
$link = mysql_connect('localhost:3306', 'root', 'mysql');//创建数据库连接
if (!$link) { //如果失败
die('连接MySQL服务器失败: ' . mysql_error()); //显示出错信息
}
echo '连接MySQL服务器成功!'; //否则显示连接成功的信息
mysql_select_db("数据库名", $link); //选择需要使用的数据库
mysql_query("set names utf8");
//1创建表
$sql = "CREATE TABLE fruit
(
name varchar(15),
color varchar(15),
price float
)"; //创建数据表的SQL语句
mysql_query($sql, $con); //使用mysql_query执行SQL语句
//2插入
mysql_query("INSERT INTO fruit (name, color, price) VALUES ('". $_POST['name'] ."', '". $_POST['color'] ."', '". $_POST['prince'] ."')"); //插入结果
//3更新
mysql_query("UPDATE fruit SET price = '2.2' WHERE name = 'orange'");
//4查询表中数据,并以表格的形式显示出来 针对dql的语句返回结果,针对dml返回的bool
$result = mysql_query("SELECT * FROM fruit"); //读取fruit表的数据
echo "<table border='1'><tr><th>水果</th><th>颜色</th><th>价格</th></tr>"; //构造表头
while($row = mysql_fetch_array($result)) //循环查询结果集
{
echo "<tr>";
echo "<td>" . $row['name'] . "</td>"; //输出水果名
echo "<td>" . $row['color'] . "</td>"; //颜色
echo "<td>" . $row['price'] . "</td>"; //价格
echo "</tr>";
}
echo "</table>";
mysql_free_result($result);//资源要尽早释放 $result结果全部拿到了客户端
mysql_close($link); //最后关闭数据库连接 $link是重要的资源,尽量晚建立早释放
?>
Mysql_fetch_row(
res):返回索引数据Mysqlfetchassoc(
res)返回关联数组
Mysql_fetch_array(
res)返回索引和关联数组(两套)Mysqlfecthobject(
res)把一行数据当作一个对象。
** result一定要及时释放资源∗∗−mysqlfreeresult()释放资源,得到 result后,即使关闭mysql_close( link),仍然会显示while里面的内容:因为 result指向本地的取回的数据。释放资源是指将取回来的资源释放;而关闭连接是断开和mysql数据库的连接。即使没有
**mysql_close,系统也会自动关闭。**php手册上:通常不需要使用 mysql_close(),因为已打开的非持久连接会在脚本执行完毕后自动关闭。mysql_close() 不会关闭由 mysql_pconnect() 建立的持久连接。