php文件下载实例
php教程文件下载实例
这里主要是利用php fopen函数来实现读取文件一个个传送到客户本地,有需要朋友可以参考一下。
<form method="post">主要目的就是测试我的php.ini没有设置upload_dir_tmp的值的时候,上传的文件临时保存在哪里的,经过这个测试发现原来在不配置php.ini的upload_dir_tmp的值的时候,默认的存储位置是在 C:\windows\temp目录,并且临时文件是以.tmp为后缀存储的,该文件马上就会被删除,所以你想通过操作系统的文件修改搜索功能是无法找到的,也就无法找到upload_dir_tmp的默认路径是哪里。
<input name="url" size="20" />
<input name="submit" type="submit" />
<!-- <input type="hidden" name="MAX_FILE_SIZE" value="2097152" />-->
</form>
<?php
set_time_limit(24*60*60);
if (!isset($_POST['submit'])) die ();
$destination_folder = './down/'; // 文件夹保存下载文件。必须以斜杠结尾
$url = $_POST['url'];
$newfname = $destination_folder.basename($url);
$file = fopen($url, "rb");
if ($file) {
$newf = fopen($newfname, "wb");
if ($newf) while (!feof($file)) {
fwrite($newf, fread($file, 1024*8), 1024*8);
}
}
if ($file) {
fclose($file);
}
if ($newf) {
fclose($newf);
}
?>
IIS+php教程服务器无法上传图片解决办法
服务器上使用Apache2+PHP正常运行,换成IIS+PHP,先后出现了php.ini的环境变量无法读取,php中验证码无法显示的问题,如今又有人反应无法上传图片的问题。
从IIS替换Apache2的过程仅仅是开启IIS,关闭Apache2,其它的没什么变化,但是却发生了如此多的差异,看样子IIS支持PHP还是有很多要进行修改的。
分析:
根据上面的描述,我怀疑问题出在IIS的权限配置上,IUSR_MACHINE的帐户对upload没有写入的权限,于是进行权限修改,IIS下的权限,NTFS下的权限都进行修改,但是终究都没用,查找网络上的资料也没有相应的,对上传页面进行测试,流程为:
swf文件调用save.php上传文件---->swf文件对上传的文件进行重命名--->名字返回给save.php--->显示出最后的名字。
现在的问题一直停留在swf对文件重命名的这里,一直没有到显示出最后的名字,并且swf文件不参与上传过程,那就只能在save.php文件中进行问题查找了,在该文件中进行测试,最后显示的名字所使用的变量为fileName,于是插入下面的语句进行测试:
echo "fileName=2008*****.gif";
这句话的作用就是使得fileName有值,save.php能正常显示,先把原来的语句一句一句的进行屏蔽测试,都正常的返回了,但是当测试到:
if (!@move_uploaded_file($f["tmp_name"], $dest_dir.'/'.$fileName)) header("HTTP/1.0 404 Not Found");
这句话的时候问题出现了,不能上传,查找上下文,一直没发现tmp_name的变量,不过看意思是先把文件上传到一个临时文件,再挪动到目的位置,那这个tmp位置在哪里呢?是不是这个位置不可写,才导致了无法上传文件?
查找网上资料,发现php.ini下面有2个地方关于上传的配置:
file_uploads = On 这里设置是否允许HTTP上传,默认应该为ON的
;upload_tmp_dir= 这里设置上传文件存放的临时位置
网上对于这2个地方的相关资料有:
I try to set up file uploading under IIS 7 and PHP 5.
First problem was to set 2 variables in php.ini
file_uploads = On //这里是说php.ini文件这个地方设置成On
upload_tmp_dir = "C:Inetpubwwwrootuploads" //这个路径就是自己设置的上传文件临时存储路径
For some reasons such directory name works,
but "upload_tmp" won't work.
The second problem was to set correct user rigths for upload folders where you try to save your file. I set my upload folder rights for the "WORKGROUP/users" for the full access. You may experiment by yourselves if you not need execute access, for example.
我的php.ini中upload_tmp_dir是被注释的,没有启用,更没有设置,可是为什么Apache2却可以正常上传呢?难道问题真的出在这里?
解决:
新建一个文件夹做临时上传目录,按照上面的英文说明修改php.ini中相应的那2项,把临时上传目录upload_tmp_dir设置成刚才建立的文件夹,把该文件夹的权限赋予“IUSR_计算机名”用户可写,重新启动IIS,上传试试,问题真的就这样解决了。
最终的分析答案:
上面的内容写于09年,但是现在2010年7月我新增一台服务器,又出现了这个问题,同时再次按照上面的解决方法实施,在操作的过程中大概是由于哪里出了错,竟然没有成功,不得不抽出点时间来研究具体原因,找到了最终产生这个问题的原因如下。
无法上传文件,不代表所有文件都无法上传,因为我的一个网站,flash调用fwrite()传头像之类的成功了,但是调用@move_uploaded_file($f["tmp_name"], $dest_dir.'/'.$fileName)这样的函数传照片的时候仍旧无法上传。
经过我的分析,原因是由于fwrite()是传的二进制文件,而move_uploaded_file()传的是文本文件,而windows操作系统是区分这2种文件的 [参考php手册fwrite()函数的说明],这也就是说这2种不同的文件在php环境下上传时所存储的临时上传目录是不同的,由于在配置IIS环境下的PHP的时候,设置的临时目录为E:tmp,设置该目录的iusr用户可写,二进制文件即可上传,所以我怀疑该目录就是二进制文件上传临时文件的存储位置,那么move_uploaded_file()传的文本文件的临时文件存储位置在哪里呢?其实就是在上面的那段英文里面,upload_tmp_dir设置的路径就是了,但是我的几台服务器中,每台服务器的这个设置的值都是被注释掉的“no value”,为什么有的服务器可以上传,而有的服务器不可以上传呢?这也就回到了以前我提出的问题,为什么Apache2可以上传而iis不可以上传呢?
这次我再次分析upload.php文件,分析其中造成该故障的代码具体内容如下:
// 检查是否有文件上传
if (! $_FILES['upload'.$num]['name'] == ""){
if ($_FILES['upload'.$num]['size'] < $max_size) {
1、 echo "文件上传路径:".$location.$_FILES['upload'.$num]['name'];
2、echo "文件临时文件名:".$_FILES['upload'.$num]['tmp_name'];
3、 move_uploaded_file($_FILES['upload'.$num]['tmp_name'],$location.$_FILES['upload'.$num]['name']) or $event = "Failure";
} else {
$event = "File too large!";
}
其中正常代码中第2句是不存在的,为了测试方便我加上来的,它的主要目的就是测试我的php.ini没有设置upload_dir_tmp的值的时候,上传的文件临时保存在哪里的,经过这个测试发现原来在不配置php.ini的upload_dir_tmp的值的时候,默认的存储位置是在 C:windowstemp目录,并且临时文件是以.tmp为后缀存储的,该文件马上就会被删除,所以你想通过操作系统的文件修改搜索功能是无法找到的,也就无法找到upload_dir_tmp的默认路径是哪里。
既然找到了upload_dir_tmp的默认路径了,那么修改c:windowstemp的访问权限,赋予IUSR_用户可写,重启动IIS Admin服务,上传文件,终于成功了。这就是为什么我的多台服务器upload_dir_tmp的值都为空的时候有的可传,有的不可传的原因。
这里是来自网络朋友的一个实现的文件上传类代码,我们详细的介绍了每个变量的用处,下面看看吧,有需要可以参考一下。这里是来自网络朋友的一个实现的文件上传类代码,我们详细的介绍了每个变量的用处,下面看看吧,有需要可以参考一下。
<?php教程
/**
* 文件上传类
*/
class uploadFile {public $max_size = '1000000';//设置上传文件大小
public $file_name = 'date';//重命名方式代表以时间命名,其他则使用给予的名称
public $allow_types;//允许上传的文件扩展名,不同文件类型用“|”隔开
public $errmsg = '';//错误信息
public $uploaded = '';//上传后的文件名(包括文件路径)
public $save_path;//上传文件保存路径
private $files;//提交的等待上传文件
private $file_type = array();//文件类型
private $ext = '';//上传文件扩展名/**
* 构造函数,初始化类
* @access public
* @param string $file_name 上传后的文件名
* @param string $save_path 上传的目标文件夹
*/
public function __construct($save_path = './upload/',$file_name = 'date',$allow_types = '') {
$this->file_name = $file_name;//重命名方式代表以时间命名,其他则使用给予的名称
$this->save_path = (preg_match('//$/',$save_path)) ? $save_path : $save_path . '/';
$this->allow_types = $allow_types == '' ? 'jpg|gif|png|zip|rar' : $allow_types;
}/**
* 上传文件
* @access public
* @param $files 等待上传的文件(表单传来的$_FILES[])
* @return boolean 返回布尔值
*/
public function upload_file($files) {
$name = $files['name'];
$type = $files['type'];
$size = $files['size'];
$tmp_name = $files['tmp_name'];
$error = $files['error'];switch ($error) {
case 0 : $this->errmsg = '';
break;
case 1 : $this->errmsg = '超过了php.ini中文件大小';
break;
case 2 : $this->errmsg = '超过了MAX_FILE_SIZE 选项指定的文件大小';
break;
case 3 : $this->errmsg = '文件只有部分被上传';
break;
case 4 : $this->errmsg = '没有文件被上传';
break;
case 5 : $this->errmsg = '上传文件大小为0';
break;
default : $this->errmsg = '上传文件失败!';
break;
}
if($error == 0 && is_uploaded_file($tmp_name)) {
//检测文件类型
if($this->check_file_type($name) == FALSE){
return FALSE;
}
//检测文件大小
if($size > $this->max_size){
$this->errmsg = '上传文件<font color=red>'.$name.'</font>太大,最大支持<font color=red>'.ceil($this->max_size/1024).'</font>kb的文件';
return FALSE;
}
$this->set_save_path();//设置文件存放路径
$new_name = $this->file_name != 'date' ? $this->file_name.'.'.$this->ext : date('YmdHis').'.'.$this->ext;//设置新文件名
$this->uploaded = $this->save_path.$new_name;//上传后的文件名
//移动文件
if(move_uploaded_file($tmp_name,$this->uploaded)){
$this->errmsg = '文件<font color=red>'.$this->uploaded.'</font>上传成功!';
return TRUE;
}else{
$this->errmsg = '文件<font color=red>'.$this->uploaded.'</font>上传失败!';
return FALSE;
}}
}/**
* 检查上传文件类型
* @access public
* @param string $filename 等待检查的文件名
* @return 如果检查通过返回TRUE 未通过则返回FALSE和错误消息
*/
public function check_file_type($filename){
$ext = $this->get_file_type($filename);
$this->ext = $ext;
$allow_types = explode('|',$this->allow_types);//分割允许上传的文件扩展名为数组
//echo $ext;
//检查上传文件扩展名是否在请允许上传的文件扩展名中
if(in_array($ext,$allow_types)){
return TRUE;
}else{
$this->errmsg = '上传文件<font color=red>'.$filename.'</font>类型错误,只支持上传<font color=red>'.str_replace('|',',',$this->allow_types).'</font>等文件类型!';
return FALSE;
}
}/**
* 取得文件类型
* @access public
* @param string $filename 要取得文件类型的目标文件名
* @return string 文件类型
*/
public function get_file_type($filename){
$info = pathinfo($filename);
$ext = $info['extension'];
return $ext;
}/**
* 设置文件上传后的保存路径
*/
public function set_save_path(){
$this->save_path = (preg_match('//$/',$this->save_path)) ? $this->save_path : $this->save_path . '/';
if(!is_dir($this->save_path)){
//如果目录不存在,创建目录
$this->set_dir();
}
}
/**
* 创建目录
* @access public
* @param string $dir 要创建目录的路径
* @return boolean 失败时返回错误消息和FALSE
*/
public function set_dir($dir = null){
//检查路径是否存在
if(!$dir){
$dir = $this->save_path;
}
if(is_dir($dir)){
$this->errmsg = '需要创建的文件夹已经存在!';
}
$dir = explode('/', $dir);
foreach($dir as $v){
if($v){
$d .= $v . '/';
if(!is_dir($d)){
$state = mkdir($d, 0777);
if(!$state)
$this->errmsg = '在创建目录<font color=red>' . $d . '时出错!';
}
}
}
return true;
}
}/*************************************************
* 图片处理类
*
* 可以对图片进行生成缩略图,打水印等操作
* 本类默认编码为UTF8 如果要在GBK下使用请将img_mark方法中打中文字符串水印iconv注释去掉
*
* 由于UTF8汉字和英文字母大小(像素)不好确定,在中英文混合出现太多时可能会出现字符串偏左
* 或偏右,请根据项目环境对get_mark_xy方法中的$strc_w = strlen($this->mark_str)*7+5进
* 行调整
* 需要GD库支持,为更好使用本类推荐使用GD库2.0+
*
* @author kickflip@php100 QQ263340607
*************************************************/class uploadImg extends uploadFile {
public $mark_str = 'kickflip@php100'; //水印字符串
public $str_r = 0; //字符串颜色R
public $str_g = 0; //字符串颜色G
public $str_b = 0; //字符串颜色B
public $mark_ttf = './upload/SIMSUN.TTC'; //水印文字字体文件(包含路径)
public $mark_logo = './upload/logo.png'; //水印图片
public $resize_h;//生成缩略图高
public $resize_w;//生成缩略图宽
public $source_img;//源图片文件
public $dst_path = './upload/';//缩略图文件存放目录,不填则为源图片存放目录/**
* 生成缩略图 生成后的图
* @access public
* @param integer $w 缩小后图片的宽(px)
* @param integer $h 缩小后图片的高(px)
* @param string $source_img 源图片(路径+文件名)
*/
public function img_resized($w,$h,$source_img = NULL){
$source_img = $source_img == NULL ? $this->uploaded : $source_img;//取得源文件的地址,如果为空则默认为上次上传的图片
if(!is_file($source_img)) { //检查源图片是否存在
$this->errmsg = '文件'.$source_img.'不存在';
return FALSE;
}
$this->source_img = $source_img;
$img_info = getimagesize($source_img);
$source = $this->img_create($source_img); //创建源图片
$this->resize_w = $w;
$this->resize_h = $h;
$thumb = imagecreatetruecolor($w,$h);
imagecopyresized($thumb,$source,0,0,0,0,$w,$h,$img_info[0],$img_info[1]);//生成缩略图片
$dst_path = $this->dst_path == '' ? $this->save_path : $this->dst_path; //取得目标文件夹路径
$dst_path = (preg_match('//$/',$dst_path)) ? $dst_path : $dst_path . '/';//将目标文件夹后加上/
if(!is_dir($dst_path)) $this->set_dir($dst_path); //如果不存在目标文件夹则创建
$dst_name = $this->set_newname($source_img);
$this->img_output($thumb,$dst_name);//输出图片
imagedestroy($source);
imagedestroy($thumb);
}/**
*打水印
*@access public
*@param string $source_img 源图片路径+文件名
*@param integer $mark_type 水印类型(1为英文字符串,2为中文字符串,3为图片logo,默认为英文字符串)
*@param integer $mark_postion 水印位置(1为左下角,2为右下角,3为左上角,4为右上角,默认为右下角);
*@return 打上水印的图片
*/
public function img_mark($source_img = NULL,$mark_type = 1,$mark_postion = 2) {
$source_img = $source_img == NULL ? $this->uploaded : $source_img;//取得源文件的地址,如果为空则默认为上次上传的图片
if(!is_file($source_img)) { //检查源图片是否存在
$this->errmsg = '文件'.$source_img.'不存在';
return FALSE;
}
$this->source_img = $source_img;
$img_info = getimagesize($source_img);
$source = $this->img_create($source_img); //创建源图片
$mark_xy = $this->get_mark_xy($mark_postion);//取得水印位置
$mark_color = imagecolorallocate($source,$this->str_r,$this->str_g,$this->str_b);switch($mark_type) {
case 1 : //加英文字符串水印
$str = $this->mark_str;
imagestring($source,5,$mark_xy[0],$mark_xy[1],$str,$mark_color);
$this->img_output($source,$source_img);
break;case 2 : //加中文字符串水印
if(!is_file($this->mark_ttf)) { //检查字体文件是否存在
$this->errmsg = '打水印失败:字体文件'.$this->mark_ttf.'不存在!';
return FALSE;
}
$str = $this->mark_str;
//$str = iconv('gbk','utf-8',$str);//转换字符编码 如果使用GBK编码请去掉此行注释
imagettftext($source,12,0,$mark_xy[2],$mark_xy[3],$mark_color,$this->mark_ttf,$str);
$this->img_output($source,$source_img);
break;case 3 : //加图片水印
if(is_file($this->mark_logo)){ //如果存在水印logo的图片则取得logo图片的基本信息,不存在则退出
$logo_info = getimagesize($this->mark_logo);
}else{
$this->errmsg = '打水印失败:logo文件'.$this->mark_logo.'不存在!';
return FALSE;
}$logo_info = getimagesize($this->mark_logo);
if($logo_info[0]>$img_info[0] || $logo_info[1]>$img_info[1]) { //如果源图片小于logo大小则退出
$this->errmsg = '打水印失败:源图片'.$this->source_img.'比'.$this->mark_logo.'小!';
return FALSE;
}$logo = $this->img_create($this->mark_logo);
imagecopy ( $source, $logo, $mark_xy[4], $mark_xy[5], 0, 0, $logo_info[0], $logo_info[1]);
$this->img_output($source,$source_img);
break;default: //其它则为文字图片
$str = $this->mark_str;
imagestring($source,5,$mark_xy[0],$mark_xy[1],$str,$mark_color);
$this->img_output($source,$source_img);
break;
}
imagedestroy($source);
}/**
* 取得水印位置
* @access private
* @param integer $mark_postion 水印的位置(1为左下角,2为右下角,3为左上角,4为右上角,其它为右下角)
* @return array $mark_xy 水印位置的坐标(索引0为英文字符串水印坐标X,索引1为英文字符串水印坐标Y,
* 索引2为中文字符串水印坐标X,索引3为中文字符串水印坐标Y,索引4为水印图片坐标X,索引5为水印图片坐标Y)
*/
private function get_mark_xy($mark_postion){
$img_info = getimagesize($this->source_img);$stre_w = strlen($this->mark_str)*9+5 ; //水印英文字符串的长度(px)(5号字的英文字符大小约为9px 为了美观再加5px)
//(12号字的中文字符大小为12px,在utf8里一个汉字长度为3个字节一个字节4px 而一个英文字符长度一个字节大小大约为9px
// 为了在中英文混合的情况下显示完全 设它的长度为字节数*7px)
$strc_w = strlen($this->mark_str)*7+5 ; //水印中文字符串的长度(px)if(is_file($this->mark_logo)){ //如果存在水印logo的图片则取得logo图片的基本信息
$logo_info = getimagesize($this->mark_logo);
}//由于imagestring函数和imagettftext函数中对于字符串开始位置不同所以英文和中文字符串的Y位置也有所不同
//imagestring函数是从文字的左上角为参照 imagettftext函数是从文字左下角为参照
switch($mark_postion){case 1: //位置左下角
$mark_xy[0] = 5; //水印英文字符串坐标X
$mark_xy[1] = $img_info[1]-20;//水印英文字符串坐标Y
$mark_xy[2] = 5; //水印中文字符串坐标X
$mark_xy[3] = $img_info[1]-5;//水印中文字符串坐标Y
$mark_xy[4] = 5;//水印图片坐标X
$mark_xy[5] = $img_info[1]-$logo_info[1]-5;//水印图片坐标Y
break;case 2: //位置右下角
$mark_xy[0] = $img_info[0]-$stre_w; //水印英文字符串坐标X
$mark_xy[1] = $img_info[1]-20;//水印英文字符串坐标Y
$mark_xy[2] = $img_info[0]-$strc_w; //水印中文字符串坐标X
$mark_xy[3] = $img_info[1]-5;//水印中文字符串坐标Y
$mark_xy[4] = $img_info[0]-$logo_info[0]-5;//水印图片坐标X
$mark_xy[5] = $img_info[1]-$logo_info[1]-5;//水印图片坐标Y
break;case 3: //位置左上角
$mark_xy[0] = 5; //水印英文字符串坐标X
$mark_xy[1] = 5;//水印英文字符串坐标Y
$mark_xy[2] = 5; //水印中文字符串坐标X
$mark_xy[3] = 15;//水印中文字符串坐标Y
$mark_xy[4] = 5;//水印图片坐标X
$mark_xy[5] = 5;//水印图片坐标Y
break;case 4: //位置右上角
$mark_xy[0] = $img_info[0]-$stre_w; //水印英文字符串坐标X
$mark_xy[1] = 5;//水印英文字符串坐标Y
$mark_xy[2] = $img_info[0]-$strc_w; //水印中文字符串坐标X
$mark_xy[3] = 15;//水印中文字符串坐标Y
$mark_xy[4] = $img_info[0]-$logo_info[0]-5;//水印图片坐标X
$mark_xy[5] = 5;//水印图片坐标Y
break;default : //其它默认为右下角
$mark_xy[0] = $img_info[0]-$stre_w; //水印英文字符串坐标X
$mark_xy[1] = $img_info[1]-5;//水印英文字符串坐标Y
$mark_xy[2] = $img_info[0]-$strc_w; //水印中文字符串坐标X
$mark_xy[3] = $img_info[1]-15;//水印中文字符串坐标Y
$mark_xy[4] = $img_info[0]-$logo_info[0]-5;//水印图片坐标X
$mark_xy[5] = $img_info[1]-$logo_info[1]-5;//水印图片坐标Y
break;
}
return $mark_xy;
}/**
* 创建源图片
* @access private
* @param string $source_img 源图片(路径+文件名)
* @return img 从目标文件新建的图像
*/
private function img_create($source_img) {
$info = getimagesize($source_img);
switch ($info[2]){
case 1:
if(!function_exists('imagecreatefromgif')){
$source = @imagecreatefromjpeg($source_img);
}else{
$source = @imagecreatefromgif($source_img);
}
break;
case 2:
$source = @imagecreatefromjpeg($source_img);
break;
case 3:
$source = @imagecreatefrompng($source_img);
break;
case 6:
$source = @imagecreatefromwbmp($source_img);
break;
default:
$source = FALSE;
break;
}
return $source;
}/**
* 重命名图片
* @access private
* @param string $source_img 源图片路径+文件名
* @return string $dst_name 重命名后的图片名(路径+文件名)
*/
private function set_newname($sourse_img) {
$info = pathinfo($sourse_img);
$new_name = $this->resize_w.'_'.$this->resize_h.'_'.$info['basename'];//将文件名修改为:宽_高_文件名
if($this->dst_path == ''){ //如果存放缩略图路径为空则默认为源文件同文件夹
$dst_name = str_replace($info['basename'],$new_name,$sourse_img);
}else{
$dst_name = $this->dst_path.$new_name;
}
return $dst_name;
}/**
* 输出图片
* @access private
* @param $im 处理后的图片
* @param $dst_name 输出后的的图片名(路径+文件名)
* @return 输出图片
*/
public function img_output($im,$dst_name) {
$info = getimagesize($this->source_img);
switch ($info[2]){
case 1:
if(!function_exists('imagegif')){
imagejpeg($im,$dst_name);
}else{
imagegif($im, $dst_name);
}
break;
case 2:
imagejpeg($im,$dst_name);
break;
case 3:
imagepng($im,$dst_name);
break;
case 6:
imagewbmp($im,$dst_name);
break;
}
}}
?>
这个写成了上传文件类就方便多了,把上面代码保存一个文件它就可以公共调用与修改删除了。
PHP分页实例代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>php教程 make page list</title>
<style type="text/CSS">
<!--
.page a:link {
color: #0000FF;
text-decoration: none;
}
.page a:visited {
text-decoration: none;
color: #0000FF;
}
.page a:hover {
text-decoration: none;
color: #0000FF;
}
.page a:active {
text-decoration: none;
color: #0000FF;
}
.page{color:#0000FF;}
-->
</style>
</head>
<body>
<table width="530" height="103" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<th width="30" height="38" bgcolor="#E3E3E3" scope="col">ID</th>
<th width="500" bgcolor="#E3E3E3" scope="col">文章标题</th>
</tr>
<?php
/*
* Created on 2010-4-17
*
* Order by Kove Wong
*/
$link=MySQL_connect(’localhost’,’root’,’haoxiazai1987’);
mysql教程_select_db(’pagelist’);
mysql_query(’set names gbk’);
$Page_size=10;
$result=mysql_query(’select * from v_char’);
$count = mysql_num_rows($result);
$page_count = ceil($count/$Page_size);
$init=1;
$page_len=7;
$max_p=$page_count;
$pages=$page_count;
//判断当前页码
if(empty($_GET[’page’])||$_GET[’page’]<0){
$page=1;
}else {
$page=$_GET[’page’];
}
$offset=$Page_size*($page-1);
$sql="select * from v_char limit $offset,$Page_size";
$result=mysql_query($sql,$link);
while ($row=mysql_fetch_array($result)) {
?>
<tr>
<td bgcolor="#E0EEE0" height="25px"><div align="center">
<?php echo $row[’id’]?>
</div></td>
<td bgcolor="#E0EEE"><div align="center">
<?php echo $row[’name’]?>
</div></td>
</tr>
<?php
}
$page_len = ($page_len%2)?$page_len:$pagelen+1;//页码个数
$pageoffset = ($page_len-1)/2;//页码个数左右偏移量
$key=’<div class="page">’;
$key.="<span>$page/$pages</span> "; //第几页,共几页
if($page!=1){
$key.="<a href="".$_SERVER[’PHP_SELF’]."?page=1">第一页</a> "; //第一页
$key.="<a href="".$_SERVER[’PHP_SELF’]."?page=".($page-1)."">上一页</a>"; //上一页
}else {
$key.="第一页 ";//第一页
$key.="上一页"; //上一页
}
if($pages>$page_len){
//如果当前页小于等于左偏移
if($page<=$pageoffset){
$init=1;
$max_p = $page_len;
}else{//如果当前页大于左偏移
//如果当前页码右偏移超出最大分页数
if($page+$pageoffset>=$pages+1){
$init = $pages-$page_len+1;
}else{
//左右偏移都存在时的计算
$init = $page-$pageoffset;
$max_p = $page+$pageoffset;
}
}
}
for($i=$init;$i<=$max_p;$i++){
if($i==$page){
$key.=’ <span>’.$i.’</span>’;
} else {
$key.=" <a href="".$_SERVER[’PHP_SELF’]."?page=".$i."">".$i."</a>";
}
}
if($page!=$pages){
$key.=" <a href="".$_SERVER[’PHP_SELF’]."?page=".($page+1)."">下一页</a> ";//下一页
$key.="<a href="".$_SERVER[’PHP_SELF’]."?page={$pages}">最后一页</a>"; //最后一页
}else {
$key.="下一页 ";//下一页
$key.="最后一页"; //最后一页
}
$key.=’</div>’;
?>
<tr>
<td colspan="2" bgcolor="#E0EEE0"><div align="center"><?php echo $key?></div></td>
</tr>
</table>
</body>
</html>
<?php教程
// 建立一个指向新COM组件的索引
$word = new COM("word.application") or die("Can't start Word!");
// 显示目前正在使用的Word的版本号
//echo “Loading Word, v. {$word->Version}<br>”;
// 把它的可见性设置为0(假),如果要使它在最前端打开,使用1(真)
// to open the application in the forefront, use 1 (true)
//$word->Visible = 0;
echo $word->Version;
//打?一个文档
$word->Documents->OPen("C:wampwwwtest1.doc");
//读取文档内容$test= $word->ActiveDocument->content->Text;
echo $test;
echo '<br>';
//将文档中需要换的变量更换一下
$test=str_replace('<{变量}>','这是变量',$test);
echo $test;
$word->Documents->Add();
// 在新文档中添加文字
$word->Selection->TypeText('$test');
//把文档保存在目录中
$word->Documents[1]->SaveAs("C:wampwwwtest2.doc");
// 关闭与COM组件之间的连接
$word->Quit();
?>
相关文章
- 下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
Jupyter Notebook读取csv文件出现的问题及解决
这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06- 有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
php无刷新利用iframe实现页面无刷新上传文件(1/2)
利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25- 要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
- 又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
- 今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
ant design中upload组件上传大文件,显示进度条进度的实例
这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29- 这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
- 举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
- 这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31
- 分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21