代码如下:
<?php
require(inc/conn.php);
?>
<head>
<head>
<meta http-equiv="Content-Type" c />
<title>图片上传实现</title>
<script language="javascript">
function preview(x){
if(!x || !x.value) return;
var patn = /.jpg$|.jpeg$|.gif$/i;
if(patn.test(x.value)){
if(x.parentNode.nextSibling.firstChild){
//看看是不是已经添加了图片标签,如果添加了就直接修改图片地址
x.parentNode.nextSibling.firstChild.setAttribute(src,file://localhost/+x.value);
}else{
//没添加就创建个咯,然后加入到当前节点的父节点的下一个节点 -_-
var img = document.createElement(img);
img.setAttribute(src,file://localhost/+x.value);
img.setAttribute(width,120);
img.setAttribute(height,100);
x.parentNode.nextSibling.appendChild(img);
//parentNode 父节点
//nextSibling 下个节点
//appendChild 添加个子节点
return(x.value);
}
}else{
alert(貌似你选的不是个图片的说!);
x.value=; //本人不懂js,考来的,对不住各位了,也谢谢原作者!
}
}
</script>
</head>
</head>
<body>
php ajax 分页一
ajax分页 php ajax分页 java ajax分页 asp.net ajax分页 jquery ajax 分页 jsp ajax无刷新分页 asp ajax分页 ajax 分页问题 ajax实现分页 ajax jsp分页
ajax 分页用的是在客户端分析数据,然后再发给php文件进行处理,返回给客户端处理理,思路就是这样的.
php ajax 分页二
ajax分页 php ajax分页 java ajax分页 asp.net ajax分页 jquery ajax 分页 jsp ajax无刷新分页 asp ajax分页 ajax 分页问题 ajax实现分页 ajax jsp分页
下面接着上一篇文件来看page.js的代码,
php压缩技术
GZIP(GNU-ZIP)是一种压缩技术。经过GZIP压缩后页面大小可以变为原来的30%甚至更小。这样用户浏览的时候就会感觉很爽很愉快!
要实现GZIP压缩页面需要浏览器和服务器共同支持,实际上就是服务器压缩,传到浏览器后浏览器解压并解析。浏览器那边不需要我们担心,因为现在绝大多数浏览器都支持解析GZIP过的页面。我们只要把页面在服务器端压缩再输出到浏览器就行了。
有点罗嗦,下面说正事:
正如要制作压缩饼干,先要拿到原料,要压缩一个页面,首先要获得要输出的内容。PHP中的ob_start()(ob => output buffer)函数可以实现这个功能,它可以把程序里准备输出的内容先放到一个叫做“缓冲区”的地方,当然,你可以理解为制作压缩饼干的暂时放原料的工作台。
这个函数一定要在页面输出之前使用,所以一般把它放在代码的最顶端。因为它就像是一个工作台,所以你要在原料到来之前就要准备好它,否则原料来了没地方放,会出问题的。用ob_start()得到要压缩的页面之后,我们就可以制作压缩饼干了,不对,应该是可以压缩页面了!不过好像还缺少一台压缩机,EZ,我们用PHP带的zlib扩展做一台:
php读取execel内容
<?
define(ABC_CRITICAL, 0);
define(ABC_ERROR, 1);
define(ABC_ALERT, 2);
define(ABC_WARNING, 3);
define(ABC_NOTICE, 4);
define(ABC_INFO, 5);
define(ABC_DEBUG, 6);
define(ABC_TRACE, 7);
define(ABC_VAR_DUMP, 8);
define(ABC_NO_LOG, -1);
$php_version = split( ".", phpversion() );
if( $php_version[0] == 4 && $php_version[1] <= 1 ) {
if( !function_exists(var_export) ) {
function var_export( $exp, $ret ) {
ob_start();
var_dump( $exp );
$result = ob_get_contents();
ob_end_clean();
return $result;
}}}function print_bt()
{
print "<code>n";
$cs = debug_backtrace();
for( $i = 1; $i < count($cs) ; $i++ )
{
$item = $cs[ $i ];
for( $j = 0; $j < count($item[args]); $j++ )
if( is_string($item[args][$j]) )
$item[args][$j] = """ . $item[args][$j] . """;
$args = join(",", $item[args] );
if( isset( $item[class] ) )
$str = sprintf("%s(%d): %s%s%s(%s)",
$item[file],
$item[line],
$item[class],
$item[type],
$item[function],
$args );
else
$str = sprintf("%s(%d): %s(%s)",
$item[file],
$item[line],
$item[function],
$args );
echo $str . "<br>n";
}print "</code>n";
}function _die( $str )
{
print "Script died with reason: $str<br>n";
print_bt();
exit();
}class DebugOut
{
var $priorities = array(ABC_CRITICAL => critical,
ABC_ERROR => error,
ABC_ALERT => alert,
ABC_WARNING => warning,
ABC_NOTICE => notice,
ABC_INFO => info,
ABC_DEBUG => debug,
ABC_TRACE => trace,
ABC_VAR_DUMP => dump
);
var $_ready = false;
var $_currentPriority = ABC_DEBUG;
var $_consumers = array();
var $_filename;
var $_fp;
var $_logger_name;
function DebugOut($name, $logger_name, $level ){
$this->_filename = $name;
$this->_currentPriority = $level;
$this->_logger_name = $logger_name;
if ($level > ABC_NO_LOG){
$this->_openfile();
}
register_shutdown_function(array($this,"close"));
} function log($message, $priority = ABC_INFO) {
if ($priority > $this->_currentPriority) {
return false;
}
return $this->_writeLine($message, $priority, strftime(%b %d %H:%M:%S));
} function dump($variable,$name) {
$priority = ABC_VAR_DUMP;
if ($priority > $this->_currentPriority ) {
return false;
} $time = strftime(%b %d %H:%M:%S);
$message = var_export($variable,true);
return fwrite($this->_fp,
sprintf("%s %s [%s] variable %s = %s rn",
$time,
$this->_logger_name,
$this->priorities[$priority],
$name,
$message)
);
} function info($message) {
return $this->log($message, ABC_INFO);
} function debug($message) {
return $this->log($message, ABC_DEBUG);
} function notice($message) {
return $this->log($message, ABC_NOTICE);
} function warning($message) {
return $this->log($message, ABC_WARNING);
} function trace($message) {
return $this->log($message, ABC_TRACE);
} function error($message) {
return $this->log($message, ABC_ERROR);
}
function _writeLine($message, $priority, $time) {
if( fwrite($this->_fp, sprintf("%s %s [%s] %srn", $time, $this->_logger_name, $this->priorities[$priority], $message)) ) {
return fflush($this->_fp);
} else {
return false;
} } function _openfile() {
if (($this->_fp = @fopen($this->_filename, a)) == false) {
return false;
} return true;
} function close(){
if($this->_currentPriority != ABC_NO_LOG){
$this->info("Logger stoped");
return fclose($this->_fp);
} }
function Factory($name, $logger_name, $level) {
$instance = new DebugOut($name, $logger_name, $level);
return $instance;
} function &getWriterSingleton($name, $logger_name, $level = ABC_DEBUG){
static $instances;
if (!isset($instances)){
$instances = array();
} $signature = serialize(array($name, $level));
if (!isset($instances[$signature])) {
$instances[$signature] = DebugOut::Factory($name, $logger_name, $level);
}
return $instances[$signature];
} function attach(&$logObserver) {
if (!is_object($logObserver)) {
return false;
} $logObserver->_listenerID = uniqid(rand());
$this->_listeners[$logObserver->_listenerID] = &$logObserver;
}}define (ABC_BAD_DATE, -1);
class ExcelDateUtil{
function xls2tstamp($date) {
$date=$date>25568?$date:25569;
$ofs=(70 * 365 + 17+2) * 86400;
return ($date * 86400) - $ofs;
}function getDateArray($xls_date){
$ret = array();
if ($xls_date == 60) {
$ret[day] = 29;
$ret[month] = 2;
$ret[year] = 1900;
return $ret;
} else if ($xls_date < 60) {
$xls_date++;
}
$l = $xls_date + 68569 + 2415019;
$n = (int)(( 4 * $l ) / 146097);
$l = $l - (int)(( 146097 * $n + 3 ) / 4);
$i = (int)(( 4000 * ( $l + 1 ) ) / 1461001);
$l = $l - (int)(( 1461 * $i ) / 4) + 31;
$j = (int)(( 80 * $l ) / 2447);
$ret[day] = $l - (int)(( 2447 * $j ) / 80);
$l = (int)($j / 11);
$ret[month] = $j + 2 - ( 12 * $l );
$ret[year] = 100 * ( $n - 49 ) + $i + $l;
return $ret;
}function isInternalDateFormat($format) {
$retval =false;
switch(format) {
case 0x0e:
case 0x0f:
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x14:
case 0x15:
case 0x16:
case 0x2d:
case 0x2e:
case 0x2f:
case 0xa4:
case 0xa5:
case 0xa6:
case 0xa7:
case 0xa8:
case 0xa9:
case 0xaa:
case 0xab:
case 0xac:
case 0xad:
$retval = true; break;
default: $retval = false; break;
} return $retval;
}}define(EXCEL_FONT_RID,0x31);
define(XF_SCRIPT_NONE,0);
define(XF_SCRIPT_SUPERSCRIPT,1);
define(XF_SCRIPT_SUBSCRIPT,2);
define(XF_UNDERLINE_NONE,0x0);
define(XF_UNDERLINE_SINGLE,0x1);
define(XF_UNDERLINE_DOUBLE,0x2);
define(XF_UNDERLINE_SINGLE_ACCOUNTING,0x3);
define(XF_UNDERLINE_DOUBLE_ACCOUNTING,0x4);
define(XF_STYLE_ITALIC, 0x2);
define(XF_STYLE_STRIKEOUT, 0x8);
define(XF_BOLDNESS_REGULAR,0x190);
define(XF_BOLDNESS_BOLD,0x2BC);
class ExcelFont {
function basicFontRecord() {
return array(size => 10,
script => XF_SCRIPT_NONE,
undeline => XF_UNDERLINE_NONE,
italic => false,
strikeout=> false,
bold => false,
boldness => XF_BOLDNESS_REGULAR,
palete => 0,
name => Arial);
} function getFontRecord(&$wb,$ptr) {
$retval = array(size => 0,
script => XF_SCRIPT_NONE,
undeline => XF_UNDERLINE_NONE,
italic => false,
strikeout=> false,
bold => false,
boldness => XF_BOLDNESS_REGULAR,
palete => 0,
name => );
$retval[size] = (ord($wb[$ptr])+ 256*ord($wb[$ptr+1]))/20;
$style=ord($wb[$ptr+2]);
if (($style & XF_STYLE_ITALIC) != 0) {
$retval[italic] = true;
} if (($style & XF_STYLE_STRIKEOUT) != 0) {
$retval[strikeout] = true;
} $retval[palete] = ord($wb[$ptr+4])+256*ord($wb[$ptr+5]);
$retval[boldness] = ord($wb[$ptr+6])+256*ord($wb[$ptr+7]);
$retval[bold] = $retval[boldness] == XF_BOLDNESS_REGULAR ? false:true;
$retval[script] = ord($wb[$ptr+8])+256*ord($wb[$ptr+9]);
$retval[underline] = ord($wb[$ptr+10]);
$length = ord($wb[$ptr+14]);
if($length >0) {
if(ord($wb[$ptr+15]) == 0) {
$retval[name] = substr($wb,$ptr+16,$length);
} else {
$retval[name] = ExcelFont::getUnicodeString($wb,$ptr+15,$length);
} } return $retval;
} function toString(&$record,$index) {
$retval = sprintf("Font Index = %d nFont Size =%dnItalic = %snStrikeoout=%snPalete=%snBoldness = %s Bold=%sn Script = %dn Underline = %dn FontName=%s<hr>",
$index,
$record[size],
$record[italic] == true?"true":"false",
$record[strikeout] == true?"true":"false",
$record[palete],
$record[boldness],
$record[bold] == true?"true":"false",
$record[script],
$record[underline],
$record[name]
);
return $retval;
} function getUnicodeString(&$string,$offset,$length) {
$bstring = "";
$index = $offset + 1;
for ($k = 0; $k < $length; $k++)
{
$bstring = $bstring.$string[$index];
$index += 2;
} return substr($bstring,0,$length);
} function ExcelToCSS($rec, $app_font=true, $app_size=true, $app_italic=true, $app_bold=true){
$ret = "";
if($app_font==true){
$ret = $ret."font-family:".$rec[name]."; ";
} if($app_size==true){
$ret = $ret."font-size:".$rec[size]."pt; ";
} if($app_bold==true){
if($rec[bold]==true){
$ret = $ret."font-weight:bold; ";
} else {
$ret = $ret."font-weight:normal; ";
} } if($app_italic==true){
if($rec[italic]==true){
$ret = $ret."font-style:italic; ";
} else {
$ret = $ret."font-style:normal; ";
} } return $ret;
}}define ( DP_EMPTY, 0 );
define ( DP_STRING_SOURCE, 1 );
define ( DP_FILE_SOURCE, 2 );
class ExcelParserUtil
{
function str2long($str) {
return ord($str[0]) + 256*(ord($str[1]) +
256*(ord($str[2]) + 256*(ord($str[3])) ));
}}
class DataProvider
{
function DataProvider( $data, $dataType )
{
switch( $dataType )
{
case DP_FILE_SOURCE:
if( !( $this->_data = @fopen( $data, "rb" )) )
return;
$this->_size = @filesize( $data );
if( !$this->_size )
_die("Failed to determine file size.");
break;
case DP_STRING_SOURCE:
$this->_data = $data;
$this->_size = strlen( $data );
break;
default:
_die("Invalid data type provided.");
}$this->_type = $dataType;
register_shutdown_function( array( $this, "close") );
}function get( $offset, $length )
{
if( !$this->isValid() )
_die("Data provider is empty.");
if( $this->_baseOfs + $offset + $length > $this->_size )
_die("Invalid offset/length.");
switch( $this->_type )
{
case DP_FILE_SOURCE:
{
if( @fseek( $this->_data, $this->_baseOfs + $offset, SEEK_SET ) == -1 )
_die("Failed to seek file position specified by offest.");
return @fread( $this->_data, $length );
}case DP_STRING_SOURCE:
{
$rc = substr( $this->_data, $this->_baseOfs + $offset, $length );
return $rc;
}default:
_die("Invalid data type or class was not initialized.");
}}function getByte( $offset )
{
return $this->get( $offset, 1 );
}function getOrd( $offset )
{
return ord( $this->getByte( $offset ) );
}function getLong( $offset )
{
$str = $this->get( $offset, 4 );
return ExcelParserUtil::str2long( $str );
}function getSize()
{
if( !$this->isValid() )
_die("Data provider is empty.");
return $this->_size;
}function getBlocks()
{
if( !$this->isValid() )
_die("Data provider is empty.");
return (int)(($this->_size - 1) / 0x200) - 1;
}function ReadFromFat( $chain, $gran = 0x200 )
{
$rc = ;
for( $i = 0; $i < count($chain); $i++ )
$rc .= $this->get( $chain[$i] * $gran, $gran );
return $rc;
}function close()
{
switch($this->_type )
{
case DP_FILE_SOURCE:
@fclose( $this->_data );
case DP_STRING_SOURCE:
$this->_data = null;
default:
$_type = DP_EMPTY;
break;
}}function isValid()
{
return $this->_type != DP_EMPTY;
}var $_type = DP_EMPTY;
var $_data = null;
var $_size = -1;
var $_baseOfs = 0;
}class ExcelFileParser {
var $dp = null;
var $max_blocks;
var $max_sblocks;
var $fat;
var $sfat;
var $formats;
var $xf;
var $fonts;
var $dbglog;
类似dz 分页代码
用法示例:
<?php
Class_Scroll::_Print($_SERVER[PHP_SELF],1234,$_GET[Page],10,$_SERVER[QUERY_STRING],"Page",9,true);
?>
PHP程序员一般都忽略了的几点精华
我发现很多的PHP程序员,尤其是学习还不是很久的,都不知道PHP的精华所在。Perl当年如何在商界出名?其强大的正则表达式。而PHP呢?他是一门从Unix下发展起来的语言,当然也就继续了Perl的很多特点,同时C的优点都有。快速、简洁、明了,尤其是C程序员,PHP是至爱,我就是深爱着“PHP”(都忘了女友了:))。这里,我想来写一篇PHP的变量、数组应用技巧和PHP的正则表达式、PHP的模板应用,以后有时间再写PHP与COM、PHP与XML的完全结合。
不定数量表单生成缩略较长
先来看看,例子调用方法:
效果图:
php实现文件在线压缩功能
<?php
class ZipAllFloder{
var $cachelist = array();
var $datasec = array();
var $ctrl_dir = array();
var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00";
var $old_offset = 0;
function StartWork($dir){
$result = $this->GetList($dir);
$this->ClearCache();
return $result;
}
function ReadAndExport($filelist,$zipfilename){
if (count($filelist)>0){
foreach($filelist as $filename){
if (is_file($filename)){
$fp = fopen ($filename, "r");
$content = @fread ($fp,filesize($filename));
fclose ($fp);
$filename = basename($filename);
$this -> addFile($content, $filename);
}
}
}else{
$this -> addFile("This folder have none a single file!","nofile.log");
}
$out = $this -> outfile();
$this -> IniVars();
$fp = fopen($zipfilename,"w");
fwrite($fp,$out,strlen($out));
fclose($fp);
$this -> cachelist[] = $zipfilename;
}
function GetList($dir){
if (file_exists($dir)){
$handle = opendir($dir);
while($files = readdir($handle)){
if (($files==".")||($files=="..")) continue;
if(is_dir($dir."/".$files)){
$this -> GetList($dir."/".$files);
}else{
$filelist[] = $dir."/".$files;
}
}
closedir($handle);
$zipfilename = dirname($dir)."/[FOLDER]".basename($dir).".zip";
$this -> ReadAndExport($filelist,$zipfilename);
}
return $zipfilename;
}
function ClearCache(){
if($num = count($this ->cachelist)){
for($i=0;$i<$num-1;$i++){
@unlink($this ->cachelist[$i]);
}
}
}
function IniVars(){
$this -> datasec = array();
$this -> ctrl_dir = array();
$this -> eof_ctrl_dir = "x50x4bx05x06x00x00x00x00";
$this -> old_offset = 0;
}
function unix2DosTime($unixtime = 0) {
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
if ($timearray[year] < 1980) {
$timearray[year] = 1980;
$timearray[mon] = 1;
$timearray[mday] = 1;
$timearray[hours] = 0;
$timearray[minutes] = 0;
$timearray[seconds] = 0;
}
return (($timearray[year]-1980)<<25)|($timearray[mon]<<21)|($timearray[mday]<<16)|($timearray[hours]<<11)|($timearray[minutes]<<5)|($timearray[seconds]>>1);
}
function addFile($data, $name, $time = 0){
$name = str_replace(, /, $name);
$dtime = dechex($this->unix2DosTime($time));
$hexdtime = x . $dtime[6] . $dtime[7]
. x . $dtime[4] . $dtime[5]
. x . $dtime[2] . $dtime[3]
. x . $dtime[0] . $dtime[1];
eval($hexdtime = " . $hexdtime . ";);
$fr = "x50x4bx03x04";
$fr .= "x14x00";
$fr .= "x00x00";
$fr .= "x08x00";
$fr .= $hexdtime;
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$c_len = strlen($zdata);
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
$fr .= pack(V, $crc);
$fr .= pack(V, $c_len);
$fr .= pack(V, $unc_len);
$fr .= pack(v, strlen($name));
$fr .= pack(v, 0);
$fr .= $name;
$fr .= $zdata;
$fr .= pack(V, $crc);
$fr .= pack(V, $c_len);
$fr .= pack(V, $unc_len);
$this -> datasec[] = $fr;
$new_offset = strlen(implode(, $this->datasec));
$cdrec = "x50x4bx01x02";
$cdrec .= "x00x00";
$cdrec .= "x14x00";
$cdrec .= "x00x00";
$cdrec .= "x08x00";
$cdrec .= $hexdtime;
$cdrec .= pack(V, $crc);
$cdrec .= pack(V, $c_len);
$cdrec .= pack(V, $unc_len);
$cdrec .= pack(v, strlen($name) );
$cdrec .= pack(v, 0 );
$cdrec .= pack(v, 0 );
$cdrec .= pack(v, 0 );
$cdrec .= pack(v, 0 );
$cdrec .= pack(V, 32 );
$cdrec .= pack(V, $this -> old_offset );
$this -> old_offset = $new_offset;
$cdrec .= $name;
$this -> ctrl_dir[] = $cdrec;
}
function outfile(){
$data = implode(, $this -> datasec);
$ctrldir = implode(, $this -> ctrl_dir);
return
$data .
$ctrldir .
$this -> eof_ctrl_dir .
pack(v, sizeof($this -> ctrl_dir)) .
pack(v, sizeof($this -> ctrl_dir)) .
pack(V, strlen($ctrldir)) .
pack(V, strlen($data)) .
"x00x00";
}
}
$zip = new ZipAllFloder();
$str = $zip->StartWork("./baby");
echo $str;
?>
php+ajax剪切图片
<style>
#image{background-image:url(http://pic1.phprm.com/2013/09/05/test1.jpg);width:1000px;height:200px;border:1px solid #000}
/*绝对定位很重要*/
#helper{position:absolute;width:100px;height:100px;border:1px solid #a9b53f;cursor:pointer;display:none;background-color:#999;top:30px;left:30px}
</style>
<script>
//目标源
var target;
//拖拽辅助容器
var helper;
//鼠标默认状态(false=没有按下)
var iMouseDown=false;
//当前的目标源
var ctar;
//鼠标偏移量
var mouseOff;
//ajax相关
var ajax;
//继承number类的NANA0,用途为:如果一个数为100px会返回100。
Number.prototype.NaN0=function(){return isNaN(this)?0:this;}
//初始化AJAX
function createRequest(){
var ajax;
if(window.ActiveXObject){
try{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
ajax = false;
}
}else{
try{
ajax = new XMLHttpRequest();
}catch(e){
ajax = false;
}
}
if(!ajax){
alert("Error creating the XMLHttpRequest object.");
}else{
return ajax;
}
}
//反送AJAX请求
function cutp(cutC){
ajax=createRequest();
ajax.onreadystatechange = action;
//发送请求的URL
url = "path=./test1.jpg&x="+parseInt(cutC.style.left)+"&y="+parseInt(cutC.style.top)+"&width="+parseInt(cutC.offsetWidth)+"&height="+parseInt
(cutC.offsetHeight);
window.status = url;
ajax.open("GET", "image.php?"+url, true);
ajax.send(null);
}
function action(){
var show = document.getElementById("show");
//如果SHOW这个容器原先有子节点,就清楚子节点
if(show.hasChildNodes()){
show.removeChild(show.childNodes[0]);
}
//状态为4&200的时候返回信息
if(ajax.readyState==4&&ajax.status==200){
show.innerHTML = ajax.responseText;
}
}
//创建可拖拽容器
function createContainer(arg){
helper = document.getElementById(helper);
//设置属性
helper.setAttribute("cut",1);
arg.onmouseover = function(){
helper.style.display="block";
}
arg.onmouseout = function(){
helper.style.display="none";
}
helper.ondblclick = function(){
cutp(helper);
}
}
//获取鼠标位置
function mouseCoords(ev){
if(ev.pageX || ev.pageY){
return {x:ev.pageX, y:ev.pageY};
}
return {
x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
y:ev.clientY + document.body.scrollTop - document.body.clientTop
};
}
//获取鼠标在当前容器的偏移量
function getMouseOffset(target, ev){
ev = ev || window.event;
var docPos = getPosition(target);
var mousePos = mouseCoords(ev);
return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}
//获取鼠标相对父节点的偏移量
function getPosition(e){
var left = 0;
var top = 0;
while (e.offsetParent){
left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
e = e.offsetParent;
}
left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)).NaN0():0);
top += e.offsetTop + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)).NaN0():0);
return {x:left, y:top};
}
//鼠标移动处罚的函数
function mouseMove(ev){
ev = ev||window.event;
var tar = ev.target||ev.srcElement;
var mousePos = mouseCoords(ev);
var rootar = tar.parentNode;
var mouseOf = getPosition(rootar);
//判断状态
if(iMouseDown&&mouseOff){
var limLefX=mouseOf.x+rootar.offsetWidth-tar.offsetWidth;
var limBottomY =mouseOf.y+rootar.offsetHeight-tar.offsetHeight;
var conLeft = mousePos.x-mouseOff.x;
var conTop = mousePos.y-mouseOff.y;
if(conLeft>=mouseOf.x&&conLeft<=limLefX){
helper.style.left = mousePos.x-mouseOff.x;
}
if(conTop>=mouseOf.y&&conTop<=limBottomY){
helper.style.top = mousePos.y-mouseOff.y;
}
}
}
//鼠标按键起来的函数
function mouseUp(){
iMouseDown = false;
}
//按下鼠标按键的函数
function mouseDown(ev){
iMouseDown = true;
ev = ev||window.event;
var tar = ev.target||ev.srcElement;
if(tar.getAttribute("cut")){
var hmouseOff = getPosition(tar);
helper.style.left = hmouseOff.x;
helper.style.top = hmouseOff.y;
mouseOff = getMouseOffset(tar,ev);
}
}
//监听事件
document.onmouseup = mouseUp;
document.onmousemove = mouseMove;
document.onmousedown = mouseDown;
window.onload=function(){
target = document.getElementById("image");
createContainer(target);
}
</script>
<div id="image" class="im"><div id="helper" class="drag">#dragHelper</div></div>
<div id="show"></div>
Php绘制柱状图
先来看看效果图吧:
下面我们来看看php怎么样实现绘图这个功能的.
用PHP实现小型站点广告管理
图片链接广告大概是最为常用的网络广告模式,但是多条广告的动态随机显示可不是那么简单的事情。PHP的文件上传函数提供了在这块468x60像素的区域(网页广告的标准尺寸)实现能够根据权值大小而随机显示广告的解决方案,从而避免了开发FTP程序或是ASP和Perl CAI中需要外挂扩展才能实现此项功能的弊端。
本例在PHP4 MySQL Apache for Win9x/2000下调试通过,共包括两部分:用来增加新广告的程序AddNewAd.php3以及显示广告的程序ShowAd.php3,都存放在服务器PHP文件目录下的“test/guanggao/”目录中。在guanggao目录中建立一个存放广告链接图片的子目录“adbanner/”。下面我们按步骤进行分析。
1.首先,建立MySQL数据库:guanggao
在Windows环境下,建立一个MySQL空数据库很简单,因为每个数据库都是存在于mysql/data/目录下的一个子目录,所以只要在该目录下新建子目录guanggao就可以了,这时数据库内还没有任何表和数据。
2.建立新增广告程序:AddNewAd.php3
设计思路:其中先用表单得到用户的新广告信息;然后用PHP函数copy()将链接图片(banner)文件上传到服务器adbanner目录下;最后将图片文件名、广告网址、说明、加权信息等写入建立的MySQL数据表ad中。该程序代码如下:
# AddNewAd.php3