php 批量生成缩略图代码
php 批量生成缩略图代码
//创建目录(目录, [模式])
function mkdirs($l1, $l2 = 0777){
if(!is_dir($l1)){
//如果目录不存在,递归建立
mkdirs(dirname($l1), $l2);
return @mkdir($l1, $l2);
}
return true;
}
//保存文件(文件, [内容])
function savefile($l1, $l2=''){
if(function_exists(file_put_contents)){
file_put_contents($l1, $l2);
} else{
$fp = @fopen($l1, 'wb');
@fwrite($fp, $l2);
fclose($fp);
}
}
//获取文件后缀(文件)
function getfix($l1){
return end(explode('.', $l1));
}
//是否为允许类型(当前, 允许)
function checkfix($l1, $l2){
if(!is_array($l2)){
$l2 = explode(',', str_replace(' ', '', $l2));
}
return in_array($l1, $l2) ? 1 : 0;
}
class image{
//源地址
var $src;
//新图路径(本地化后)
var $newsrc;
//允许的图类型
var $allowtype = array('.jpg','.gif','.png','.jpeg');
//是否缩略GIF, 为0不处理
var $regif = 0;
//是否保留源文件(1为保留, 0为MD5)
var $keep = 0;
//是否可以覆盖已存在的图片,为0则不可覆盖
var $over = 0;
//图片源目录
var $dir;
//处理后的目录
var $newdir;
function __construct($l1=null, $l2=null){
$this->dir = $l1 ? $l1 : "./images/temp";
$this->newdir = $l2 ? $l2 : "./images/s";
}
function image($l1=null, $l2=null){
$this->__construct($l1, $l2);
}
/**
* 处理后的文件路径
* 将源图片,MD5文件名后保存到新的目录里
*
* @ param rename()
* @ return 处理后的文件名
*/
function reName($src){
//MD5后文件名(例如:3293okoe.gif)
$l1 = substr(md5($src),10,10).strrchr($src,".");
//处理后文件名
$l1 = $this->w.'_'.$this->h.'_'.$l1;
//返回处理后的地址
return $this->newdir.'/'.$l1;
}
/**
* 生成缩略图
*
* @ param Mini(图片地址, 宽度, 高度, 质量)
* 如果要保留原来的文件名,请设置 $o->keep = 1;
* @ return 处理后的图片地址
*/
function Mini($src,$w,$h, $q=80){
$this->src = $src;
$this->w = $w;
$this->h = $h;
//是否处理GIF图
if(strrchr($src, ".") == ".gif" && $this->regif == 0){
return $this->src;
}
//是否保留原文件名,默认不保留
if(!$this->keep){
//改名后的文件地址
$newsrc = $this->reName($src);
} else {
//保持原名
$src = str_replace('\', '/', $src);
$newsrc = $this->newdir.strrchr($src, "/");
}
//如果已存在,直接返回地址
if(file_exists($newsrc) && $this->over == 0){
return $newsrc;
}
//如果是网络文件,先保存
if(strstr($src, "http://") && !strstr($src, $_SERVER['HTTP_HOST'])){
$src = $this->getimg($src);
}
//获取图片属性
$arr = getimagesize($src);
$ow = $arr[0];
$oh = $arr[1];
$ot = $arr[2];
switch($ot){
case 1:
$im = imagecreatefromgif($src);
break;
case 2:
$im = imagecreatefromjpeg($src);
break;
case 3:
$im = imagecreatefrompng($src);
break;
default:
return 0;
}
//处理缩略图
$nim = imagecreatetruecolor($w,$h);
$k1 = round($h/$w,2);
$k2 = round($oh/$ow,2);
if ($k1<$k2){
$oow = $ow;
$ooh = round($ow*$k1);
$sw = 0;
$sh = ($oh-$ooh)/2;
}
else {
$oow = $oh/$k1;
$ooh = $oh;
$sw = ($ow-$oow)/2;
$sh = 0;
}
//生成图片
if(function_exists(imagecopyresampled)){
imagecopyresampled($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);
}
else {
imagecopyresized($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);
}
//处理后的目录是否存在
if(!is_dir($this->newdir)){
@mkdir($this->newdir);
}
//保存图片
switch($ot){
case 1:
$rs = imagegif($nim,$newsrc);
break;
case 2:
$rs = imagejpeg($nim,$newsrc,$q);
break;
case 3:
$rs = imagepng($nim,$newsrc);
break;
default:
return 0;
}
//返回处理后路径
return $newsrc;
}
/**
* 保存网络图片
*
* @ param getImg(源图)
* @ return 保存后的本地址址(本地目录的MD5文件名)
*/
function getimg($l1){
$l2 = $this->dir.'/'.substr(md5($l1),10,10).strrchr($l1,".");
//文件存在,直接返回地址
if(file_exists($l2)){
//echo "exits...";
return $l2;
}
//开始获取文件,并返回新路径
$img = file_get_contents($l1);
if($img){
if(!is_dir($this->dir)){
@mkdir($this->dir);
}
savefile($l2, $img);
//echo "file_get..";
return $l2;
}
}
/**
* 转换缩略图(文件名和结构不变)
*
* @ param mini(源地址, 宽度, 高度, 质量 )
* @ return 生成的地址
*/
function reImg($src, $w, $h, $q=80){
$this->keep = 1;
return $this->Mini($src, $w, $h, $q);
}
}
PHP常用缓存方式入门教程
第一种,把需要缓存的数据进行处理,形成PHP可以直接执行的文件。在需要缓存数据
的时候,通过include方式引入,并使用。
第二种,把需要的数据通过serialize函数序列化后直接保存到文件。在需要使用缓存
数据的时候,通过反序列化读入文件内容并复制给需要的变量,然后使用。
测试结果:
通过测试我们发现,第二种也就是serialize缓存数据的方式更加高效。(数据略去,
最后提供了文章地址下载,大家可以自行测试)
原因分析:
include方式读取缓存的时候,PHP需要执行几个过程
1.读取文件
2.解析所Include的文件
3.执行,给变量赋值
而serialize序列化方式读取缓存的时候:
1.读取数据
2.反序列化数据内容
3.给变量赋值
从以上内容对比的话,可能是由于解析PHP文件内的数组需要的时间超过unserialize反
序列化数组的时间。如果你有兴趣可以查看《PHP filesystem相关函数和include
require的性能效率研究》:http://www.ccvita.com/163.html
测试文件代码:
下载地址:MooPHP-CacheTest.zip
原创地址:http://www.ccvita.com/311.html 有新的研究心得会在这里更新。
CacheTest_IncludeFile.php
CacheTest_SerializeFile.php
总结分析:
第一种,include缓存的方式
优点:增加数据的保密性,和安全性,缓存内容不会被外界发现。
缺点:速度相对较慢。
用途:保存禁止系统外部得知的数据,比如web系统的设置,甚至MySQL信息等的保存
第二种,serialize序列化缓存的方式
优点:速度较快。
缺点:缓存系统文件路径一点曝光,缓存内容会泄露。
用途:缓存最新文章,相关文章等不担心外部得知的数据的时候,可以使用这种方式。
备注:
当装了ea、apc等PHP内存缓存之后,第一种通过include读取缓存的方式速度会高于第
二种serialize序列化缓存的方式。所以在MooPHP框架中,我们对于非敏感信息采用第
二种方式缓存;敏感信息采用第一种方式缓存
php fscokopen实现数据异步调用代码
我们就可以使用fsockopen连接到本地服务器,触发脚本执行,然后立即返回,不等待
脚本执行完成。
function triggerRequest($url,
$post_data
=
array(),
$cookie
=
array())…{
$method
=
"GET"; //可以通过POST或者GET传递一些参数给要触发的脚本
$url_array
=
parse_url($url); //获取URL信息,以便平凑HTTP HEADER
$port
=
isset($url_array['port'])?
$url_array['port'] :
80;
$fp
=
fsockopen($url_array['host'],
$port,
$errno,
$errstr,
30);
if (!$fp) …{
return
FALSE;
}
$getPath
=
$url_array['path'] ."?".
$url_array['query'];
if(!empty($post_data))…{
$method
=
"POST";
}
$header
=
$method
.
"
"
.
$getPath;
$header
.=
" HTTP/1.1rn";
$header
.=
"Host: ".
$url_array['host'] .
"rn
"; //HTTP 1.1 Host域不能省略
/**//*以下头信息域可以省略
$header .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en
-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13 rn";
$header .= "Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=
0.8,image/png,q=0.5 rn";
$header .= "Accept-Language: en-us,en;q=0.5 ";
$header .= "Accept-Encoding: gzip,deflatern";
*/
$header
.=
"Connection:Closern";
if(!empty($cookie))…{
$_cookie
=
strval(NULL);
foreach($cookie
as
$k
=>
$v)…{
$_cookie
.=
$k."=".$v."; ";
}
$cookie_str
=
"Cookie: "
.
base64_encode($_cookie) ." rn";//传递Cookie
$header
.=
$cookie_str;
}
if(!empty($post_data))…{
$_post
=
strval(NULL);
foreach($post_data
as
$k
=>
$v)…{
$_post
.=
$k."=".$v."&";
}
$post_str
=
"Content-Type: application/x-www-form-urlencodedrn";//POST数据
$post_str
.=
"Content-Length: ".
strlen($_post) ." rn";//POST数据的长度
$post_str
.=
$_post."rnrn "; //传递POST数据
$header
.=
$post_str;
}
fwrite($fp,
$header);
//echo fread($fp, 1024); //我们不关心服务器返回
fclose($fp);
return
true;
}
现在,就可以通过这个函数来触发一个PHP脚本的执行,然后函数就会返回。 我们
就可以接着执行下一步操作了。
还有一个问题就是,当客户端断开连接以后。也就是triggerRequest发送请求后,
立即关闭了连接,那么可能会引起服务器端正在执行的脚本退出。
在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:
* 0 - NORMAL(正常)
* 1 - ABORTED(异常退出)
* 2 - TIMEOUT(超时)
当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当客户端中断连接时,
ABORTED状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮
导致的。当连接时间超过 PHP 的时限(请参阅set_time_limit() 函数)时,TIMEOUT
状态的标记将被打开。
可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来
很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户端连接中断
时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache
.conf设置中对应的“php_value ignore_user_abort”以及 ignore_user_abort() 函
数来控制。如果没有告诉PHP 忽略用户的中断,脚本将会被中断,除非通过
register_shutdown_function()设置了关闭触发函数。通过该关闭触发函数,当远程用
户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP将会检测到连接已被中断,并调
用关闭触发函数。
脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以
通过设置 php.ini 的max_execution_time 或 Apache .conf 设置中对应的
“php_valuemax_execution_time”参数或者 set_time_limit()函数来更改。当计数器
超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数
也将在这时被执行。在该关闭触发函数中,可以通过调用 connection_status() 函数
来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函
数将返回 2。
需要注意的一点是 ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略
用户的退出操作时是可能的。PHP将仍然注意用户已经中断了连接但脚本仍然在运行的
情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。
在这时会发现函数connection_status() 返回 3。
所以还在要触发的脚本中指明:
ignore_user_abort(TRUE); //如果客户端断开连接,不会引起脚本abort.
set_time_limit(0);//取消脚本执行延时上限
或者,也可以使用:
register_shutdown_function(callback fuction[, parameters]);//注册脚本退出时
执行的函数
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);
?>
用递归的算法
$monkeys = array(1 , 2 , 3 , 4 , 5 , 6 , 7, 8 , 9 , 10); //monkey的编号
$m = 4; //数到第几只的那只猴子被踢出去
/* 猴王算法*/
/*面向过程的实现 */
function killMonkey($monkeys , $m , $current = 0){
$number = count($monkeys);
$num = 1;
if(count($monkeys) == 1){
echo $monkeys[0]."成为猴王了";
return;
}
else{
while($num++ < $m){
$current++ ;
$current = $current%$number;
}
echo $monkeys[$current]."的猴子被踢掉了<br/>";
array_splice($monkeys , $current , 1);
killMonkey($monkeys , $m , $current);
}
}
killMonkey($monkeys , $m);
<?php
require('path.inc.php');
header('content-Type: text/html; charset=utf-8');
$borough_id = intval($_GET['id']);
if(!$borough_id){
echo '
<script>
parent.document.getElementById('mapDiv').style.display="none";
parent.document.getElementById('mapDivLink').style.display="none";
</script>
';
exit;
}
$borough = new Borough($query);
$boroughInfo = $borough->getInfo($borough_id,'*',1,true);
//charsetIconv($boroughInfo,'gbk','utf-8');
$pos = strpos($boroughInfo['borough_name'],'(');
if($pos!==false){
$boroughInfo['borough_name'] = substr($boroughInfo['borough_name'],0,$pos);
}
$boroughInfo['borough_address'] = iconv('gb2312','utf-8',$boroughInfo['borough_address']);
$boroughInfo['borough_name'] = iconv('gb2312','utf-8',$boroughInfo['borough_name']);
$pos = strpos($boroughInfo['borough_name'],'(');
if($pos!==false){
$boroughInfo['borough_name'] = substr($boroughInfo['borough_name'],0,$pos);
}
if(strpos($boroughInfo['borough_name'],'福州')===false){
$boroughInfo['borough_name'] = "福州".$boroughInfo['borough_name'];
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>小区地图</title>
<script src="<?php echo $cfg['path']['js'].'jquery.js'; ?>" type="text/javascript"></script>
<script src="http://ditu.google.com/maps?file=api&v=2.x&key=ABQIAAAAHhTjWVGPsP7PRmx_R_91ZRTVyAFvJakBKxQFkhQ3JHiKjMJ6fhSBvkRl-6priBh_xdqXZcn6jaYGDw&hl=zh-CN" type="text/javascript"></script>
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0" type="text/javascript"></script>
<script type="text/javascript">
var map = null;
var geocoder = null;
document.domain="fangke.cc";
function initialize() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map_canvas"));
//map.setCenter(new GLatLng(39.917, 116.397), 13);
geocoder = new GClientGeocoder();
map.addControl(new GLargeMapControl());
//map.addControl(new GMapTypeControl());
}
}
function showAddress(address) {
if (geocoder) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
parent.document.getElementById('mapDiv').style.display="none";
parent.document.getElementById('mapDivLink').style.display="none";
} else {
$.post("ajax.php", { point: point,action:"point", id: "<?php echo $boroughInfo['id'];?>" } ,function(data){
//alert(data);
});
map.setCenter(point, 13);
var marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(address+"<br><span style='font-size:12px; color:#999; line-height:150%;'><?php echo $boroughInfo['borough_address']; ?></span><br><a href='<?php echo $cfg['url_community'];?>sale.php?id=<?php echo $borough_id ?>' style='font-size:12px; color:#f90; line-height:150%;' target='_blank'>二手房源:<?php echo $boroughInfo['sell_num']; ?>套</a><br><a href='<?php echo $cfg['url_community'];?>rent.php?id=<?php echo $borough_id ?>' style='font-size:12px; color:#f90; line-height:150%;' target='_blank'>出租房源:<?php echo $boroughInfo['rent_num']; ?>套</a>");
}
}
);
}
}
function setPoint(point){//php教程
eval("var latlng = new GLatLng"+point+";");
map.setCenter(latlng, 13);
var marker = new GMarker(latlng);
map.addOverlay(marker);
marker.openInfoWindowHtml("<a href='<?php echo $cfg['url_community'];?>g-<?php echo $borough_id ?>.html' style='font-size:14px; color:#000; line-height:150%;' target='_blank'><?php echo $boroughInfo['borough_name']; ?></a><br><span style='font-size:12px; color:#999; line-height:150%;'><?php echo $boroughInfo['borough_address']; ?></span><br><a href='<?php echo $cfg['url_community'];?>sale.php?id=<?php echo $borough_id ?>' style='font-size:12px; color:#f90; line-height:150%;' target='_blank'>二手房源:<?php echo $boroughInfo['sell_num']; ?>套</a><br><a href='<?php echo $cfg['url_community'];?>rent.php?id=<?php echo $borough_id ?>' style='font-size:12px; color:#f90; line-height:150%;' target='_blank'>出租房源:<?php echo $boroughInfo['rent_num']; ?>套</a>");
}
</script>
</head>
<body onunload="GUnload()">
<div id="map_canvas" style="width: 680px; height: 300px"></div>
</body>
<script type="text/javascript">
initialize();
<?php if ($boroughInfo['layout_map'] ){ ?>
setPoint('<?php echo $boroughInfo['layout_map']; ?>');
<?php }else{ ?>
showAddress('<?php echo $boroughInfo['borough_name']; ?>');
<?php } ?>
</script>
</html>
相关文章
- 本文介绍两种使用 php 生成二维码的方法。 (1)利用google生成二维码的开放接口,代码如下: /** * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】 * @param strin...2015-10-21
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了C#生成随机数功能,涉及C#数学运算与字符串操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 关于生成唯一数字ID的问题,是不是需要使用rand生成一个随机数,然后去数据库查询是否有这个数呢?感觉这样的话有点费时间,有没有其他方法呢?当然不是,其实有两种方法可以解决。 1. 如果你只用php而不用数据库的话,那时间戳+随...2015-11-24
- 下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
- 经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
- js生成随机数主要用到了内置的Math对象的random()方法。用法如:Math.random()。它返回的是一个 0 ~ 1 之间的随机数。有了这么一个方法,那生成任意随机数就好理解了。比如实际中我们可能会有如下的需要: (1)生成一个 0 - 1...2015-10-21
- 这篇文章主要介绍了c#生成高清缩略图的二个示例,需要的朋友可以参考下...2020-06-25
- 验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
- 复制代码 代码如下:function getTagStyle(){ $minFontSize=8; //最小字体大小,可根据需要自行更改 $maxFontSize=18; //最大字体大小,可根据需要自行更改 return 'font-size:'.($minFontSize+lcg_value()*(abs($maxFo...2013-10-04
- 下面小编就为大家带来一篇JS生成某个范围的随机数【四种情况详解】。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧...2016-04-22
- 解决办法:$str=”QB”.str_pad(($maxid[0]["max(id)"]+1),5,”0″,STR_PAD_LEFT ); 其中$maxid[0]["max(id)"]+1) 是利用max函数从数据库中找也ID最大的一个值, ID为主键,不会重复。 str_pad() 函数把字符串填充为指...2013-10-04
- 这篇文章主要介绍了C#生成Word文档代码示例,本文直接给出代码实例,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了Vue组件文档生成工具库的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-11
- 这篇文章主要介绍了PHP简单实现生成txt文件到指定目录的方法,简单对比分析了PHP中fwrite及file_put_contents等函数的使用方法,需要的朋友可以参考下...2016-04-28
- 这款批量生成缩略图代码可以生成指定大小的小图哦,并且支持文件批量上传。 这款教程会用到php文件 view.php config.php funs.php index.php 功能: -------...2016-11-25
- 这篇文章主要介绍了C#实现为一张大尺寸图片创建缩略图的方法,涉及C#创建缩略图的相关图片操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了史上最简洁C# 生成条形码图片思路及示例分享,需要的朋友可以参考下...2020-06-25
- if( isset($_FILES['upImg']) ) { if( $userGroup[$loginArr['group']]['upload'] == 0 ) { echo '{"error":"您所在的用户组无权上传图片!"}'; } else...2016-11-25
- $doc = new domdocument('1.0'); // we want a nice output $doc->formatoutput = true; 代码如下 复制代码 $root = $doc->createelement('bo...2016-11-25