首页 > 编程技术 > php

php面试题之新浪网面试试题

发布时间:2016-11-25 15:49

我们大家都知道去大公司面试一般都会有他们自己的一套面试题目,下面我们来看看关于php面试题之新浪网面试试题。
 代码如下 复制代码

<?php
/*
* filename: kingmonkey.php
* author: luochuan wang
* date: April 2nd, 2009
* descript: an arithmetic to a program
* program: 
   一群猴子排成一圈,按1,2,...,n依次编号。 
   然后从第1只开始数,数到第m只,把它踢出圈,
   从它后面再开始数,  再数到第m只,在把它踢出去...,
   如此不停的进行下去,  直到最后只剩下一只猴子为止,那只猴子就叫做大王。 
   要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
*/

function getKingMokey($n, $m)
{
        $monkey[0] = 0;

        //将1-n只猴子顺序编号 入数组中
        for($i= 1; $i<= $n; $i++)
        {
               $monkey[$i] = $i;
        }

        $len = count($monkey);

        //循环遍历数组元素(猴子编号)
        for($i= 0; $i< $len; $i= $i)
        {
              $num = 0;

             /*
              * 遍历$monkey数组,计算数组中值不为0的元素个数(剩余猴子的个数)
              * 赋值为$num,并获取值不为0的元素的元素值
             */
             foreach($monkey as $key => $value)
             {
                if($value == 0) continue;
                $num++;
                $values = $value;
             }

             //若只剩一只猴子 则输出该猴子编号(数组元素值) 并退出循环
             if($num == 1)
             {
                    echo $values;
                    exit;
             }

             /*
              * 若剩余猴子数大于1($num > 1)
              * 继续程序
             */

             //将第$i只猴子踢出队伍(相应数组位置元素值设为0)
             $monkey[$i] = 0;

             //打印该猴子位置
             echo $i."";

            /*
             * 获取下一只需要踢出队伍的猴子编号
             * 在$m值范围内遍历猴子 并设置$m的计数器
             * 依次取下一猴子编号
             * 若元素值为0,则该位置的猴子已被踢出队伍
             * 若不为0,继续获取下一猴子编号,且计数器加1
             * 若取得的猴子编号大于数组个数
             * 则从第0只猴子开始遍历(数组指针归零) 步骤同上
             * 直到计数器到达$m值 * 最后获取的$i值即为下一只需要踢出队伍的猴子编号
             */

             //设置计数器
             for($j= 1; $j<= $m; $j++)
             {
                   //猴子编号加一,遍历下一只猴子
                   $i++;

                   //若该猴子未被踢出队伍,获取下一只猴子编号
                   if($monkey[$i] > 0) continue;

                   //若元素值为0,则猴子已被踢出队伍,进而循环取下一只猴子编号
                   if($monkey[$i] == 0)
                   {
                           //取下一只猴子编号
                           for($k= $i; $k< $len; $k++)
                           {
                                   //值为0,编号加1
                                   if($monkey[$k] == 0) $i++;

                                   //否则,编号已取得,退出
                                   if($monkey[$k] > 0) break;
                           }
                    }

                   //若编号大于猴子个数,则从第0只猴子开始遍历(数组指针归零) 步骤同上
                   if($i == $len) $i = 0;

                   //同上步骤,获取下一只猴子编号
                   if($monkey[$i] == 0)
                   {
                          for($k= $i; $k< $len; $k++)
                          {
                                   if($monkey[$k] == 0) $i++;

                                  if($monkey[$k] > 0) break;
                          }
                   }
            }
      }
}

//猴子个数
$n = 10;

//踢出队伍的编号间隔值
$m = 3;

//调用猴王获取函数

getKingMokey($n, $m);

?>

本文章收藏了二个相关的实现,利用php的fopen打开文本文件然后保存到数据库了,方法很简单下面我们来看看吧。

实例1、php 读txt文件插入数据库

 代码如下 复制代码

<?php

$m = mysql_connect('127.0.0.1','root','') or die("Invalid query: " . mysql_error());

mysql_select_db('discuz', $m) or die("Invalid query: " . mysql_error());


$handle = fopen("aa.txt", "r");
while (!feof($handle)) {
    $buffer =  ($handle);
    $ss[] = explode('&nbsp', $buffer);
   
}
//var_dump($ss);

mysql_query("set names 'utf8'",$m);
foreach($ss as $k => $v){
  //addslashes($v);
  //foreach($v as $k = $value){
  //$vv = addslashes($value);
 //mysql_query("insert into match_view_test_2 (`kanum`, `username`, `mid`, `rank`, `num` ,`zunum` ,`sex` ,`yucolor` ,`eye` ,`backtime` ,`kongju` ,`fengspeed` )
  //values ('123','123', 20111014060110765 ,1,'123','123','123','123','123','123','123','123')") or die("Invalid query: " . mysql_error());
 //}
 $kanum = $v[1];
 $username = $v[2];
 
 $rank = (int)$v[0];
 
 $num = $v[3];
 $zunum = $v[4];
 $sex = $v[5];
 //echo $sex;
 $yucolor = $v[6];
 //$eye = $v[7];
 $backtime = $v[8].' '.$v[9];
 $kongju = $v[10];
 $fengspeed = $v[11];
 mysql_query("insert into match_view_test (`kanum`, `username`, `mid`, `rank`, `num` ,`zunum` ,`sex` ,`yucolor` ,`eye` ,`backtime` ,`kongju` ,`fengspeed` )
  VALUES('$kanum','$username', 20111014060110765,$rank,'$num','$zunum','$sex','$yucolor','$eye','$backtime','$kongju','$fengspeed')") or die("Invalid query: " . mysql_error());
 }

?>


php读取txt文件组成SQL并插入数据库的代码

先看数据结构

 

 代码如下 复制代码
-- 数据表结构:
-- 100000_insert,1000000_insert
CREATE TABLE `100000_insert` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parentid` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
100000 (10万)行插入:Insert 100000_line_data use 2.5534288883209 seconds
1000000(100万)行插入:Insert 1000000_line_data use 19.677318811417 seconds


php文件

 代码如下 复制代码

<?php
/**
* $splitChar 字段分隔符
* $file 数据文件文件名
* $table 数据库表名
* $conn 数据库连接
* $fields 数据对应的列名
* $insertType 插入操作类型,包括INSERT,REPLACE
*/
function loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields=array(),$insertType='INSERT'){
if(empty($fields)) $head = "{$insertType} INTO `{$table}` VALUES('";
else $head = "{$insertType} INTO `{$table}`(`".implode('`,`',$fields)."`) VALUES('"; //数据头
$end = "')";
$sqldata = trim(file_get_contents($file));
if(preg_replace('/s*/i','',$splitChar) == '') {
$splitChar = '/(w+)(s+)/i';
$replace = "$1','";
$specialFunc = 'preg_replace';
}else {
$splitChar = $splitChar;
$replace = "','";
$specialFunc = 'str_replace';
}
//处理数据体,二者顺序不可换,否则空格或Tab分隔符时出错
$sqldata = preg_replace('/(s*)(n+)(s*)/i',''),('',$sqldata); //替换换行
$sqldata = $specialFunc($splitChar,$replace,$sqldata); //替换分隔符
$query = $head.$sqldata.$end; //数据拼接
if(mysql_query($query,$conn)) return array(true);
else {
return array(false,mysql_error($conn),mysql_errno($conn));
}
}
//调用示例1
require 'db.php';
$splitChar = '|'; //竖线
$file = 'sqldata1.txt';
$fields = array('id','parentid','name');
$table = 'cengji';
$result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
if (array_shift($result)){
echo 'Success!<br/>';
}else {
echo 'Failed!--Error:'.array_shift($result).'<br/>';
}
/*sqlda ta1.txt
|0|A
|1|B
|1|C
|2|D
-- cengji
CREATE TABLE `cengji` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parentid` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `parentid_name_unique` (`parentid`,`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1602 DEFAULT CHARSET=utf8
*/


//调用示例2
require 'db.php';
$splitChar = ' '; //空格
$file = 'sqldata2.txt';
$fields = array('id','make','model','year');
$table = 'cars';
$result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
if (array_shift($result)){
echo 'Success!<br/>';
}else {
echo 'Failed!--Error:'.array_shift($result).'<br/>';
}
/* sqldata2.txt
Aston DB19 2009
Aston DB29 2009
Aston DB39 2009
-- cars
CREATE TABLE `cars` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`make` varchar(16) NOT NULL,
`model` varchar(16) DEFAULT NULL,
`year` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
*/
//调用示例3
require 'db.php';
$splitChar = ' '; //Tab
$file = 'sqldata3.txt';
$fields = array('id','make','model','year');
$table = 'cars';
$insertType = 'REPLACE';
$result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields,$insertType);
if (array_shift($result)){
echo 'Success!<br/>';
}else {
echo 'Failed!--Error:'.array_shift($result).'<br/>';
}
/* sqldata3.txt
Aston DB19 2009
Aston DB29 2009
Aston DB39 2009
*/
//调用示例3
require 'db.php';
$splitChar = ' '; //Tab
$file = 'sqldata3.txt';
$fields = array('id','value');
$table = 'notExist'; //不存在表
$result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
if (array_shift($result)){
echo 'Success!<br/>';
}else {
echo 'Failed!--Error:'.array_shift($result).'<br/>';
}
//附:db.php
/* //注释这一行可全部释放
?>
<?php
static $connect = null;
static $table = 'jilian';
if(!isset($connect)) {
$connect = mysql_connect("localhost","root","");
if(!$connect) {
$connect = mysql_connect("localhost","Zjmainstay","");
}
if(!$connect) {
die('Can not connect to database.Fatal error handle by /test/db.php');
}
mysql_select_db("test",$connect);
mysql_query("SET NAMES utf8",$connect);
$conn = &$connect;
$db = &$connect;
}
?>

如果出现MySQL server has gone away 是因为导入数据包过大,导入mysql挂机了,我们解决方法是修改my.ini/my.cnf max_allowed_packet=20M 。

这里举一个实现其它的不说多关于php ajax实现验证用户名是否存在完整程序,有需要了解的同学可参考一下。
 代码如下 复制代码

 

<!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=utf-8" />
 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
 <link rel="stylesheet" type="text/css" href="css/int.css" />
<script type="text/javascript" >
//根据下拉框变换图片
 function img_change(thisObj){
     var imgsrc = "/bbs/img/"+ thisObj.value+".gif";
     document.getElementById("tx_change").src=imgsrc;   
 }
 
 //检查是否都符合 注册 要求
 function check_reg()
 {
 if(check_len() && check_pass() && check_email() && check_qq())
 {
     return true;   
 }else{
     return false;
     }
 }
 
 //检查密码长度不能少于6
 function check_len(thisObj){
     if(thisObj.value.length==0)
     {
         document.getElementById('show_pass').innerHTML="密码不能为空";
         return false;
     }else{
     if (thisObj.value.length<6)
     {
         document.getElementById('show_pass').innerHTML="密码长度不少于6";
         return false;
     }
         document.getElementById('show_pass').innerHTML="";   
         return true;
       }
 }
 
 //检查俩次密码输入是否一致
 function check_pass(thisObj){
     var psw=document.getElementById('pass');
     if(psw.value.length==0)
     {
         document.getElementById('show_pass').innerHTML="密码不能为空";
         return false;
     }else{
         document.getElementById('show_pass').innerHTML="";   
 
     if (thisObj.value!=psw.value)
     {
         document.getElementById('show_repass').innerHTML="两次密码输入不正确";
         return false;
     }
         document.getElementById('show_repass').innerHTML="";
         return true;
     }
 }
 
 //检查email是否正确
 function check_email(thisObj){
     var reg=/^([a-zA-Zd][a-zA-Z0-9_]+@[a-zA-Zd]+(.[a-zA-Zd]+)+)$/gi;   
     var rzt=thisObj.value.match(reg);
     if(thisObj.value.length==0){
         document.getElementById('show_e').innerHTML="Email不能为空";
         return false;
         }else{
     if (rzt==null)
     {
         document.getElementById('show_e').innerHTML="Email地址不正确";
         return false;
     }
         document.getElementById('show_e').innerHTML="";
         return true;
   }
 
 }
 
 //检查qq格式是否正确
 function check_qq(thisObj){
     var qq=document.getElementById('qq').value;
     var reg=/^d+$/;
     if(qq.search(reg))
     {
         document.getElementById('show_qq').innerHTML=" QQ 只能为数字";
         return false;
     }else{
         document.getElementById('show_qq').innerHTML="";
         return true ;
         }
    
    
 }
</script>
 <style type="text/css">
 td{
     height:30px;
     vertical-align:middle;
     align:center;
 }
 #myText{
  width:600px;
 }
 </style>
 <title>注册页面</title>
 </head>
 
 <body >
 
 <?php
 error_reporting(0);
 //不让PHP报告有错语发生。如果不关闭好有类似这的错语 Warning: preg_match() 关闭就不出现了
 session_start();
 header("Cache-control: private");
 
 $conn = @ mysql_connect("localhost","root","")or die("数据库连接错误");
 mysql_select_db("bbs",$conn);
 mysql_query("set names utf8");
 
 if($_POST['submit'])
 {  
     $username = $_POST["username"];
    
     $sql="select userName  from user_info where userName='$username'";
  //   echo $sql;
    
     $query=mysql_query($sql);
     $rows = mysql_num_rows($query);
     if($rows > 0){
          echo "<script type='text/javascript'>alert('用户名已存在');location='javascript:history.back()';</script>";
     }else{
         $user_in = "insert into user_info (username,pass,sex,qq,email,img) values ('$_POST[username]',md5('$_POST[pass]'),'$_POST[sex]','$_POST[qq]','$_POST[email]','$_POST[img_select]')";       
         //echo $user_in;
         mysql_query($user_in);
         echo "<script type='text/javascript'>alert('写入成功!!');location.href='login.php';</script>";
       
     }
 
 //javascript:history.go(-1)
    
 }
 ?>
 
 
 <form  action="reg.php" name="reg_form" method="post" onsubmit="return check_reg()">
 <table name="reg_table" align="left">
 <tr>
     <td>用户:</td><td><input id="username" name="username" class="myText" type="text" maxlength="12" /></td>
 </tr>
 
 <tr> <!--性别:0 保密 1 女 2 男-->
      <td > 性别:</td>
      <td>女<input type="radio" value="1" name="sex"/>
          男<input type="radio" value="2" name="sex" />
        保密<input type="radio" value="0" name="sex"  checked/></td>
 </tr>
 
 <tr>
     <td>密码:</td><td><input name="pass" class="myText" type="password" onblur="check_len(this)"/><span id="show_pass" style="color:red;"></span></td>
 </tr>
 
 <tr>
     <td>重复密码:</td><td><input name="repass" class="myText" type="password" onblur="check_pass(this)" /><span id="show_repass" style="color:red;"></span></td>
 </tr>
 
 <tr>
     <td>QQ:</td><td><input type="text" class="myText"  name="qq" onblur="check_qq(this)"/><span style="color:red;" id="show_qq"></span></td>
 </tr>
 
 <tr>
     <td>邮箱:</td><td><input type="text" class="myText" name="email"  onblur="check_email(this)"/><span id="show_e" style="color:red;"></span></td>
 </tr>
 
 <tr>
     <td height="60">头像:</td>
     <td>
     <select name="img_select" onchange="img_change(this)">
         <option value="101" >女 001</option>
         <option value="102" >女 002</option>
         <option value="103" >女 003</option>
         <option value="104" >女 004</option>
         <option value="105" >男 001</option>
         <option value="106" >男 002</option>
         <option value="107" >男 003</option>
         <option value="108" >男 004</option>
      </select>
      <img" width=100% src="/bbs/img/101.gif" id="tx_change" style="width:50px; height:65px;" alt=""/>
     </td>
 </tr>
 
 <tr height="20" align="justify">
     <td align="right" ><input type="submit" value="注册" name="submit" style="margin-right:5px;"/></td>
     <td><input type="reset"  value="重置" name="reset" style="margin-left:5px;"/></td>
 </tr>
 
 <tr>
     <td  colspan="2">我已有账号现在<a href="login.php">登录</a></td>
 </tr>
 
 </table>
 </form>
 </body>
 </html>

文章介绍了关于Sina OAuth request_token 如何存储,有需要了解的同学可参考一下。

资源如下:

  1. jquery1342660045312="31">新浪的OAuth API地址
  2. 新浪微博开放平台OAuth授权解决方案(含代码

纠结的问题在于此:

  1. 新浪使用的是OAuth 1.0 ,在用户授权验证前,需要先生成request_token
  2. request_token 应该如何存储?
  3. SDK中的建议是存储在SESSION中,但是如果我有多台前端机,DNS解析又是不靠谱的,那么我的多台机器如何同步SESSION?
  4. SESSION存储在数据库中可以避免此问题,可是问题是我的业务不需要用到数据库,为了存储临时性的一次SESSION而用库,太不划算。
  5. 存储到COOKIE中,多台前端机的问题就不用关心了,不过是否会有不安全因素呢?
  6. COOKIE中是否可以存储一个字符串,该串为MEMCACHE的KEY,由MEM来存储这个一次性的request_token 是否可行?
  7. 别人拿到COOKIE,COOKIE可以加一些验证,比如签名之类的东西,并不是随便改造就可以破坏我的程序的。

分析过程大致如上,具体如何实现还在纠结!

文章详细的介绍了关于php生成略缩图程序过程与实现方法 ,有需要了解的同学可参考一下下。

12.3  自动微缩图的生成
    由于图片的数据量比较大,传递过程相对较长,所以在用户浏览图片时,常常希望先
显示一个图片的缩略图。
    虽然在HTML中可以通过指定图片的宽度和高度来随意缩放图片,但是这种方法不会
减少图片的像素数目。图形文件的尺寸没有改变,当然也不会加快图片下载的速度了。当
然也可以手动通过图形软件生成图片的缩略图,但对于大量的图片展示来说,这个工作量
将十分巨大。为此微缩图的自动生成程序就被设计出来了。
    PHP中提供的imagecopyresized函数就可以用来生成真正的缩赂图片。该函数的标推
语法如下:
    语法:int imagecopyresized(int dst_im,int src_im,int dstX,int dstY,
int srcX,int srcY,int dstW,int dstH,int srcW,int srcH);

  返回值:整数
  函数种类:图形处理
  内容说明:本函数可复制新图,并重新调整图片的大小尺寸。参数都是目的在前,来
源在后。参数dst im及src_im为图片的handle。参数dstX、dstY、srcX、srcY分别为目的
及来源的坐标。参数dstW、dstH、srcW、srcH分别为来源及目的的宽及高,欲调整的新图
的尺寸就在这儿配置。
    下面举个例子来说明这个函数的用法,对应的程序thumb.php如程序清单12—5所示。

  程序清单12—5  thumb.php

 代码如下 复制代码
<?
// 本函数从源文件取出图像,设定成指定大小,并输出到目的文件
// 源文件格式:gif,jpg,png
// 目的文件格式:gif
// $srcFile:源文件
// $dstFile: 目标文件
// $dstW:目标图片宽度
// $dstH:目标文件高度
function makethumb($srcFile,$dstFile,$dstW,$dstH)
{
 $data = GetImageSize($srcFile,&$info);
 switch ($data[2])
 {
  case 1:
   $imgsrc = @ImageCreateFromGIF($srcFile);
   break;
  case 2:
   $imgsrc = @ImageCreateFromJPEG($srcFile);
   break;
  case 3:
   $imgsrc = @ImageCreateFromPNG($srcFile);
   break;
 }
 $srcW = ImageSX($imgsrc);
 $srcH = ImageSY($imgsrc);
 $ni = ImageCreate($dstW,$dstH);
 ImageCopyResized($ni,$imgsrc,0,0,0,0,$dstW,$dstH,$srcW,$srcH);
 Imagegif($ni,$dstFile);
 // 如果需要输出到浏览器,那么将上一句改为 ImageJpeg($ni);
 // 如果需要其他格式的图片,改动最后一句就可以了
}
?>

在这个例子中,首先通过getimagesize()函数获得源图片的情况,再用 imagecreatefromgif()、
imagecreatefromjpeg()或imagecreatefrompng()创建一个源位图$imgsrc,然后用
imagecreate()函数创建一个目标位图,其长、宽各是源位图的一半。然后调用imagecopyresized()
函数,将源位图缩小后拷贝到目标位图中,最后再用imagegif()函数生成缩略图。
    这里所用到的图形处理函数就是由安装的GD库提供的,现对其分别进行说明。首先
介绍getimagesize()函数,其标准语法如下。
    语法:array getimagesize(string filename,array [imageinfo]);
    返回值:数组
    函数种类:图形处理
    内容说明:本函数可用来取得GIF、JPEG及PNG  3种WWW上图片的高与宽,不
需要安装GD library就可以便用本函数。返回的数组有4个元素,返回数组的第一个元素(索
引值0)是图片的高度,单位是像素(pixel);第二个元素(索引值1)是图片的宽度;第三个元
素(索引值2)是图片的文件格式,其值1为GIF格式、2为JPEG/JPG格式、3为PNG格式;
第四个元素(索引值3)为图片的高与宽字符串,height=xxx width=yyy。
    通过getimagesize()函数的应用,能轻易获取图片的各种信息。下面给大家举一个获取
图片宽度、高度、格式、文件大小的信息的例子,来进一步领会getimagesize()函数的使用
技巧。程序imginfo如程序清单12—6所示。

  程序清单12-6  imginfo.php

 代码如下 复制代码

<?php
function getImageInfo($img) //$img为图像文件绝对路径
{
 $img_info = getimagesize($img);
 switch ($img_info[2])
 {
  case 1:
   $imgtype = "GIF";
   break;
  case 2:
   $imgtype = "JPG";
   break;
  case 3:
   $imgtype = "PNG";
   break;
 }
 $img_type = $imgtype."图像";
 $img_size = ceil(filesize($img)/1000)."k"; //获取文件大小

 $new_img_info = array (
  "width"=>$img_info[0],
  "height"=>$img_info[1],
  "type"=>$img_type,
  "size"=>$img_size
  );
 print " width";
 print $img_info[0];
 print " height";
 print $img_info[1];
 print " format";
 print $img_type;
 print " size";
 print $img_size;
 print $new_img_info;
 }
 
 $img = "/www/htdocs/images/jf.gif";
 getImageInfo($img);
?>

   

在程序12-5中要创建一个缩略图,需要先创建一个用来绘图的空白的画布。
ImageCreate函数可以做到这一点。它将返回一个图像的标识符,并且需要告诉函数用像素
计算的画布有多大(x(宽度)与y(高度))。在程序12-5中用到的图形创建函数imagecreate()
的标准语法如下:
    语法:int imagecreate(int x_size,int y_size);
    返回值:整数
    函数种类:图形处理
    内容说明:本函数用来建立一张全空的图形。参数x_size、y_size为图形的尺寸,单位
为像素(pixel)。
 
    如果要从已经存在的图片中取出图片文件代码,可以用imagecreatefromgif()、
imagecreatefromjpeg()或imagecreatefrompng(),例如函数imagecreatefromgif()就是从一个GIF
格式的图片文件中取出对应的图片源代码,其标准语法如下:
  语法:int imagecreatefromgif(string filename);
  返回值:整数
  函数种类:图形处理
  内容说明:本函数用来取出一张GIF格式图形,通常作为背景或者基本的画布样本使
用。参数filename可以是本地端的文件,也可以是网络的URL地址。返回值为GIF的文件
代码,可供其他函数使用。
    在将源位图缩小后拷贝到目标位图中时,用到了imagecopyresized()函数,此函数可以
复制新图并调整大小,其标准语法如下:
    语法:int imagecopyresized(int dst_im,int src_im,int dstX,int dstY,int srcX,int srcY,
int dstW,int dstH,int srcW,int srcH);
    返回值:整数
    函数种类:图形处理


    内容说明:本函数可复制新图,并重新调整图片的大小尺寸。参数那是目的在前,来
源在后。参数ddst_im及src_im为图片的handle。参数dstX、dstY、srcX、srcY分别为目的
及来源的坐标。参数dstW、dstH、srcW、srcH分别为来源及目的的宽及高,若欲调整新图
的尺寸就在这里配置。
    最后在输出图像时用到的imagegif()函数的标准语法如下:
    语法:int imagegif(int im,string [filename]);
    返问值:整数
    函数种类:图形处理
    内容说明:本函数用来建立一张GIF格式图形。参数im为使用ImageCreate()所建立
的图片代码,参数filename可省略,若无本参数filename,则会将图片直接送到浏览器端,
记得在送出图片之前要先送出使用Content-type:image/gif的标头字符串(header)到浏览器
端,以顺利传输图片。若要使用透明背景的GIF图,也就是GIF89a的格式,需要先使用
ImageColorTransparent()配置透明背景。本函数产生的GIF图,由于有版权的问题,因此
在商业上的使用还要多加考虑。

 代码如下 复制代码

<?php

 $pic_name=date("dMYHis");

 // 生成图片的宽度
 $pic_width=$_POST['width'];

 // 生成图片的高度
 $pic_height=$_POST['length'];

 function ResizeImage($im,$maxwidth,$maxheight,$name){
  //取得当前图片大小
  $width = imagesx($im);
  $height = imagesy($im);
  //生成缩略图的大小
  if(($width > $maxwidth) || ($height > $maxheight)){
   $widthratio = $maxwidth/$width;  
   $heightratio = $maxheight/$height; 
   if($widthratio < $heightratio){
    $ratio = $widthratio;
   }else{
    $ratio = $heightratio;
   }
   $newwidth = $width * $ratio;
   $newheight = $height * $ratio;
  
   if(function_exists("imagecopyresampled")){
    $newim = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
   }else{
    $newim = imagecreate($newwidth, $newheight);
    imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
   }
   ImageJpeg ($newim,$name . ".jpg");
   ImageDestroy ($newim);
  }else{
   ImageJpeg ($im,$name . ".jpg");
  }
 }

 if($_FILES['image']['size']){
  //echo $_FILES['image']['type'];
  if($_FILES['image']['type'] == "image/pjpeg"||$_FILES['image']['type'] == "image/jpg"||$_FILES['image']['type'] == "image/jpeg"){
   $im = imagecreatefromjpeg($_FILES['image']['tmp_name']);
  }elseif($_FILES['image']['type'] == "image/x-png"){
   $im = imagecreatefrompng($_FILES['image']['tmp_name']);
  }elseif($_FILES['image']['type'] == "image/gif"){
   $im = imagecreatefromgif($_FILES['image']['tmp_name']);
  }
  if($im){
   if(file_exists($pic_name.'.jpg')){
    unlink($pic_name.'.jpg');
   }
   ResizeImage($im,$pic_width,$pic_height,$pic_name);
   ImageDestroy ($im);
  }
 }
?>

<img" width=100% src="<? echo $pic_name.'.jpg'; ?>"><br><br>
<form enctype="multipart/form-data" method="post" action="small_picture.php">
<br>
<input type="file" name="image" size="50" value="浏览"><p>
生成缩略图宽度:<input type="text" name="width" size="5"><p>
生成缩略图长度:<input type="text" name="length" size="5"><p>
<input type="submit" value="上传图片">
</form>

标签:[!--infotagslink--]

您可能感兴趣的文章: